在so层去hook这个MD5函数的参数和响应值
按tab键跳转到图表界面,再按u键跳转到汇编代码页面,获取函数的偏移地址。
使用下面hook代码验证所so文件方法是否存在(文件不存在时换种hook方式,比如包名换成进程id)
function hook_method4() {console.log('进入');var so = Process.findModuleByName('libsscronet.so');if (so !== null) {console.log('so_base', so.base);var methods = so.enumerateExports();for (var i = 0; i < methods.length; i++) {console.log(methods[i].name);}} else {console.log('未找到名为 libsscronet.so 的模块');}
}// so_base 0x752e400000打印所有so文件
function hook_native() {var modules = Process.enumerateModules();for (var i in modules) {var module = modules[i];console.log(module.name);if (module.name.indexOf("target.so") > -1) {console.log(module.base);}}
}
hook_method4();
hook_native()
编写hook代码
function hook_fun() {let soBaseAddr = Module.findBaseAddress('libwtf.so');console.log(soBaseAddr)console.log('进入')//之前获取的偏移地址let funcPtr = soBaseAddr.add(0x43834)console.log(funcPtr)Interceptor.attach(funcPtr, {onEnter: function (args) {console.log("进入函数1")//打印第二个参数console.log('onEnter value is ====>', args[1].readCString())},//hook流程onEnter-原函数-onLeaveonLeave: function (retval) {console.log("响应值为"+retval)//修改值为0// retval.replace(0);},})}
hook_fun()
通用hook hook so中NewStringUTF函数
NewStringUTF函数是在so层通过c或者c++代码进行运算后的结果,返回给java层,在c里面是一个char*也就是一个指针返回给java层调用,需要转换一下类型,就需要用到jni函数里的newStringutf
frida版本为frida16.6.8
模拟器:雷神
frida-server版本:frida-server-16.6.6-android-x86_64
hook条件很苛刻,同样frida和代码换到真机就不行
function hook_newstrUTF() {var symbols = Process.getModuleByName("libart.so").enumerateSymbols();var newStringUtf = null;for (var i = 0; i < symbols.length; i++) {const symbol = symbols[i];if (symbol.name.indexOf("checkJNI") == -1 && symbol.name.indexOf("NewStringUTF") != -1) {console.log(symbol.name, symbol.address);newStringUtf = symbol.address;}}Interceptor.attach(newStringUtf, {onEnter: function (args) {console.log('进入')//打印线程信息console.log(Thread.backtrace(this.context, Backtracer.ACCURATE).map(DebugSymbol.fromAddress).join('\n') + '\n');//观察这个参数打印的值console.log("newStringUtf args", args[1].readCString());}, onLeave: function (retval) {console.log("newStringUtf retval", retval);}})
}hook_newstrUTF()