AFCaternos/Rhino-Smali-Deobfuscator
GitHub: AFCaternos/Rhino-Smali-Deobfuscator
一款基于 JavaScript 编写的 Android Smali 代码还原工具,专门用于解码和还原 Mozilla Rhino 引擎加密内嵌的 JavaScript 源码。
Stars: 0 | Forks: 0
# Rhino Smali Deobfuscator 🔓
## 项目概述
Rhino Smali Deobfuscator 是专门用于解析与还原 Android Smali 文件中由 Mozilla Rhino 引擎生成的加密 JavaScript 代码的工具。通过定位 Smali 字节码中的 `getEncodedSource` 方法,抽取字符数据并逆向映射 Rhino Token 字节码,将二进制编码恢复为结构清晰的标准 JavaScript 源代码,同时支持对原 Smali 文件进行重构与保存。
## 核心功能
* **Smali 字节码解析**:定位包含 `getEncodedSource` 方法的 Smali 代码段,提取内部的加密字符串数据。
* **Rhino Token 还原**:支持 Rhino 语法树中的表达式、流程控制语句、逻辑运算符、三元运算符、变长数值类型,包含 Short、Long 与 IEEE 754 Double 浮点数,以及字符串常量的映射与重构。
* **转义格式转换**:包含完整的 Smali 字符转义解包与 JavaScript 格式化能力,保障字符解析过程的准确度。
* **导出与重构**:提供独立 JavaScript 文件的导出保存功能,同时重新转义生成可运行的目标 Smali 文件。
## 工作原理
项目处理逻辑分为三个步骤:
1. **提取阶段**:读取目标 Smali 文件,搜索 `getEncodedSource` 方法声明,提取包含加密源文本的 `const-string` 字节码序列。
2. **解码阶段**:将 Smali 规范的 Unicode 转义序列还原为原始字节数据,按位解析 Rhino 语法树 Token,重构 JavaScript 逻辑结构。
3. **生成阶段**:将格式化完毕的 JavaScript 导出保存,同时将转换后的代码重新替换写入 Smali 文件中。
## 环境要求
* Node.js 14.0.0 及以上版本
## 使用指南
运行命令行工具时,传入待处理的 Smali 文件名称。未指定目标文件名时,默认生成后缀为 `_deobf.smali` 的重构文件。
### 命令语法
node deobf.js <输入文件.smali> [输出文件.smali]
### 执行示例
node deobf.js TargetClass.smali TargetClass_deobf.smali
执行后将在当前目录下生成以下文件:
* `TargetClass.js`:从 Smali 中提取并还原的标准 JavaScript 源代码文件。
* `TargetClass_deobf.smali`:完成替换的重构 Smali 字节码文件。
标签:Android安全, CMS安全, JavaScript, MITM代理, Smali解析, 代码解密, 数据可视化, 自定义脚本, 逆向分析