lehasaS/JavaClassDumper

GitHub: lehasaS/JavaClassDumper

一款用于 Java 类文件泄露后的源码恢复与调查的自动化工具。

Stars: 0 | Forks: 0

# Java Class Dumper 你是否发现某个 Java Web 应用程序暴露了类文件(例如在 `.../WEB-INF/classes/` 下)? 如果能发现一个类路径,通常可以通过链式调用恢复更多类: - 从反编译源码中导入, - 部署描述符(`web.xml` 等), - 反编译器输出中的未解析依赖提示。 `java_class_dumper.py` 自动化了这一恢复循环。 ## 此工具的作用 `java_class_dumper.py` 是一个用于 Java 应用源码泄露调查的通用类恢复管道。 它结合了: - `.java` 源码中的导入解析, - `.class` 路径重建, - 带重试/续传的 HTTP 下载, - CFR 反编译, - 从 CFR 头部(`Could not load the following classes`)迭代扩展依赖。 目标是消除重复的手动循环: 1. 下载类, 2. 反编译, 3. 检查缺失类, 4. 用新目标重新运行。 ## 管道概览 每次运行,该工具可以: 1. 解析 `--java-root` 中的导入。 2. 从部署描述符(`web.xml` 等)播种类队列。 3. 从 `--java-root` 下现有的 CFR 头部播种类队列。 4. 可选地反编译 `--java-root` 下的本地 `.class` 文件,并从发现的依赖中播种。 5. 从 `--base-url` 下载未解析的 `.class` 文件。 6. 用 CFR 反编译新下载的类。 7. 解析 CFR 缺失类头部并排队新类。 8. 重复直到收敛或达到 `--max-auto-passes`。 ## 要求 - Python 3.9+ - Java 运行时(`java`)在 PATH 中 - [CFR](https://github.com/leibnitz27/cfr) Java 反编译器 - 对目标类 URL 根的网络访问 ## 安装 ``` # 1) Git clone the repository git clone https://github.com/lehasaS/JavaClassDumper # 2) Enter the tool directory cd JavaClassDumper # 3) (Recommended) create and activate a virtualenv python3 -m venv .venv source .venv/bin/activate # 4) Install dependencies (currently stdlib-only; keeps workflow consistent) pip install -r requirements.txt # 5) Install the tool in editable mode (adds `java-class-dumper` CLI entrypoint) # `--no-build-isolation` helps in offline/restricted environments. pip install -e . --no-build-isolation # 6) Verify java-class-dumper --help ``` 说明: - 保持你的 CFR jar 可访问,并通过 `--cfr-jar /path/to/cfr.jar` 传递。 - 如果你喜欢直接执行,仍然可以运行 `python3 java_class_dumper.py ...`。 ## 安全 / 范围 - 仅在你被授权评估的系统上使用。 - 本工具用于防御性工件恢复和分析工作流。 ## 基本用法 ``` python3 java_class_dumper.py \ --java-root \ --base-url https://vulnerable.application.com/WEB-INF/classes/ \ --cfr-jar /path/to/cfr.jar ``` ## 现有转储工作流 如果你已经有反编译源码(示例文件夹名): ``` python3 java_class_dumper.py \ --java-root Vulnerable-App-Decompiled-Source/ \ --base-url https://vulnerable.application.com/WEB-INF/classes/ \ --cfr-jar cfr.jar \ --verbose ``` 即使没有先前的 `imports_fetch_report.json` 也有效。 ## 输出与合并行为 默认行为是合并友好: - `--output-dir` 默认自动推断靠近 `--java-root`。 - 对于 `*Decompiled` 根,如果存在同级 `*Downloaded` 则复用。 - 否则复用 `Downloaded`、`downloaded` 或 `mirror`(位于输出根下)。 - 仅通过 `--new-mirror-run` 强制新建镜像文件夹。 ## 类根行为 `--class-root` 是可选的。 如果省略,默认保持中性(`/`),不会假设特定产品的披露路径。 示例: - `https://vulnerable.application.com/WEB-INF/classes/` + 默认类根 -> `com/vulnerable/Application.class` - `https://vulnerable.application.com/custom/path/` + 显式 `--class-root /java_class_internal/classes` -> `/java_class_internal/classes/com/vulnerable/Application.class` ## 播种来源 ### 1) `.java` 中的导入 - 解析 `import ...;` - 处理静态导入和可选通配符扩展(`--expand-wildcards`) ### 2) 部署描述符(`--seed-from-descriptors`) 解析 `--java-root` 下的 XML 并从标签中提取类,例如: - `servlet-class` - `filter-class` - `listener-class` - `ejb-class` - `home`、`remote`、`local-home`、`local`、`service-endpoint` ### 3) CFR 头部(`--seed-from-cfr-headers`) 解析: - `Could not load the following classes:` ### 4) 本地 `.class` 文件(`--seed-from-local-class-files`) 如果 `--java-root` 下已存在 `.class` 文件,会先反编译它们以发现更多缺失类。 ## 过滤行为 ### 标准命名空间排除(默认) 默认排除以下项: - `java.` - `javax.` - `jakarta.` - `sun.` - `com.sun.` - `org.w3c.` - `org.xml.` 使用 `--exclude-prefix` 添加更多。 ### 包含前缀处理 - 如果提供了 `--include-prefix`,则强制执行。 - 如果未提供 `--include-prefix`,工具将使用所有非标准导入。 ## 恢复 / 状态 默认情况下,工具从以下位置恢复: - 现有的镜像文件, - 之前的 `imports_fetch_report.json`(如果存在)。 使用 `--no-resume` 禁用恢复。 失败处理: - 默认跳过之前的失败(`--skip-previous-failures`) - 模式:`hard`(默认)或 `all` ## 反编译行为 默认启用反编译(`--decompile`)。 每次传递: - 反编译新下载的类, - 挖掘 CFR 头部中的未解析类, - 将未解析类排队到下一次传递。 使用 `--max-auto-passes` 设置扩展限制(默认 `8`)。 ## 重要标志 - `--java-root` - `--base-url` - `--class-root` - `--output-dir` - `--include-prefix` - `--exclude-prefix` - `--decompile / --no-decompile` - `--cfr-jar` - `--decompiled-dir` - `--seed-from-cfr-headers / --no-seed-from-cfr-headers` - `--seed-from-descriptors / --no-seed-from-descriptors` - `--seed-from-local-class-files / --no-seed-from-local-class-files` - `--threads` - `--insecure` - `--verbose` ## 实用配方 ### 1. 描述符引导(`web.xml` 引导) ``` python3 java_class_dumper.py \ --java-root Vulnerable-App-Decompiled-Source/ \ --base-url https://vulnerable.application.com/WEB-INF/classes/ \ --seed-from-descriptors \ --seed-from-cfr-headers \ --seed-from-local-class-files \ --cfr-jar cfr.jar \ --verbose ``` ### 2. 限制到已知包家族 ``` python3 java_class_dumper.py \ --java-root Vulnerable-App-Decompiled-Source/ \ --base-url https://vulnerable.application.com/WEB-INF/classes/ \ --include-prefix com.vulnerable.application. \ --include-prefix org.vendor.product. \ --cfr-jar cfr.jar ``` ### 3. 仅下载(不反编译) ``` python3 java_class_dumper.py \ --java-root Vulnerable-App-Decompiled-Source/ \ --base-url https://vulnerable.application.com/WEB-INF/classes/ \ --no-decompile ``` ### 4. 强制新建镜像文件夹 ``` python3 java_class_dumper.py \ --java-root Vulnerable-App-Decompiled-Source/ \ --base-url https://vulnerable.application.com/WEB-INF/classes/ \ --new-mirror-run ``` ## 报告文件 默认报告路径: - `/imports_fetch_report.json` 计数器包括: - 选中的导入/类 - 自动传递次数 - 下载文件数 - 失败数 - CFR 发现的类计数 - 描述符/CFR/本地种子计数 ## 故障排除 ### `Selected imports: 0` - 验证 `--java-root` 是否确实包含可解析的 `.java` 和/或描述符。 - 如果使用了 `--include-prefix`,请检查它是否过于狭窄。 - 确保已启用所需的播种标志。 ### TLS 证书错误 - 优先使用正确的主机名/证书链。 - 对于具有不匹配证书的控制实验室测试:使用 `--insecure`。 ### CFR 无法运行 - 确保已安装 Java。 - 验证 `--cfr-jar` 路径。 ### 错误的远程路径 - 验证 `--base-url` / `--class-root` 组合。 - 在已知披露路径时优先使用显式 `--class-root`。 ## 注意事项 - 默认在 TTY 中启用颜色;通过 `--no-color` 禁用。 - 使用 `--verbose` 获取逐次传递的详细诊断信息。
标签:CFR, Class文件, HTTP下载, Java运行时, JS文件枚举, URL提取, WEB-INF, WebSocket, 云资产清单, 依赖分析, 信息泄露, 关键词优化, 反编译, 源码恢复, 源码泄露, 路径恢复, 逆向工具, 逆向工程, 部署描述符, 重试机制