vcth4nh/decaf

GitHub: vcth4nh/decaf

一款集成五大引擎并支持 Maven 源码优先策略的 Java 批量反编译命令行工具。

Stars: 0 | Forks: 0

# decaf 一体化的 Java 反编译 CLI。将其指向一个文件夹;它会将其找到的每一个 `.jar` / `.war` / `.ear` / `.aar` / 松散的 `.class`(包括嵌套在归档文件中的归档 ——默认深入一层,使用 `--max-depth` 可更改)反编译成一个镜像你输入结构的源码树, 或者使用 `--merge` 合并成一个单一的包树。 - **源码优先:** 能够解析为 Maven GAV 的产物(内嵌的 `pom.properties`,或在 Maven Central 上进行 SHA-1 查询)会下载其真实的 `-sources.jar`,而不是进行反编译。 - **五大引擎,自动回退:** Vineflower → CFR → Procyon → Fernflower → JD-CLI。如果某个引擎崩溃、超时或遗漏了类, 下一个引擎将接管(支持整个归档和每个类的重试)。 - **引擎自动下载:** 首次使用时(固定版本,经过 sha256 验证) 下载到你的用户缓存目录中。 ## 环境要求 - Python 3.11+ 和 [uv](https://docs.astral.sh/uv/) - PATH 中包含 Java 11+(Java 21+ 可启用所有五个引擎;Vineflower 需要 17+, Fernflower 需要 21+) - Linux、macOS 或 Windows(CPU 预算在 Linux 上是强制执行的, 在其他平台上仅作为提示) ## 安装 ``` uv tool install . # from a checkout → `decaf` on PATH # 或者无需安装直接运行: uvx --from . decaf --help ``` ## 用法 ``` decaf ./libs # one folder per archive under ./decaf-out decaf app.war -o out --merge # single merged source tree in out/src decaf ./libs --engine cfr --no-fallback decaf ./libs --no-maven -j 8 --timeout 120 decaf ./libs --cpus 8 # cap total CPU (shared machine) decaf ./libs --max-depth 2 # also unpack jars nested two archives deep decaf ./libs --repo https://nexus.mycorp.com/repository/maven-public ``` 退出代码:`0` 所有产物成功 · `1` 部分失败(参见 `decaf-out/decaf-report.json`) · `2` 用法/环境错误。 归档嵌套深度由 `--max-depth` 限制(默认为 1:会处理 war 或 fat jar 中的 jar, 但不会处理这些 jar 内部的 jar)。更深层级的归档将在报告中列为已跳过。文件夹的递归深度则从不受限。 CPU 使用受到预算控制。在 Linux 上,该预算通过 CPU 亲和性强制执行: decaf 会将自身绑定到前 `cpus` 个核心,并且每个引擎的 JVM 都会继承该掩码, 因此机器的其余部分保持真正的空闲。每个 JVM 在启动时也会带上 `-XX:ActiveProcessorCount = cpus ÷ jobs` 来调整其线程 池的大小(在其他平台上,此提示是唯一的限制)。默认预算 是所有核心数减一,以确保机器在长时间运行期间保持响应; `--cpus N` 可对其进行精确设置(例如,设置为你的完整核心数以使用所有资源)。 Worker 的数量会被限制,因此它们永远不会超过预算。 ## 输出布局 **镜像(默认):** 输出会镜像输入树,每个归档文件对应一个目录, 包含其完整的引擎输出(含 resources): `in/libs/app.war` → `out/libs/app.war/WEB-INF/lib/dep.jar/`。 **合并(`--merge`):** 每个产物的 `.java` 文件会按包合并到 `OUTPUT/src/` 中 —— 随时可在 IDE 中打开。重复的类会被去重; 冲突的重复项采用先到先得原则(由输入路径顺序决定确定性) 并记录在报告中。诸如 `WEB-INF/classes/` 之类的容器前缀 会被剔除。Resources 会被跳过(在报告中计数)。 ## 配置 `~/.config/decaf/config.toml`(或 `--config PATH`): ``` # Maven repositories,按顺序尝试。 # 除非显式列出,否则会自动附加 Maven Central。 repositories = [ "https://nexus.mycorp.com/repository/maven-public", "https://user:pass@private.repo/maven2", # basic auth via URL userinfo ] ``` `--repo URL`(可重复使用)会前置临时仓库。SHA-1 查询仅限于 Central;由 Maven 构建的 jar 几乎总是内嵌 `pom.properties`, 这适用于任何仓库。 ## 引擎 | 引擎 | 版本 | 最低 Java 版本 | |---|---|---| | [Vineflower](https://github.com/Vineflower/vineflower) | 1.12.0 | 17 | | [CFR](https://github.com/leibnitz27/cfr) | 0.152 | 11 | | [Procyon](https://github.com/mstrobel/procyon) | 0.6.0 | 11 | | Fernflower (JetBrains `java-decompiler-engine`) | 253.33813.25 | 21 | | [JD-CLI](https://github.com/intoolswetrust/jd-cli) | 1.2.0 | 11 | ## 开发 ``` uv sync uv run pytest # fast offline suite uv run pytest -m "slow or network" # + real-engine and live-Maven integration ```
标签:Java反编译, JS文件枚举, Maven, SOC Prime, 云资产清单, 代码分析, 凭证管理, 开发工具, 漏洞验证, 逆向工具, 逆向工程