Kzhong-sec/Emotet-unflattener
GitHub: Kzhong-sec/Emotet-unflattener
基于Angr符号执行引擎的Python工具,专门用于还原被控制流平坦化混淆的Emotet恶意软件原始控制流,辅助安全研究人员进行逆向分析。
Stars: 0 | Forks: 0
# Emotet 控制流还原器
一个 Python 工具,通过 Angr 利用符号执行技术,还原被控制流平坦化混淆的 Emotet 恶意软件的原始控制流。
## 注意事项
- 支持所有 32 位和 64 位的 Windows PE 二进制文件
- 已针对 2024 年首次提交至 VirusTotal 的 Emotet 二进制样本进行过测试
- 去混淆过程可能需要相当长的时间(每个二进制文件最长约 1 小时),具体取决于样本的复杂程度
## 前置条件
- Python 3.10 或更高版本
## 安装说明
1. 克隆代码库:
```
git clone https://github.com/Kzhong-sec/Emotet-unflattener.git
cd Emotet-unflattener
```
2. 安装 Python 依赖项:
```
pip install -r requirements.txt
```
## 用法
该工具通过 `src/unflatten.py` 入口文件执行。
### 参数
```
python unflatten.py --binary [--function ] [--output ]
```
- `--binary`, `-b`
**必填。** 目标 Windows PE 二进制文件的路径。
- `--function`, `-f`
可选的待还原函数地址(十六进制或十进制)。
若省略,则处理所有函数。
- `--output`, `-o`
可选的输出二进制文件路径。
默认值为 `.unflattened`。
## 输出
请参阅下方的工具运行结果。
**图 1:去混淆前的基本块**

**图 2:去混淆后的基本块**

**图 3:去混淆前的反编译结果**

**图 4:去混淆后的反编译结果**

## 性能
该工具已针对以下 9 个 Emotet 样本进行了评估:
```
C688E079A16B3345C83A285AC2AE8DD48680298085421C225680F26CEAE73EB7
9D5AF9E1EBE5E391B33B7A362E1125CE2842BA84E75E1AB1B043EEA695EA3995
3822FFA36B251A65AB4042D3C6F7457684ABB452366EF248868176B3D22C2AB2
E5C488C73F34F4DF7B85A0B6FA8F667FED7364DBCEEC8E18F426D53989AF9045
9BB1B20AB4A3355F2C62DD0E08159AB6392E9490961295DDB16984B573AF2775
3B6E3B851F5195C9D831D0958967B96C0A699B1CF8DE71218AC66F48CD009FEF
1C9D11817A98EC7E35B5177982B38DB5371E1806293F621E40D103053E886BCB
951DB530C6DCB5C56B376D3A2E2EFE3AC938B487CF7B7F29E6CE06FDEA46406C
5700694D1D78C952A81690CF0DFAD2B13F25B65D8C196481DC256B47550E33F1
```
在这些样本中,大约 98% 的被混淆函数被成功去混淆。工具处理失败的函数主要是那些极为庞大的函数,其符号执行过程会超时或导致内存消耗过高。
经过重写和修补的二进制文件在去混淆后成功执行,并且按预期运行,未发生崩溃。
标签:Angr, DAST, DNS 反向解析, Emotet, PE文件分析, Python, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 去混淆, 反混淆, 反病毒, 威胁情报, 安全脚本, 开发者工具, 恶意软件分析, 控制流平坦化, 控制流恢复, 无后门, 样本分析, 漏洞分析, 符号执行, 路径探测, 逆向工具, 逆向工程, 静态分析