ahmxdniazi/reverse-engineering-xor-password
GitHub: ahmxdniazi/reverse-engineering-xor-password
一份完整的 IDA Pro 静态逆向工程演练文档,演示如何通过分析 PE64 二进制文件中的 XOR 混淆机制恢复隐藏密码。
Stars: 0 | Forks: 0
[](https://hex-rays.com/) []() []() []() []()

*IDA Pro 加载 Task.exe — 左侧面板可见函数列表*
### 第 2 步 — 枚举字符串并发现异常
使用 **View → Open Subviews → Strings** (`Shift+F12`),我们枚举二进制文件中的所有可读字符串。在正常的 UI 字符串中,例如 `"Enter Password:"`、`"Submit"` 和 `"Correct Password! Congratulations!"`,我们注意到一个可疑的乱码字符串:**`;6-;(?`**——这就是存储在 `.data` 节中的加密密码。

*Strings 窗口揭示了混淆的密码 `;6-;(?` 以及可读的 UI 字符串*
### 第 3 步 — 导航到 `decrypt` 函数
双击可疑字符串会导航到 `.data` 节中的地址 `0x140003000`。交叉引用 (XREF) 指向名为 **`decrypt`** 的函数。我们跟随 XREF 检查解密逻辑。

*0x140003000 处的 enc_password — XREF 直接指向 decrypt 例程*
### 第 4 步 — 识别 XOR 密钥:`0x5A`
在 `decrypt` 函数的反汇编代码中,我们观察到了关键指令:
```
lea rdx, enc_password ; Load address of encrypted password
movzx eax, byte ptr [rax+rdx] ; Load one encrypted byte
xor eax, 5Ah ; XOR with key 0x5A
```
常量 **`5Ah` (十进制 90)** 就是我们的 XOR 密钥。这种单字节滚动 XOR 被应用于加密密码字符串的每个字符。

*显示 `xor eax, 5Ah` 的汇编视图 — 解密密钥已暴露*
### 第 5 步 — 映射加密字节
检查从 `0x140003000` 开始的原始数据,我们枚举出加密字节:
| 地址 | 十六进制字节 | ASCII |
|---------|----------|-------|
| 140003000 | `17h` | — |
| 140003001 | `3Bh` | `;` |
| 140003002 | `36h` | `6` |
| 140003003 | `2Dh` | `-` |
| 140003004 | `3Bh` | `;` |
| 140003005 | `28h` | `(` |
| 140003006 | `3Fh` | `?` |
| ... | ... | ... |

*.data 节中的原始加密字节 — 每个字节与 0x5A 进行 XOR 运算*
### 第 6 步 — 执行 XOR 解密
对每个字节应用密钥为 `0x5A` 的 XOR 运算,揭示了明文字符:

*完整的 XOR 解密表 — 加密字节 → 明文字符*
完整的解密表:
| 地址 | 加密值 | XOR `5Ah` | 十进制 | 字符 |
|---------|-----------|-----------|---------|-----------|
| 140003000 | `17h` | `4Dh` | 77 | **M** |
| 140003001 | `3Bh` | `61h` | 97 | **a** |
| 140003002 | `36h` | `6Ch` | 108 | **l** |
| 140003003 | `2Dh` | `77h` | 119 | **w** |
| 140003004 | `3Bh` | `61h` | 97 | **a** |
| 140003005 | `28h` | `72h` | 114 | **r** |
| 140003006 | `3Fh` | `65h` | 101 | **e** |
| 140003007 | `16h` | `4Ch` | 76 | **L** |
| 140003008 | `3Bh` | `61h` | 97 | **a** |
| 140003009 | `38h` | `62h` | 98 | **b** |
| 14000300A | `68h` | `32h` | 50 | **1** |
| 14000300B | `68h` | `32h` | 50 | **2** |
| 14000300C | `69h` | `33h` | 51 | **3** |
**🔓 解密后的密码:`MalwareLab123`**
### 第 7 步 — 输入恢复的密码
将解密后的密码输入到应用程序的登录对话框中。

*将恢复的密码 `MalwareLab123` 输入到安全登录对话框中*
### 第 8 步 — 验证成功 ✅
应用程序确认密码正确——分析完成。

*“Correct Password! Congratulations!” — XOR 解密成功*
## 🐍 XOR 解密脚本
```
# xor_decrypt.py — 从 IDA Pro 分析中解密 XOR 混淆的字符串
encrypted_bytes = [0x17, 0x3B, 0x36, 0x2D, 0x3B, 0x28, 0x3F,
0x16, 0x3B, 0x38, 0x68, 0x68, 0x69]
XOR_KEY = 0x5A
decrypted = ''.join(chr(b ^ XOR_KEY) for b in encrypted_bytes)
print(f"[+] XOR Key: 0x{XOR_KEY:02X} ({XOR_KEY})")
print(f"[+] Encrypted bytes: {[hex(b) for b in encrypted_bytes]}")
print(f"[+] Decrypted password: {decrypted}")
```
**输出:**
```
[+] XOR Key: 0x5A (90)
[+] Encrypted bytes: ['0x17', '0x3b', '0x36', '0x2d', '0x3b', '0x28', '0x3f', '0x16', '0x3b', '0x38', '0x68', '0x68', '0x69']
[+] Decrypted password: MalwareLab123
```
## 🧠 核心要点
- **XOR 混淆**是一种简单但常用于向静态扫描器隐藏字符串的技术
- **单字节 XOR 密钥**在反汇编代码中作为 `XOR` 指令的常量操作数直接可见
- IDA Pro 的 **XREF 系统**使得追踪加密数据的引用和处理位置变得非常容易
- 始终通过在真实二进制文件上运行候选密码来**验证您的解密**
- 现代恶意软件使用**多字节、滚动或密钥调度的 XOR** —— 相同的方法论在更高的复杂性下依然适用
## 🛡️ 防御意义
| 指标 | 检测方法 |
|-----------|-----------------|
| `.data` 节中的乱码字符串 | 针对不可打印字节序列的 YARA 规则 |
| XOR 解码循环模式 | 行为沙箱分析 |
| 短单字节 XOR 密钥 | 静态字节熵分析 |
| 运行时字符串解密 | API 监控 / 动态追踪 |
## 📚 参考文献与延伸阅读
- [IDA Pro 文档](https://hex-rays.com/ida-pro/)
- [恶意软件分析师手册](https://www.wiley.com/en-us/Malware+Analyst%27s+Cookbook)
- [实用恶意软件分析 — Sikorski & Honig](https://nostarch.com/malware)
- [FLARE-ON 挑战赛存档](https://flare-on.com/)
- [OpenSecurityTraining2 — 逆向工程](https://ost2.fyi/)
**用 ❤️ 为网络安全社区构建**
*静态分析 | 逆向工程 | 恶意软件研究*

标签:Conpot, DAST, DOS头擦除, IDA Pro, PE64分析, Walkthrough, Windows安全, XOR解密, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 密码破解, 异或混淆, 恶意软件分析, 情报收集, 教程, 漏洞研究, 逆向工具, 逆向工程, 静态分析