Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
ddc — DEX → Rust 编写的 Java 反编译器 — 快速、渐进式分析、双语 CLI | Kitploit
工具/GitHubGitHub/ejfkdev/ddc
Android安全静态分析代码分析动态代码分析 (DAST)移动应用渗透测试逆向工程移动安全实用工具与框架二进制分析
GitHubejfkdev/ddc

ddc

DEX → Rust 编写的 Java 反编译器 — 快速、渐进式分析、双语 CLI

32554171天前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
查看仓库

ddc — DEX → Java 反编译器(Rust)

English | 简体中文

CI License: MIT

ddc 把 Android DEX 字节码反编译回可读的 Java —— 真实 App 级别的速度、 可以像数据库一样查询,并且经过 javac 验证:七个真实 APK 共 909,689 个输出文件全部零语法错误。

特性

  • 快 —— 226MB/20 dex 的 weibo(9.8 万个类)全量反编译 5.0s, 398MB 的飞书 5.5s;病态类跑在带截止期的受控线程上,不会拖死 整个运行。
  • 能编译 —— 七个基准 APK(reqable/Telegram/WhatsApp/weibo/weixin/ qq/lark,共 91 万文件)的输出全部通过 javac,零语法错误; 大小写仅差一位的类名对(X/Cua vs X/cua)两个类都各自成文件, 不再后者覆盖前者。
  • 渐进式反编译 —— 20+ 查询子命令(字符串、交叉引用、继承谱、 manifest、资源、方法粒度反编译)毫秒级出答案:先查元数据、按需定点 反编译,绝大多数分析不必付全量的代价。
  • DEX 035–041 全版本 —— 多 dex APK、XAPK/APKS/APKM 容器、 invoke-custom;lambda 与字符串拼接折叠回真 Java((a) -> …、 Cls::name、a + b)。
  • 可读输出 —— jadx 式局部变量名(str、getName() → name、 Kotlin Intrinsics 参数名)取代 v12;IntDef 魔法数字开箱即用 按常量名渲染(setVisibility(8) → View.GONE;内置 android-37 域表,--symbols 可覆盖);Kotlin 空检查噪声消除、synthetic access$NNN 桥在调用点内联。
  • 可复现输出 —— 无时间戳,两次运行 diff 干净。
  • 中英双语 CLI —— 按环境变量自动识别语言(DDC_LANG=zh|en 强制 指定,回退英文)。
  • 基于 jdc-core —— 与 jcdc 共用的机器无关反编译核心。

安装

macOS(Homebrew):

brew install ejfkdev/tap/ddc

