You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 04:55:40