Update jni hooks

This commit is contained in:
topjohnwu 2021-10-14 02:43:56 -07:00
parent b0198dab6c
commit e8ae103d5f
3 changed files with 5 additions and 8 deletions

View File

@ -255,16 +255,14 @@ def gen_jni_hook():
decl += ind(1) + 'auto &class_map = (*jni_method_map)[className];' decl += ind(1) + 'auto &class_map = (*jni_method_map)[className];'
decl += ind(1) + 'for (int i = 0; i < numMethods; ++i) {' decl += ind(1) + 'for (int i = 0; i < numMethods; ++i) {'
decl += ind(2) + 'class_map[methods[i].name][methods[i].signature] = methods[i].fnPtr;'
decl += ind(2) + 'if (hook_cnt == 0) continue;'
for index, methods in enumerate(hook_map.values()): for index, methods in enumerate(hook_map.values()):
decl += ind(2) + f'if (clz_id == {index}) {{' decl += ind(2) + f'if (hook_cnt && clz_id == {index}) {{'
for m in methods: for m in methods:
decl += ind(3) + f'HOOK_JNI({m})' decl += ind(3) + f'HOOK_JNI({m})'
decl += ind(3) + 'continue;'
decl += ind(2) + '}' decl += ind(2) + '}'
decl += ind(2) + 'class_map[methods[i].name][methods[i].signature] = methods[i].fnPtr;'
decl += ind(1) + '}' decl += ind(1) + '}'
decl += ind(1) + 'return newMethods;' decl += ind(1) + 'return newMethods;'

View File

@ -88,6 +88,7 @@ if (methods[i].name == #method##sv) { \
break; \ break; \
} \ } \
} \ } \
ZLOGE("unknown signature of %s#" #method ": %s\n", className, methods[i].signature); \
continue; \ continue; \
} }

View File

@ -303,14 +303,12 @@ unique_ptr<JNINativeMethod[]> hookAndSaveJNIMethods(const char *className, const
} }
auto &class_map = (*jni_method_map)[className]; auto &class_map = (*jni_method_map)[className];
for (int i = 0; i < numMethods; ++i) { for (int i = 0; i < numMethods; ++i) {
class_map[methods[i].name][methods[i].signature] = methods[i].fnPtr; if (hook_cnt && clz_id == 0) {
if (hook_cnt == 0) continue;
if (clz_id == 0) {
HOOK_JNI(nativeForkAndSpecialize) HOOK_JNI(nativeForkAndSpecialize)
HOOK_JNI(nativeSpecializeAppProcess) HOOK_JNI(nativeSpecializeAppProcess)
HOOK_JNI(nativeForkSystemServer) HOOK_JNI(nativeForkSystemServer)
continue;
} }
class_map[methods[i].name][methods[i].signature] = methods[i].fnPtr;
} }
return newMethods; return newMethods;
} }