Droid ASC:用R8布局加速APK按需反编译
给移动研究人员按需分析大型Android APK的反编译前端,不先膨胀和建立全局索引。
GitHub MG1937/ASC 更新 2026-09-16 分支 main 星标 1.2K 分叉 196
Python C Android APK R8 DEX 移动逆向

🧭 决策指南

适合,如果你

  • 你要分析包含多个DEX的大型Android APK,并需要跨DEX查找method或field引用。
    README 的CLI说明写明findrefs可在“all DEX entries in APK”中查找string、type、method和field。
  • 你关注352MB APK的低内存按需反编译表现。
    README 的Benchmark章节称,352MB商业APK的全局交叉引用搜索为1.79秒,目标类反编译为177毫秒,内存为141MB。
  • 你需要从APK直接提取单个类、Manifest或代码引用。
    README 的Install章节提供getclass、getmanifest和findrefs三个子命令。

不适合,如果你

  • 你需要已经发布的稳定版本或明确的release历史。
    项目元数据显示版本发布为0个,最新版本为“No releases”。
  • 你要依据多个APK、多个Android版本或不同压缩场景选择工具。
    README只展示一个352MB商业APK的Benchmark,没有提供更广泛的测试矩阵。
  • 你依赖完整的预构建全局索引或持久化交叉引用数据库。
    README正文明确选择“zero preprocessing”,并将compiled artifact作为只读数据库按需查询。

前置条件

  • 从PyPI安装:pip install droidasc
  • 或从源码安装:pip install .
  • 安装后提供全局droidasc CLI命令。
  • README还说明可以使用python main.py,它会委托给同一入口。

第一步命令(README 原文)

pip install droidasc

要注意

  • getclass的类名示例同时使用Lcom/poc/Main;和com.poc.Main格式。
    README的CLI示例分别给出droidasc getclass app.apk Lcom/poc/Main;和droidasc getclass app.apk com.poc.Main。
  • 大型APK的性能不要脱离352MB Benchmark外推。
    README只给出352MB商业APK上的1.79秒、177毫秒和141MB数字。
  • findrefs的模糊类名需要显式使用--fuzzy-class。
    README示例中的method notify查询使用了--class MainActivity --fuzzy-class。

替代方案

  • 标准Android反编译器:需要README所批评的全量inflate、全局索引和交叉引用预处理流程时,标准工具的工作方式更匹配。
    README正文

材料未说明

  • README没有说明支持的Python版本、操作系统和C组件编译要求。
  • README没有说明droidasc依赖的具体反编译后端及其版本。
  • README没有说明APK加固、异常DEX或压缩格式的兼容范围。
  • README没有提供352MB之外的性能数据,也没有说明141MB内存是否包含全部进程开销。
  • README没有说明getclass输出的Java代码保真度、失败处理方式和错误码。
  • README没有说明GUI模式的功能范围;仅展示了droidasc app.apk --gui命令。

💡 深度解析

6
不适合 我需要分析一个非 R8 构建的 APK,并确认动态加载代码的运行时行为;现有流程依赖完整解包、全局交叉引用和传统反编译器,ASC 是否能完全替代它?
适合读者: 维护传统全量反编译流程的移动安全团队成员,当前需要分析非 R8 构建或动态加载逻辑

不适合完全替代,因为 ASC 的优势集中在按需静态定位和局部反编译,而你的两个关键约束超出了 README 的明确覆盖范围。

  • README 的检索加速依赖 R8 的常量重定位、指令去重和集中式布局;它没有承诺非 R8 构建仍具备同等效果。
  • 项目公开功能是 getclassgetmanifestfindrefs,不是动态调试、运行时行为追踪或完整资源分析平台。
  • 项目洞察明确指出动态加载代码和运行时生成代码可能无法由静态引用搜索覆盖。

ASC 可以作为快速前置筛选器,但不能据此移除传统全量工具或运行时分析路径。

  • README:R8 compiler optimization as a DeCompiler Primitive;R8 的 deterministic constant relocation 和 instruction deduplication。
  • README Usage:公开子命令仅为 getclass、getmanifest、findrefs。
  • 项目洞察 usage_limitations:静态引用搜索不能等同于完整的运行时行为分析。
