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

Android 12下如何用Frida动态dump dex?求可行工具或代码

Android 12 下 Frida 动态 Dump Dex 解决方案

一、更新适配工具版本

  • 优先把frida-dexdump更到最新版,新版已经针对Android 12的art模块改动做了适配,执行命令:pip install --upgrade frida-dexdump
  • 运行时指定目标进程,比如:frida-dexdump -U -n com.example.target,如果是加固应用,要确保Frida已经正确attach到进程再执行。

二、调整Hook函数适配Android 12

Android 12的libart.so中DefineClass函数签名发生了变化,旧版本的签名不再适用,需要替换为对应版本的函数:

  • Android 12(API 31)对应的Hook函数签名为:_ZN3art11ClassLinker11DefineClassEPNS_6ThreadEPKcmNS_6HandleINS_6mirror11ClassLoaderEEERKNS_7DexFileERKNS_6mirror8ClassDefE
  • 核心逻辑是从DexFile对象中读取dex的起始地址和大小,再将数据写入文件完成dump。

三、自定义Frida脚本示例

以下是适配Android 12的可直接运行的Frida脚本:

Java.perform(function() {
    var libart = Process.findModuleByName("libart.so");
    var defineClass = libart.findSymbol("_ZN3art11ClassLinker11DefineClassEPNS_6ThreadEPKcmNS_6HandleINS_6mirror11ClassLoaderEEERKNS_7DexFileERKNS_6mirror8ClassDefE");

    Interceptor.attach(defineClass, {
        onEnter: function(args) {
            var dexFile = args[5];
            var dexAddr = dexFile.add(Process.pointerSize).readPointer();
            var dexSize = dexFile.add(Process.pointerSize * 2).readUInt();
            
            var dexBytes = dexAddr.readByteArray(dexSize);
            var fileName = "/sdcard/dump_" + dexSize + ".dex";
            var file = new File(fileName, "wb");
            file.write(dexBytes);
            file.close();
            console.log("Dumped dex to: " + fileName);
        }
    });
});
  • 使用方式:将脚本保存为dump_dex_android12.js,执行命令:frida -U -f com.example.target -l dump_dex_android12.js --no-pause

四、注意事项

  • 确保设备已root,且Frida版本与手机架构(arm64/x86)匹配
  • 针对加固应用,需等待加固壳加载完成后再执行dump操作,可通过延迟Hook或等待特定类加载完成来触发
  • 部分应用会检测Frida,可通过修改frida-server文件名、使用objection的隐藏技巧等方式规避检测

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 07:08:12