Windows(Scoop)——先添加 bucket,再按名安装(scoop 不识别 user/repo/app 三段式直装——issue #3):

scoop bucket add ejfkdev https://github.com/ejfkdev/scoop-bucket
scoop install ddc

# 或者不添加 bucket,直接用 manifest URL 安装:
scoop install https://raw.githubusercontent.com/ejfkdev/scoop-bucket/main/bucket/ddc.json

cargo-binstall(全平台——直接下载预编译 release 二进制,不用本地 编译):

cargo binstall ddc-cli

二进制:每个 release 附带 裸二进制(无压缩包),覆盖 linux-amd64、linux-arm64、 windows-amd64、windows-arm64、macos-amd64、macos-arm64——非 macOS 平台已 UPX 压缩。

源码构建(Rust stable):

git clone https://github.com/ejfkdev/ddc && cd ddc
cargo build --release

用法

ddc app.apk                          # 全量反编译 → app-out/
ddc app.apk -c com.example.Foo       # 单类输出到 stdout
ddc app.apk -o - | less              # 全部输出到 stdout

ddc info app.apk                      # App 上下文(应用名、包名、版本、
                                      # md5)+ 每镜像计数
ddc mainactivity app.apk             # 入口:包名 + 启动 Activity
ddc findrefs app.apk string token    # 每个 const-string "token" 引用点
ddc getmethod app.apk Foo.toString   # 单方法,含全部重载
ddc pkg app.apk --app -o own/        # 只反编译 App 自身代码

完整选项与示例见 ddc --help(按工作流分组的子命令菜单)。更详细的 完整参考 —— 每个选项的语义、每个子命令的输出格式与行为 —— 见 docs/zh-CN/cli.md(English)。

性能

七个真实 APK,release 构建,3 连测取平均(Apple Silicon 6P+12E)。 39 个 APK 的验证语料(408 万个反编译文件,每个 APK 的墙钟 / 峰值 RSS / javac 解析门)见 docs/zh-CN/validation.md (English)。

全量反编译 —— 7 个真实 APK
APK大小全量反编译峰值 RSS
reqable34 MB0.25s139 MB
Telegram62 MB5.64s1479 MB
WhatsApp139 MB5.87s (99,277 个文件——大小写变体类对全部保留)1116 MB
weibo226 MB5.03s1172 MB
weixin268 MB11.61s1339 MB
lark398 MB5.52s1831 MB
qq374 MB15.92s2459 MB

同一批 APK 上的查询子命令(单元格:耗时 / 峰值 RSS;strings -f <包名> --with-locations,findrefs 查包名字符串与方法 onCreate, hierarchy/disasm/getclass 用各 App 启动类):

查询子命令 —— 13 个命令 × 7 个 APK
子命令reqableTelegramWhatsAppweiboweixinlarkqq
info0.12s / 40MB0.21s / 88MB0.42s / 305MB0.65s / 610MB0.79s / 550MB1.10s / 907MB1.08s / 1240MB
listclasses0.04s / 21MB0.06s / 84MB0.08s / 93MB0.13s / 396MB0.21s / 417MB0.20s / 299MB0.27s / 391MB
manifest0.03s / 7MB0.03s / 14MB0.02s / 20MB0.03s / 43MB0.04s / 31MB0.03s / 28MB0.03s / 47MB
mainactivity0.04s / 24MB0.06s / 86MB0.08s / 224MB0.10s / 358MB0.13s / 371MB0.14s / 421MB0.21s / 554MB
res0.02s / 7MB0.03s / 15MB0.03s / 22MB0.05s / 60MB0.04s / 32MB0.04s / 31MB0.05s / 53MB
largest0.05s / 29MB0.08s / 78MB0.15s / 236MB0.31s / 500MB0.32s / 500MB0.46s / 676MB0.66s / 810MB
strings0.05s / 24MB0.10s / 85MB0.21s / 222MB0.39s / 354MB0.45s / 395MB0.52s / 431MB0.81s / 551MB
findrefs-string0.04s / 26MB0.05s / 70MB0.06s / 214MB0.10s / 403MB0.12s / 446MB0.07s / 335MB0.14s / 871MB
findrefs-method0.05s / 26MB0.07s / 70MB0.07s / 219MB0.09s / 410MB0.10s / 458MB0.10s / 620MB0.15s / 896MB
members0.07s / 23MB0.21s / 86MB0.62s / 222MB1.32s / 366MB1.17s / 381MB1.64s / 443MB2.66s / 572MB
hierarchy0.04s / 24MB0.05s / 86MB0.09s / 212MB0.12s / 396MB0.14s / 386MB0.17s / 429MB0.22s / 548MB
disasm0.04s / 23MB0.07s / 88MB0.09s / 214MB0.12s / 371MB0.13s / 392MB0.16s / 422MB0.20s / 533MB
getclass0.05s / 34MB0.28s / 182MB0.14s / 357MB0.33s / 740MB0.37s / 942MB0.50s / 1235MB0.76s / 1651MB

文档

架构三个 crate、提升/结构化/输出管线、DEX 版本、invoke-custom(EN)
CLI 参考全部选项与子命令详解(EN)
子命令渐进式分析完整参考(EN)
基准耗时/内存、方法论、与 ASC 对比(EN)
性能工程5 分钟 → 6s:六轮优化与实测排除的捷径(EN)
语料验证39 个真实 APK、408 万文件全部 javac 解析零错误,含发现并修复的 bug 清单(EN)

已知限制

擦除类型(DEX 无 Signature);d8 反糖的 -$$Lambda$ 类独立成文件;极少数 R8 巨兽方法超时降级(个别被墙钟截止截断的类输出可能随运行浮动); pattern-switch 呈现为反糖分发链。上述 javac 门控是语法门——语义级 诊断(缺 Android classpath、极少数寄存器密集巨兽方法中的类型混淆局部 变量)仍会存在。详见架构文档。

测试

cargo test    # 56 个测试

许可

MIT © ejfkdev

下载工具