Commit a3329836 authored by swift_gan's avatar swift_gan

add backup method stubs & remove error flag setting

parent e0d65df0
......@@ -29,10 +29,4 @@ public class CustmizeHooker {
return 0;
}
@HookMethodBackup("methodBeHooked")
@MethodParams({int.class, int.class})
public static int staticMethodHookedBackup(int a, int b) {
return 0;
}
}
......@@ -53,12 +53,6 @@ void disableInterpreterForO(art::mirror::ArtMethod* method) {
SandHook::CastArtMethod::accessFlag->set(method, accessFlag);
}
void disableAccessCheck(art::mirror::ArtMethod* method) {
uint32_t accessFlag = SandHook::CastArtMethod::accessFlag->get(method);
accessFlag |= 0x00080000;
SandHook::CastArtMethod::accessFlag->set(method, accessFlag);
}
void setPrivate(art::mirror::ArtMethod* method) {
uint32_t accessFlag = SandHook::CastArtMethod::accessFlag->get(method);
accessFlag &= ~ 0x1;
......@@ -123,7 +117,6 @@ bool doHookWithReplacement(art::mirror::ArtMethod *originMethod,
disableInterpreterForO(backupMethod);
}
tryDisableInline(backupMethod);
disableAccessCheck(backupMethod);
setPrivate(backupMethod);
SandHook::Trampoline::flushCache(reinterpret_cast<Size>(originMethod), SandHook::CastArtMethod::size);
}
......@@ -163,7 +156,6 @@ bool doHookWithInline(JNIEnv* env,
}
tryDisableInline(originMethod);
disableAccessCheck(originMethod);
SandHook::HookTrampoline* hookTrampoline = trampolineManager.installInlineTrampoline(originMethod, hookMethod, backupMethod, isNative(originMethod));
if (hookTrampoline == nullptr)
......@@ -183,7 +175,6 @@ bool doHookWithInline(JNIEnv* env,
disableInterpreterForO(backupMethod);
}
tryDisableInline(backupMethod);
disableAccessCheck(backupMethod);
setPrivate(backupMethod);
hookTrampoline->callOrigin->flushCache(reinterpret_cast<Size>(backupMethod), SandHook::CastArtMethod::size);
}
......
package com.swift.sandhook.wrapper;
import java.lang.reflect.Method;
public class BackupMethodStubs {
final static int maxStub = 100;
private static volatile int curStub = 0;
public static synchronized Method getStubMethod() {
while (curStub <= maxStub) {
try {
return BackupMethodStubs.class.getDeclaredMethod("stub" + curStub++);
} catch (NoSuchMethodException e) {
}
}
return null;
}
public void stub0() {}
public void stub1() {}
public void stub2() {}
public void stub3() {}
public void stub4() {}
public void stub5() {}
public void stub6() {}
public void stub7() {}
public void stub8() {}
public void stub9() {}
public void stub10() {}
public void stub11() {}
public void stub12() {}
public void stub13() {}
public void stub14() {}
public void stub15() {}
public void stub16() {}
public void stub17() {}
public void stub18() {}
public void stub19() {}
public void stub20() {}
public void stub21() {}
public void stub22() {}
public void stub23() {}
public void stub24() {}
public void stub25() {}
public void stub26() {}
public void stub27() {}
public void stub28() {}
public void stub29() {}
public void stub30() {}
public void stub31() {}
public void stub32() {}
public void stub33() {}
public void stub34() {}
public void stub35() {}
public void stub36() {}
public void stub37() {}
public void stub38() {}
public void stub39() {}
public void stub40() {}
public void stub41() {}
public void stub42() {}
public void stub43() {}
public void stub44() {}
public void stub45() {}
public void stub46() {}
public void stub47() {}
public void stub48() {}
public void stub49() {}
public void stub50() {}
public void stub51() {}
public void stub52() {}
public void stub53() {}
public void stub54() {}
public void stub55() {}
public void stub56() {}
public void stub57() {}
public void stub58() {}
public void stub59() {}
public void stub60() {}
public void stub61() {}
public void stub62() {}
public void stub63() {}
public void stub64() {}
public void stub65() {}
public void stub66() {}
public void stub67() {}
public void stub68() {}
public void stub69() {}
public void stub70() {}
public void stub71() {}
public void stub72() {}
public void stub73() {}
public void stub74() {}
public void stub75() {}
public void stub76() {}
public void stub77() {}
public void stub78() {}
public void stub79() {}
public void stub80() {}
public void stub81() {}
public void stub82() {}
public void stub83() {}
public void stub84() {}
public void stub85() {}
public void stub86() {}
public void stub87() {}
public void stub88() {}
public void stub89() {}
public void stub90() {}
public void stub91() {}
public void stub92() {}
public void stub93() {}
public void stub94() {}
public void stub95() {}
public void stub96() {}
public void stub97() {}
public void stub98() {}
public void stub99() {}
public void stub100() {}
}
......@@ -64,10 +64,15 @@ public class HookWrapper {
if (hookMethodBackup == null)
continue;
for (HookEntity hookEntity:hookEntityMap.values()) {
if (TextUtils.equals(hookEntity.target.getName(), hookMethodBackup.value()) && hookEntity.backup != null && samePars(classLoader, field, hookEntity.pars)) {
if (TextUtils.equals(hookEntity.target.getName(), hookMethodBackup.value()) && samePars(classLoader, field, hookEntity.pars)) {
field.setAccessible(true);
if (hookEntity.backup == null)
hookEntity.backup = BackupMethodStubs.getStubMethod();
if (hookEntity.backup == null)
continue;
try {
field.set(null, hookEntity.backup);
hookEntity.hookIsStub = true;
} catch (IllegalAccessException e) {
e.printStackTrace();
}
......@@ -105,6 +110,7 @@ public class HookWrapper {
entity = new HookEntity(foundMethod);
hookEntityMap.put(foundMethod, entity);
}
entity.pars = pars;
entity.hook = method;
} else if (hookMethodBackupAnno != null) {
methodName = hookMethodBackupAnno.value();
......@@ -271,6 +277,8 @@ public class HookWrapper {
public Method hook;
public Method backup;
public boolean hookIsStub = false;
public Class[] pars;
public HookEntity(Member target) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment