ARM64设备Frida如何强制用ARM指令Hook仅含ARM架构的Native库
问题
- 场景:在ARM64架构设备上使用Frida Hook某APK的Native函数,该APK仅包含ARM架构的
libnative.so,无ARM64版本。 - Hook脚本:
var offset_of_md5_00011f14 = 0x1f14; var dynamic_address_of_md5_00011f14 = Module.findBaseAddress("libnative.so").add(offset_of_md5_00011f14); Interceptor.attach(dynamic_address_of_md5_00011f14, { onEnter: function (args) { console.log("Entered md5_00011f14"); // this.context.x0=0x1; }, onLeave: function (retval) { console.log("Exited md5_00011f14, retval:" + retval); // retval.replace(0x1); } });
- 运行后触发错误日志:
Revision: '0' ABI: 'arm' Timestamp: 2024-01-27 03:41:49+0100 pid: 12213, tid: 12213, name: com.example.app >>> com.example.app <<< uid: 10351 signal 4 (SIGILL), code 1 (ILL_ILLOPC), fault addr 0xc0b41f16 (*pc=0x4c0fea6e) r0 00000000 r1 ffc6fb48 r2 cae65e88 r3 3f12ab92 r4 00000000 r5 efc8e260 r6 f2b263c0 r7 65b46d6d r8 ffc6fb48 r9 ffc6fb6c r10 ffc6fb58 r11 00002469 ip efc8ce00 sp ffc6fb30 lr c0b411d3 pc c0b41f16
- 需求:让ARM64设备上的Frida Server强制使用ARM指令Hook目标函数。
解决方法
1. 错误原因分析
触发SIGILL(非法指令)的核心原因:
- ARM架构的Native库默认使用Thumb指令集(16位指令),直接使用原始偏移
0x1f14时,Frida会按32位ARM指令解析,导致指令非法。 - 脚本中误用了ARM64的寄存器名
x0,ARM架构的寄存器前缀为r(如r0)。
2. 具体修复步骤
步骤一:强制Frida以ARM架构启动进程
启动Frida时添加--arch arm参数,强制Frida用ARM模式加载目标进程,确保指令解析正确:
frida -U --arch arm -f com.example.app -l your_hook_script.js
步骤二:修正Hook脚本的地址计算与寄存器使用
如果目标函数是Thumb模式(IDA反编译时函数名旁有T标记),需将偏移的最低位设为1,告知Frida按Thumb指令处理,同时修正寄存器名:
var offset_of_md5_00011f14 = 0x1f14; // 最低位设为1,标记为Thumb指令集地址 var dynamic_address_of_md5_00011f14 = Module.findBaseAddress("libnative.so").add(offset_of_md5_00011f14 | 1); Interceptor.attach(dynamic_address_of_md5_00011f14, { onEnter: function (args) { console.log("Entered md5_00011f14"); // ARM架构使用r0寄存器,而非x0 // this.context.r0 = 0x1; }, onLeave: function (retval) { console.log("Exited md5_00011f14, retval:" + retval); // retval.replace(0x1); } });
步骤三:验证函数地址正确性
可通过Frida的Module.enumerateExports确认函数实际地址,避免偏移计算错误:
Module.enumerateExports("libnative.so", { onMatch: function(exp) { if (exp.name.includes("md5")) { console.log("Found md5 function: " + exp.name + " at " + exp.address); } }, onComplete: function() {} });
内容的提问来源于stack exchange,提问作者Kaspek
相关产品推荐
相关产品推荐