材料未说明:README 没有说明非 R8 APK 的兼容边界或失败模式。;README 没有提供动态加载、运行时生成代码和资源分析功能。
适合 我正在分析一个 352MB 商业 APK,主要关心字符串、类型、方法和字段引用,不想先完整解压并建立全局索引;ASC 是否适合替代传统反编译器的第一轮定位?
适合读者: 在分析 352MB 商业 APK、需要跨多个 DEX 快速定位代码引用的 Android 逆向工程师

适合,因为它直接把 APK 当作只读数据库查询,而不是先完成全量预处理。

  • findrefs 能跨全部 DEX 搜索 string、type、method 和 field,并支持类名过滤、模糊匹配及输出文件。
  • README 给出的 352MB 商业 APK 基准中,跨引用搜索耗时 1.79 秒,内存使用 141MB。
  • 命中后才提取目标字节码及依赖,在内存中重建最小 DEX,适合先定位再局部反编译。

但它仍是前端定位工具;动态加载、运行时生成代码和完整行为分析不在 README 的承诺范围内。

  • README:findrefs — Find code references for string/type/method/field across all DEX entries in APK.
  • README Benchmark:352MB commercial APK;global cross reference searches in 1.79 seconds;141MB of RAM.
  • README:extracts only the specific bytecodes and its dependencies, dynamically reconstructing a minimal and self consistent DEX.
pip install droidasc
材料未说明:README 没有说明动态加载代码、运行时生成代码或 native 代码的覆盖程度。;README 没有提供不同压缩方式、存储介质和 CPU 下的性能范围。
适合 我刚开始做 Android APK 静态分析,习惯写 `com.poc.Main` 这类 Java 包名,需要先查看 Manifest,再定位类并搜索 `onCreate` 方法;ASC 是否适合我的 CLI 工作流?
适合读者: 需要确认 AndroidManifest.xml、目标类和引用关系的 Android 逆向初学者,使用 Java 包名而不是 DEX 类名

适合,因为 README 的三个命令正好覆盖这条从 APK 元数据到局部代码的工作流。

  • getmanifest 可以把 AndroidManifest.xml 解码并输出为 XML。
  • getclass 同时接受 Lcom/poc/Main;com.poc.Main 两种类名表示,并可直接输出 Java 文件。
  • findrefs 能按 method 搜索 onCreate,还可通过 --class 限定类;README 也明确提醒引用类型不是普通文本搜索。

需要注意内部类、混淆名和类名格式的一致性。ASC 的 README 没有说明如何解释所有反编译异常或缺失依赖,因此它适合作为入门定位工具,不等于完整源码恢复工具。

  • README Usage:getmanifest — Decode AndroidManifest.xml from APK and print it as XML.
  • README 示例:`droidasc getclass app.apk Lcom/poc/Main; -o Main.java` 与 `droidasc getclass app.apk com.poc.Main --threads 16`。
  • README 示例:`droidasc findrefs app.apk method onCreate --class com.poc.Main`。
droidasc getmanifest app.apk -o AndroidManifest.xml
材料未说明:README 没有说明遇到损坏 Manifest、缺失依赖或反编译失败时的具体错误信息。;README 没有说明混淆类名能否恢复为原始 Java 名称。
适合 我用 Python 开发 Agent,希望把 APK 的类定位、Manifest 解码和引用搜索封装成工具调用;ASC 的 `droidasc` CLI 是否比集成完整反编译器更合适?
适合读者: 需要把 Android APK 分析能力接入 Agent 的 Python 工具开发者,计划通过命令行自动调用并解析结果

适合,尤其适合作为边界清晰的命令行前端,但结果编排和错误处理仍需由 Agent 自己完成。

  • README 明确提供 getclassgetmanifestfindrefs 三个子命令,分别覆盖局部反编译、Manifest XML 输出和四类引用搜索。
  • CLI 支持输出文件,例如 Java、XML 和引用结果,便于工具调用后保存原始产物。
  • 项目描述直接定位为 “designed for Agents/Mobile Researchers”,并且 python main.py 与 CLI 使用同一入口。

它没有在 README 中定义 JSON 输出协议、超时、错误码或重试语义,因此不能直接假设具备成熟的 Agent 工具适配层。

  • 项目描述:ASC is a super FAST Android decompiler front-end designed for Agents/Mobile Researchers.
  • README Usage:`{getclass,getmanifest,findrefs}` 三个子命令及其功能说明。
  • README:You can also use `python main.py` as before — it delegates to the same entry point.
pip install droidasc
材料未说明:README 没有说明 CLI 的标准错误格式、退出码和机器可读输出协议。;README 没有说明并发调用、进程隔离和超时取消是否安全。
视情况 我负责把这个 Python/C 工具接入企业分析环境,需要固定版本、可重复升级,并确认 Apache License 2.0 是否等于可以任意分析第三方商业 APK;ASC 是否已经足够成熟?
适合读者: 需要在企业环境中固定版本和管理升级的 Python/C 开源工具维护者,关注项目发布成熟度与许可证边界

视情况,技术入口很容易部署,但企业级版本治理和第三方 APK 的授权边界仍不能仅凭当前项目资料确认。

  • 项目主要使用 Python,另有 C;README 提供 PyPI 安装 pip install droidasc 和源码安装方式。
  • 项目数据标示 Apache License 2.0,但没有正式 Release,release_count 为 0;这会增加版本固定、变更审计和升级流程的自建工作量。
  • 许可证只描述项目代码授权,不能自动授权分析任何商业 APK;项目洞察也要求确认目标应用的授权、隐私和法律要求。

因此它适合纳入内部工具链的原型或受控环境,但是否达到企业生产标准取决于你们自己的打包、验证和合规流程。

  • README Install:`pip install droidasc`;or from source `pip install .`。
  • 项目数据:main_language 为 Python;language_distribution 包含 Python 与 C。
  • 项目数据:license 为 Apache License 2.0;latest_release 为空;release_count 为 0。
  • 项目洞察 usage_limitations:商业 APK 分析仍需遵守授权、隐私和法律要求。
pip install droidasc
材料未说明:README 和项目数据没有提供版本号、依赖锁定文件或正式发布渠道。;README 没有说明企业环境中的兼容性策略、安全修复周期和 API 稳定性。
视情况 我只有接近 README 基准中的 141MB 内存预算,目标 APK 含多个 DEX 且主要由 R8 构建;我是否应优先用 ASC 做类和引用定位?
适合读者: 在内存资源有限环境中分析大型 APK、同时面对 R8 优化和多 DEX 结构的移动安全研究人员

视情况,若 APK 保留 README 所利用的 R8 布局特征,ASC 很有吸引力;但 141MB 不是普遍保证。

  • ASC 利用 R8 的常量重定位和指令去重形成的集中式物理布局执行跨 DEX 搜索。
  • 它通过直接探测 Deflate 比特流、O(1) 指令定位和按需重建最小 DEX,减少完整解压及大型索引的开销。
  • README 基准显示 352MB APK 使用 141MB RAM,但该数字只对应特定样本和查询。

如果样本并非 R8 产物、结构异常或混淆方式不同,README 没有说明性能或兼容性会如何变化;这时不能仅凭内存预算作部署承诺。

  • README:R8 compiler optimization;deterministic constant relocation and instruction deduplication。
  • README:probing directly within the Deflate bitstream;O(1) instruction locating primitive。
  • README Benchmark:352MB commercial APK 使用 141MB RAM。
droidasc findrefs app.apk type com.poc.Main
材料未说明:README 没有给出非 R8、强混淆或异常 APK 的成功率和内存上界。;README 没有说明多 DEX 数量、单个 DEX 大小对内存的具体影响。

✨ 核心亮点

  • 352MB APK交叉引用仅需1.79秒
  • 141MB RAM完成目标类反编译
  • R8布局支持O(1)指令定位
  • findrefs覆盖字符串、类型、方法和字段

🔧 工程化

  • getclass按需提取DEX并反编译目标类
  • findrefs跨全部DEX检索代码引用
  • getmanifest将AndroidManifest.xml解码为XML

⚠️ 风险

  • 性能证据仅来自352MB商业APK示例
  • 项目暂无release,版本获取依赖PyPI或源码
  • 仅7名贡献者和10条近期提交,维护规模有限

👥 适合谁?

  • 分析大型Android APK的移动研究人员
  • 需要Agents接口或CLI检索DEX引用的开发者