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文件枚举, 代码重构, 反混淆工具, 域名枚举, 字节码处理, 逆向分析工具