对于 Android 逆向小白而言,借助 AI 辅助工具完成加固 APK 的 Native 层分析已经具备落地可行性。本次以 Garlic 1.8 未发布版本作为核心静态分析工具,搭配 DeepSeek‑v4‑pro 大模型,在 Mac Mini M4 环境完成多组加固样本测试,全程不依赖复杂人工逆向功底,绝大多数 Dex 抽取、解密工作交由 AI 完成,使用者仅需做决策指令输入,即可完成腾讯乐固、爱加密、某 60 壳等多款商业加固样本的解析,同时也暴露出工具在 VMP、J2C 保护场景下的能力边界。本文完整还原整套测试流程、样本现象、工具输出产物,同时梳理不同加固壳对应的处理路径,给想要尝试 AI 辅助逆向的开发者提供可复用参考。
一、Android 逆向小白使用 AI 辅助分析的真实痛点
很多入门逆向人员在面对商业加固 APK 时,会遇到几类非常现实的阻碍。
第一,Native 层壳门槛高,大量解密逻辑存放于 SO 库,普通静态反编译工具只能拿到壳桩代码,真实业务 Dex 被加密藏匿,手动还原 ELF、定位解密函数、处理 VMP 字节码需要大量底层积累,小白很难独立完成。
第二,整套流程工具链割裂,Dex 导出、CFG 控制流提取、交叉引用、字符串提取、调用图构建需要切换 Jadx、Ghidra、Unicorn、Frida 多款工具,频繁切换会打断分析思路。
第三,部分加固样本存在多层嵌套保护,容器加密、压缩混淆、VMP 虚拟机保护叠加,很难快速判断该样本是要提取 Dex,还是需要抓包分析签名逻辑,容易做大量无效工作。
第四,AI 辅助逆向的实操案例较少,大多只讲概念,缺少完整样本输出目录、关键函数地址、真实的指令交互模式,网上公开资料大多是成熟逆向工程师的操作,不适合零基础人员复现。
本次测试就是针对以上痛点,验证小白仅输入简单指令:好的、继续、选择 A、A 和 B 同时、先 A 后 B,配合 AI 的 loop 循环模式,是否可以驱动 Garlic 完成整套加固样本分析,同时记录不同壳的终点判定标准,规避无效分析。
二、测试环境、样本与整套执行步骤
2.1 基础测试环境
- 硬件:Mac Mini M4
- Garlic 版本:1.8(未发布版本),
garlic -n高级能力需要 license 授权 - AI 模型:DeepSeek‑v4‑pro,客户端使用 cc switch
- 静态分析:Garlic 内置 Rosemary 引擎,禁止 objdump、capstone 干预控制流解析
- 动态组件:Unicorn 做模拟执行,Frida 用于动态捕获数据;不使用真机,仅使用模拟器
- 测试样本:覆盖某 60 加固、爱加密、腾讯乐固、J2C 保护样本、VMP 虚拟机壳,一共 5 类典型加固 APK。
2.2 测试验收判定标准(落地可执行)
针对每一份待分析 APK,设置明确终止条件,避免无意义持续分析:
- 如果样本存在隐藏 Dex,成功解密导出真实 Dex,分析结束;
- 如果样本不存在隐藏 Dex,成功拿到 HTTP 签名相关关键参数,分析结束;
- 如果样本带有 VMP 保护,解析还原出 VM 指令集,分析结束;
- 全部样本完成 Dex 反编译、APK 全局调用图、字符串引用图,数据存入 duckdb 数据库,可供 AI 查询调用。
2.3 完整可执行操作步骤
- 将目标 APK 输入 Garlic 的 mcp‑server 服务,工具自动启动解析流程,Rosemary 引擎输出 SO 的 CFG 控制流、反汇编代码、导入导出表、函数交叉引用、pc‑xref、字符串清单。
- AI 读取数据库内的调用图、字符串、ELF 解析结果,输出加载流程、关键函数地址、样本加固类型判断。
- 操作者只输入极简指令,不需要手写逆向脚本;长时间无人值守时开启 loop 模式自动迭代。
- 根据 AI 输出结论,分支处理样本:
- 存在隐藏 Dex:定位 native 解密入口 interface5、interface8 等函数,配合 Unicorn 模拟或者离线脚本完成 Dex 还原;
- J2C 代码保护:静态无法解析,切换 Frida 动态抓包、模拟接口;
- VMP 样本:梳理 VM opcode、PRNG 伪随机链、函数分发表,输出虚拟机指令集;
- 全部产物输出到本地目录,包含 duckdb 数据库、调用图表 csv、反编译源码、native 库解析文件、HTML 与 Markdown 格式报告。
- 对比不同加固样本的 token 消耗、整体分析耗时,记录工具能力边界。
2.4 样本加固类型处理对比表
表格
| 样本标识 | 加固特征 | 核心难点 | 最终分析终点 | 核心产物 |
|---|---|---|---|---|
| com.fhyx.gamesstore.apk | libjiagu.so,腾讯乐固 | Dex 尾部追加 23MB 加密 payload,运行期生成临时解密 SO | 解密得到真实业务 Dex | 重建 ELF、内存加载 Dex 文件、CFG 报告 |
| com.yiyou.ga | libvlplg.so,VMP 壳 | INIT 段解密,自定义 15‑opcode 栈虚拟机,37 个加密 chunk | 解析完整 VM 指令集 | VM 字节码分析脚本、stub‑dex 文件 |
| com.hexin.plat.android.ZheshangSecurity | ijiami.dat 爱加密 | 三层加密:XOR 容器 + DEFLATE 压缩 + 字节替换加密 | 离线 Python 脚本还原 9 份真实 Dex | dex_decrypt.py 脚本,全套解密 Dex |
| com.sf.activity | libxloader.so 某 60 壳 | 多层壳嵌套,恶意盗版样本,硬编码恶意域名 | 提取内存加载 Dex,完成完整性校验逻辑梳理 | 壳桩 Java 源码、native 加载器解析报告 |
| com.ifeng.newvideo | libshell‑super.so 乐固 | NRV2D 自定义压缩,assets 加密载荷文件 | Unicorn 模拟解压拿到完整 classes 系列 dex | legu_unpack.py 解压脚本,校验通过 Dex 文件 |
实操细节 1:本次测试有一个容易踩坑点,非官网下载的二次打包 APK,会出现两层加固叠加,不要直接当作官方原版样本处理,优先判断样本来源,避免浪费大量时间分析盗版壳。
实操细节 2:爱加密样本中
com.ijm.dataencryption.DETool只是桩类,真正解密逻辑运行时由 native 层替换,Java 层看不到真实 dowork 实现,不要反复在 dex 桩代码里寻找解密密钥。实操细节 3:部分加固会把 native 方法注册信息藏在加密 SO 内部,明文 so 中找不到 interface5、interface8 字符串,不能直接字符串搜索定位 native 接口,需要依靠 CFG 交叉引用定位。
三、典型加固样本加载流程与技术细节拆解
3.1 腾讯乐固样本:classes.dex 尾部挂载加密 Payload
样本入口为StubApp.attachBaseContext(),首先加载 DTC 引擎库libjgdtc.so,调用 native 层interface5完成壳初始化,反射加载真实 Application,调用interface8执行 Dex 解密,后续加载libjiagu.so释放到.jiagu私有目录。
真实解密逻辑不在明文 libjiagu.so,而是运行时动态解密生成的第二阶段 SO。classes.dex 偏移 18156 位置开始存在 23MB 加密载荷。assets 目录下goodgoodstudy.zip属于诱饵文件,真正加密载荷标记为.jgapp16 字节标识。
该样本不需要 VMP 分析,定位解密入口之后,就可以拿到真实业务 Dex,完成分析闭环。
3.2 VMP 虚拟机样本:libvlplg.so 自定义栈虚拟机
System.load(libvlplg.so)触发链接器 INIT 段执行,INIT [0] 完成代码数据解密,INIT [1] 初始化 VMP 虚拟机,JNI_OnLoad 注册全部 native 方法。
MyJni.loadnative 入口读取 37 个加密 chunk,每个 chunk 解密头部 284 字节生成 stub‑dex,通过InMemoryDexClassLoader完成加载。应用运行时,自定义 ClassLoader 拦截 findClass 调用,VMP 虚拟机解密对应 chunk 返回类数据。
虚拟机核心是 15‑opcode 类型栈机,拥有独立 PRNG 伪随机链,包含 mod_mul、mod_add、mod_sub 运算,依靠函数表动态分发处理逻辑。测试中产出analyze_vm.py脚本用于解析 VM 字节码,frida_readbuf.js捕获运行时 stub dex 内存数据。
3.3 爱加密样本 ijiami.dat 三层加密体系
assets 目录ijiami.dat17MB 加密 ZIP 文件,外层使用 XOR 隐藏 PK 魔术头,第一层解密得到标准 ZIP 压缩包;第二层取出内部 classes.dex 条目做 raw DEFLATE 解压;第三层对 57MB 的 ifd 载荷执行字节替换、K0 头部 XOR、map_list 特殊位置 XOR 处理,最终还原 9 份真实 DEX。
整套流程完全可以离线完成,不需要设备运行、不需要 Frida,仅依靠 Python 脚本就可以完成全部解密。native 侧 256bit 密钥派生逻辑在此场景没有作用,硬编码 K0 加上数据字节替换规则即可绕过。
3.4 某 60 加固盗版样本
样本存在明显盗版特征,壳结构为ShellApplication.attachBaseContext作为入口,初始化缓存目录,提取 assets 加密载荷,加载 libxloader.so 做 native 解密,通过makeInMemoryDexElements注入内存 ClassLoader,钩子 Instrumentation 拉起真实 Application。
样本存在完整的安全防护:APK 源文件 CRC 完整性校验、基于 /proc/self/exe 的反调试反模拟器、类名字符串 + 3 偏移混淆,大量使用反射隐藏调用逻辑。源码中硬编码 base64 字符串解码得到恶意域名,可作为盗版二次打包证据链。
3.5 NRV2D 压缩乐固样本(凤凰网 APK)
加固流程把原始 classes、classes2、classes3 经过 NRV2D 压缩,打包进入 assets 下0OO00l111l1l文件,替换 Application 为壳桩入口。
文件头部 u4 字段记录 dex 数量,每一个 packed_dex 包含未知随机字段、解压后大小、压缩大小、标记位以及 NRV2D 压缩数据流。处理流程:提取加密 assets 文件,解析头部结构,Unicorn 模拟 SO 内部 NRV2D 解压函数,跳过 16 字节头部,依据 dex 头 file_size 截断,adler32 校验完整性,脚本legu_unpack.py直接输出完整 dex 文件。
四、Garlic 输出产物目录结构解读
测试结束后完整输出 13 个目录,合计 311 个文件,产物覆盖数据库、调用图、反编译源码、native 库解析结果、分析报告。
plaintext
.
├── analysis.duckdb # 核心数据库,存储CFG、交叉引用、字符串,AI查询数据源
├── cg # 调用图相关csv文件
│ ├── call_graph_edge.csv
│ ├── call_graph_node.csv
│ ├── string_edge.csv
│ └── string_node.csv
├── decompiled # Java层桩代码、反编译输出
│ ├── AndroidManifest.xml
│ └── com
│ ├── example
│ ├── ifeng
│ └── wrapper
├── native_libs # arm64‑v8a架构so全套解析产物
│ └── arm64‑v8a
│ ├── libapp.so
│ ├── libapp.so.cfg_edges # CFG控制流边
│ ├── libapp.so.cfg_nodes # CFG控制流节点
│ ├── libapp.so.dissembly # 反汇编文本
│ ├── libapp.so.imports # 导入表
│ ├── libapp.so.exports # 导出表
│ ├── libapp.so.func_xref # 函数交叉引用
│ ├── libapp.so.pc_xrefs # 指令地址交叉引用
│ ├── libapp.so.strings # 字符串提取
│ └── …其余数十个so解析产物
└── report
├── report.html # 可视化网页报告
└── report.md # Markdown分析报告
这份目录是整套 AI 逆向的输入源,AI 不需要直接读取原始 APK,读取 duckdb 数据库与 csv 调用图,就可以完成样本加固类型判断、定位关键解密函数。
五、测试总结与落地建议
从本次小白视角的完整测试可以得出结论:AI 辅助 Android Native 逆向确实可以大幅降低入门门槛,使用者不需要精通 ARM 汇编、各类加固私有算法,依靠工具输出的 CFG、交叉引用、字符串数据,配合大模型推理,能够处理市面上主流商业壳。
但同时也要认清能力边界:面对 J2C 保护场景,纯静态分析完全失效,必须切换动态抓包模拟;VMP 虚拟机样本需要投入更多 token 完成指令集解析,耗时显著高于普通壳样本;多层嵌套盗版样本,会提升误判概率,需要优先甄别样本来源。
工具层面,Garlic 1.8 版本依靠 Rosemary 引擎完成静态信息提取,把全部结构化数据存入数据库,给 AI 提供高质量上下文,是这套方案成立的关键;garlic -n高级能力需要 license 授权。如果想要复现本次完整逆向过程,可以前往项目仓库查阅更多信息。
不同业务场景的验收标准不同。建议先定义成功指标,再选用工具,避免千篇一律的「试用—转化」收尾。
常见问题 FAQ
什么是解决方案?
「解决方案」可概括为:对于 Android 逆向小白而言,借助 AI 辅助工具完成加固 APK 的 Native 层分析已经具备落地可行性。本次以 Garlic 1.8 未发布版本作为核心静态分析工具,搭配 DeepSeek‑v4‑pro 大模型,在 Mac Mini M4 环境完成多组加固样本测试,全程不依赖复杂人工逆向功底,绝大多数 Dex 抽取、解密工作交由 AI 完成,使用者仅需做决策指令输入,即可完成腾讯乐固、爱加密、某 60 壳等多款商业加固样本的解析,同时也暴露出工具在 VMP、J2C 保护场景下的能力边界。本文完整还原整套测试流程、样本…
为什么要关注解决方案?
关注解决方案,是因为它直接影响效率、风险与可复制性。文中指出:很多入门逆向人员在面对商业加固 APK 时,会遇到几类非常现实的阻碍。
如何落地解决方案?有哪些关键步骤?
建议按以下路径推进解决方案:1) 硬件:Mac Mini M4;2) Garlic 版本:1.8(未发布版本),garlic -n高级能力需要 license 授权;3) AI 模型:DeepSeek‑v4‑pro,客户端使用 cc switch;4) 静态分析:Garlic 内置 Rosemary 引擎,禁止 objdump、capstone 干预控制流解析;5) 动态组件:Unicorn 做模拟执行,Frida 用于动态捕获数据;不使用真机,仅使用模拟器。细节见正文对应章节。
解决方案适合哪些人或团队?
解决方案更适合:产品/技术负责人、运营与增长团队、需要落地智能体或自动化的中小团队、关注「解决方案」方向的读者。若你只需要单次聊天式问答,可先读概念;若要上生产,请重点看步骤、权限与风控相关段落。
关于「一、Android 逆向小白使用 AI 辅助分析的真实痛点」,本文给出了什么结论?
在「一、Android 逆向小白使用 AI 辅助分析的真实痛点」部分,要点是:B,配合 AI 的 loop 循环模式,是否可以驱动 Garlic 完成整套加固样本分析,同时记录不同壳的终点判定标准,规避无效分析。 二、测试环境、样本与整套执行步骤 2.1 基础测试环境 硬件:Mac Mini M4 Garlic 版本:1.8(未发布版本),garlic -n高级能力需要 license 授权 AI 模型:DeepSeek‑v4‑pro,客户端使用 cc switch 静态分析:Garlic 内置 Rosemar
关于「二、测试环境、样本与整套执行步骤」,本文给出了什么结论?
在「二、测试环境、样本与整套执行步骤」部分,要点是:ATE 压缩 + 字节替换加密离线 Python 脚本还原 9 份真实 Dexdex_decrypt.py 脚本,全套解密 Dexcom.sf.activitylibxloader.so 某 60 壳多层壳嵌套,恶意盗版样本,硬编码恶意域名提取内存加载 Dex,完成完整性校验逻辑梳理壳桩 Java 源码、native 加载器解析报告com.ifeng.newvideolibshell‑super.so 乐固NRV2D 自定义压缩,ass