JNI HOOK (GetStringUTFChars, NewStringUTF, jnitrace)
아래 코드들에서 handlePointer.add(0x1234)에서 add 값은 ARM, ARM64 마다 JNI.h를 확인하시고 변경해주셔야합니당.
아래 코드는 ARM64 기준입니당.
아래 코드는 JNI에서 문자열만 확인하려고 만든거고..... 모든 JNI 함수들을 확인하고싶으시면 아래 jnitrae를 사용해보세요.(매우 편함)
https://github.com/chame1eon/jnitrace
jnitrace -l [libName] [패키지명]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | function hook_native_GetStringUTFChars() { var env = Java.vm.getEnv(); var handlePointer = Memory.readPointer(env.handle); console.log("\t[*] env handle: " + handlePointer); var GetStringUTFChars = Memory.readPointer(handlePointer.add(0x548)); console.log("\t[*] GetStringUTFChars addr: " + GetStringUTFChars); Interceptor.attach(GetStringUTFChars, { onEnter: function (args) { var str = ""; var String = Java.use("java.lang.String"); str = Java.cast(args[1], String); console.log("\t\t[*] GetStringUTFChars: " + str); } }); }; function hook_native_NewStringUTF() { var env = Java.vm.getEnv(); var handlePointer = Memory.readPointer(env.handle); console.log("\t[*] env handle: " + handlePointer); var NewStringUTF = Memory.readPointer(handlePointer.add(0x538)); console.log("\t[*] NewStringUTF addr: " + NewStringUTF); Interceptor.attach(NewStringUTF, { onEnter: function (args) { var str = ""; var String = Java.use("java.lang.String"); str = Java.cast(args[1], String); console.log("\t\t[*] NewStringUTF: " + str); } }); }; | cs |