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

依赖ARM64偏移的Frida脚本在安卓模拟器运行失败的解决方法

解决依赖ARM64函数偏移的Frida脚本在安卓模拟器运行问题的方案

1. 适配x86_64架构的函数偏移

  • 针对x86_64版本的Flutter应用(或对应架构的libflutter.so)重新逆向,提取该架构下目标函数的偏移值,在脚本中通过判断当前设备架构切换使用对应偏移:
    const targetOffset = Process.arch === 'arm64' ? 0x123456 : 0xABCDEF;
    const targetFunc = Module.findBaseAddress('libflutter.so').add(targetOffset);
    
  • 注意:Flutter的libflutter.so在不同架构下的符号布局差异极大,必须单独逆向x86_64版本,无法通过ARM64偏移直接换算。

2. 启用模拟器的ARM64翻译兼容(限支持的模拟器)

  • 对Android Studio自带模拟器,创建AVD时选择支持ARM64的系统镜像,在模拟器设置中开启"Enable ARM64 Translation"选项。
  • 启动后通过adb shell getprop ro.product.cpu.abi确认返回arm64-v8a,此时应用以ARM64模式运行,原脚本的偏移可直接复用。
  • 若出现兼容性问题,尝试更换不同版本的模拟器系统镜像。

3. 修复Redroid ARM64模拟器的运行环境

  • 确保启动Redroid时指定纯ARM64环境,使用--arch arm64-v8a参数启动实例,避免混合架构模式。
  • 安装与宿主Frida版本完全匹配的ARM64版Frida Server,确认Frida能正常附加到目标进程。
  • 验证应用运行架构:通过adb shell ps -A | grep <包名>查看进程ABI信息,或用readelf -h /data/app/<包名>/lib/arm64/libflutter.so确认库的架构。
  • 若仍有问题,尝试更换Redroid的稳定版本,或检查宿主系统的虚拟化支持(Intel VT-x/AMD-V)是否完全开启。

4. 基于符号或特征码定位函数(替代硬编码偏移)

  • 若应用未完全剥离符号,直接通过符号名定位:
    const targetFunc = Module.findExportByName('libflutter.so', '目标函数名');
    
  • 若符号已被剥离,提取ARM64下目标函数的字节特征,通过特征码扫描定位:
    const pattern = '48 8B C4 48 89 58 08 48 89 70 10 48 89 78 18 55';
    const targetFunc = Instruction.parse(pattern).scanSync().pop();
    

5. 使用QEMU搭建纯ARM64安卓虚拟机

  • 下载ARM64架构的安卓系统镜像(如LineageOS ARM64版本),通过QEMU命令行启动纯ARM64环境。
  • 在虚拟机中安装ARM64版Frida Server和目标Flutter应用,此时运行环境与物理设备完全一致,原脚本可直接复用。

内容的提问来源于stack exchange,提问作者Ahmad Ahmad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 06:29:57