链接:https://pan.baidu.com/s/1vKC1SevvHfeI7f0d2c6IqQ 密码:u1an
java -jar ../apktool_2.2.4.jar d app-debug.apk
com.jwxdxnx06.myJNI.sayHello
jstring __fastcall Java_com_jwxdxnx06_myJNI_sayHello(JNIEnv *env)
{
return (*env)->NewStringUTF(env, "hello 52pojie!");
}
function main() {
Java.perform(function () {
var libJniTest_addr = Module.findBaseAddress("libJniTest.so")
console.log("libJniTest 地址:", libJniTest_addr);
if (libJniTest_addr) {
var func_sayHello_addr = Module.findExportByName("libJniTest.so", "Java_com_jwxdxnx06_myJNI_sayHello");
console.log("Java_com_jwxdxnx06_myJNI_sayHello 地址:", func_sayHello_addr);
// 主动调用
//创建新函数,参数1:函数地址,参数2:返回值类型,参数3:函数参数类型
var func = new NativeFunction(func_sayHello_addr, 'pointer', ['pointer'])
// 通过Java.vm获得env
var retVal = func(Java.vm.getEnv())
var ret = Java.vm.getEnv().getStringUtfChars(retVal, null).readCString();
console.log(ret)
}
})
}
setTimeout(main)
function main() {
Java.perform(function () {
var libJniTest_addr = Module.findBaseAddress("libJniTest.so")
console.log("libJniTest 地址:", libJniTest_addr);
if (libJniTest_addr) {
var func_sayHello_addr = Module.findExportByName("libJniTest.so", "Java_com_jwxdxnx06_myJNI_sayHello");
console.log("Java_com_jwxdxnx06_myJNI_sayHello 地址:", func_sayHello_addr);
//hook
Interceptor.attach(func_sayHello_addr, {
onEnter: function(args) {
var env = args[0];
console.log("=== env: " + env)
},
onLeave: function(retVal) {
console.log("=== retVal: " + retVal)
var j_str = Java.vm.getEnv().newStringUtf("helloworld123")
retVal.replace(ptr(j_str))
}
})
// 主动调用
//创建新函数,参数1:函数地址,参数2:返回值类型,参数3:函数参数类型
var func = new NativeFunction(func_sayHello_addr, 'pointer', ['pointer'])
var retVal = func(Java.vm.getEnv())
var ret = Java.vm.getEnv().getStringUtfChars(retVal, null).readCString();
console.log(ret)
}
})
}
setTimeout(main)
frida -UF com.jwxdxnx06 -l lesson04.js --no-pause
libJniTest 地址: 0xc73c3000
Java_com_jwxdxnx06_myJNI_sayHello 地址: 0xc73c3c5d
=== env: 0xdc411c40
=== retVal: 0x9
helloworld123