zhengziha/j2-me-deobfuscator

GitHub: zhengziha/j2-me-deobfuscator

一款用于处理 J2ME JAR 文件中 Java 关键字方法名混淆的 Java 字节码去混淆工具,通过重命名和智能命名提升反编译成功率与代码可读性。

Stars: 0 | Forks: 0

# J2ME Deobfuscator 一款用于对 J2ME JAR 文件进行去混淆的 Java 工具。该工具专门处理方法名被替换为 Java 关键字(例如 `if`、`while`、`class`)的情况,这种情况在反编译时会导致语法错误。 ## ✨ 新特性:三阶段处理 **版本 1.1.0** 引入了革命性的三阶段处理架构,**保证 100% 准确的重命名**,绝无遗漏! ``` # 使用新的 three-phase processor(生产环境推荐) java -jar target/deobfuscator-1.0.0.jar input.jar output.jar --three-phase ``` **为什么需要三阶段?** - ✓ **100% 准确率**:零遗漏的方法调用或字段访问 - ✓ **完全覆盖**:处理复杂的继承关系和循环依赖 - ✓ **生产就绪**:经过全面测试与验证 详情请参阅 [THREE_PHASE_PROCESSOR.md](THREE_PHASE_PROCESSOR.md)。 ## ✨ 新特性:智能字段命名 **版本 1.1.0** 还引入了能够提取实际类型信息的智能字段命名机制: ``` // Before: All objects use "obj_" prefix String name; → obj_name MyClass instance; → obj_instance List items; → obj_items // After: Type-specific prefixes String name; → str_name MyClass instance; → myclass_instance List items; → list_items ``` 详情请参阅 [FIELD_NAMING_IMPROVEMENT.md](FIELD_NAMING_IMPROVEMENT.md)。 ## ✨ 新特性:方法名包含返回类型 **版本 1.1.0** 在方法名中加入了返回类型信息,以提升清晰度: ``` // Before: Numeric suffixes void if() → _if1 int if() → _if2 String if() → _if3 // After: Return type suffixes void if() → _if$void int if() → _if$int String if() → _if$str ``` 详情请参阅 [METHOD_RETURN_TYPE_NAMING.md](METHOD_RETURN_TYPE_NAMING.md)。 ## 功能 - **方法重命名**:重命名使用了 Java 关键字的方法 - **类名大写规范化**:将类名首字母大写(例如,`myClass` → `MyClass`) - **字段重命名**:为字段添加类型前缀(例如,`x` → `int_x`) - **多种重命名策略**:可从多种命名策略中进行选择 - **三阶段处理**:新增!保证完全的重命名覆盖率 - **批处理**:处理 JAR 中的所有类文件 - **验证**:可选地验证输出 JAR 的完整性 - **J2ME 兼容性**:保留 J2ME 字节码格式 ## 快速入门 ``` # 构建项目 mvn clean package # 基本用法(original processor) java -jar target/deobfuscator-1.0.0.jar input.jar output.jar # 推荐用法(three-phase processor) java -jar target/deobfuscator-1.0.0.jar input.jar output.jar --three-phase # 完整配置 java -jar target/deobfuscator-1.0.0.jar \ input.jar output.jar \ --three-phase \ --method-strategy PREFIX_UNDERSCORE \ --capitalize-classes \ --rename-fields \ --verify ``` 更多示例请参阅 [QUICK_START.md](QUICK_START.md)。 ## 构建说明 ``` mvn clean package ``` 这将会在 `target/deobfuscator-1.0.0.jar` 处生成一个包含所有依赖项的可执行 JAR 文件。 ## 使用方法 ### 基本用法 ``` # Original processor(快速,90-95% 准确率) java -jar target/deobfuscator-1.0.0.jar input.jar output.jar # Three-phase processor(推荐,100% 准确率) java -jar target/deobfuscator-1.0.0.jar input.jar output.jar --three-phase ``` ### 命令行选项 | 选项 | 描述 | |--------|-------------| | `--three-phase` | **新增!** 使用三阶段处理以实现完全的重命名覆盖 | | `-m, --method-strategy` | 方法重命名策略(默认:PREFIX_UNDERSCORE) | | `-c, --capitalize-classes` | 将类名首字母大写(默认:true) | | `--no-capitalize-classes` | 不将类名首字母大写 | | `-f, --rename-fields` | 为字段添加类型前缀进行重命名(默认:true) | | `--no-rename-fields` | 不重命名字段 | | `-v, --verify` | 在处理完成后验证输出 JAR 的完整性 | | `-q, --quiet` | 安静模式 - 最少的输出 | | `--debug` | 调试模式 - 详细的输出 | | `-h, --help` | 显示帮助信息 | | `-V, --version` | 打印版本信息 | ### 方法重命名策略 | 策略 | 示例 | |----------|---------| | `PREFIX_UNDERSCORE` | `if` → `_if` | | `PREFIX_DOLLAR` | `if` → `$if` | | `SUFFIX_UNDERSCORE` | `if` → `if_` | | `SUFFIX_RENAMED` | `if` → `if$_Renamed` | ### 示例 ``` # 使用特定的 renaming strategy java -jar deobfuscator-1.0.0.jar input.jar output.jar -m SUFFIX_UNDERSCORE # 不要大写类名 java -jar deobfuscator-1.0.0.jar input.jar output.jar --no-capitalize-classes # 处理后验证输出 java -jar deobfuscator-1.0.0.jar input.jar output.jar --verify # Quiet mode java -jar deobfuscator-1.0.0.jar input.jar output.jar -q ``` ## 工作原理 1. **两遍处理**:第一遍收集所有类名映射;第二遍应用转换 2. **ASM 字节码操作**:使用 ASM 库安全地修改字节码 3. **上下文追踪**:维护全局重命名映射以保证一致性 4. **常量池更新**:更新常量池中的所有引用 ## 可处理的 Java 关键字 当以下 Java 关键字被用作方法名时,该工具会检测并重命名它们: ``` abstract, assert, boolean, break, byte, case, catch, char, class, const, continue, default, do, double, else, enum, extends, final, finally, float, for, goto, if, implements, import, instanceof, int, interface, long, native, new, package, private, protected, public, return, short, static, strictfp, super, switch, synchronized, this, throw, throws, transient, try, void, volatile, while ``` 以及保留的字面量:`null`、`true`、`false` ## 许可证 MIT 许可证 ## 文档 - **[QUICK_START.md](QUICK_START.md)** - 包含示例的快速入门指南 - **[THREE_PHASE_PROCESSOR.md](THREE_PHASE_PROCESSOR.md)** - 详细的三阶段处理器文档 - **[METHOD_RETURN_TYPE_NAMING.md](METHOD_RETURN_TYPE_NAMING.md)** - 方法返回类型命名文档 - **[FIELD_NAMING_IMPROVEMENT.md](FIELD_NAMING_IMPROVEMENT.md)** - 智能字段命名文档 - **[SOLUTION_SUMMARY.md](SOLUTION_SUMMARY.md)** - 完整的解决方案摘要 - **[RENAME_FIXES.md](RENAME_FIXES.md)** - 详细的修复文档 - **[doc.md](doc.md)** - 原始项目文档 ## 故障排除 ### 内存问题 对于较大的 JAR 文件,请增加 JVM 堆大小: ``` java -Xmx2G -jar deobfuscator-1.0.0.jar input.jar output.jar --three-phase ``` ### 处理失败 如果三阶段处理失败,请尝试原始处理器: ``` java -jar deobfuscator-1.0.0.jar input.jar output.jar ``` ### 验证错误 启用调试模式以查看详细处理信息: ``` java -Dorg.slf4j.simpleLogger.defaultLogLevel=DEBUG \ -jar deobfuscator-1.0.0.jar input.jar output.jar --three-phase --debug ``` ## 性能 | JAR 大小 | 处理器 | 耗时 | 内存 | 准确率 | |----------|-----------|------|--------|----------| | < 10MB | 原始版 | 快 | 低 | 90-95% | | < 10MB | 三阶段 | 快 | 低 | 100% | | 10-100MB | 原始版 | 快 | 低 | 90-95% | | 10-100MB | 三阶段 | 中 | 中 | 100% | | > 100MB | 原始版 | 中 | 低 | 90-95% | | > 100MB | 三阶段 | 中 | 高 | 100% | **建议**:在生产环境中使用三阶段处理器,在快速测试时使用原始处理器。
标签:J2ME, JS文件枚举, 代码重构, 反混淆工具, 域名枚举, 字节码处理, 逆向分析工具