aramsimonyan1/crypto-reverse-engineering
GitHub: aramsimonyan1/crypto-reverse-engineering
通过逆向分析一个存在缺陷的 Diffie-Hellman Python 实现,展示了如何利用实现错误(误用 XOR 代替幂运算)恢复共享密钥并解密 AES 加密消息的完整过程。
Stars: 0 | Forks: 0
# 破解有缺陷的 Diffie-Hellman 实现(Python 逆向工程)
## 项目概述
本项目展示了对一个实现了存在漏洞的 Diffie-Hellman 密钥交换的 Python 应用程序的逆向工程和密码分析。
该挑战涉及分析一个可疑的可执行文件以及两方之间被拦截的通信。通过逆向工程该应用程序并识别出加密实现中的缺陷,成功恢复了共享密钥并解密了受保护的消息。
该项目突显了加密协议中的实现错误如何导致安全性完全丧失,即使使用了 Diffie-Hellman 和 AES 等强算法也是如此。
## 挑战场景
在挑战开始时,提供了一个包含以下内容的 ZIP 压缩包:
一个包含两名用户(Alice 和 Bob)之间简短拦截通信的文本文件。
一个没有可见扩展名的文件,结果证明是一个编译后的可执行文件。
被拦截的对话显示,Alice 在将 flag 发送给 Bob 之前,使用他们自定义的 Diffie-Hellman Python 实现对其进行了加密。
被拦截通信的示例摘录:
Alice: 嘿,我又从 H@ckademy 拿到了一个 flag
Bob: 噢,请发给我
Alice: 没问题,但为了以防万一,我会加密它。谁知道谁在监听。
Bob: 好的
Alice: 我们用那个可靠的 Diffie-Hellman 程序吧。
通信中还包含以下参数:
素数模数 p
公钥 A (Alice)
公钥 B (Bob)
Base64 编码的密文
### 挑战目标
任务是:
分析提供的可执行文件。
理解密钥交换和加密是如何实现的。
识别加密协议中的任何弱点。
恢复 Alice 和 Bob 之间使用的共享密钥。
利用该密钥推导出 AES 密钥并解密加密消息(flag)。
### 方法论
1. 提取 PyInstaller 可执行文件
提供的二进制文件被识别为 PyInstaller 打包的 Python 应用程序。
使用 pyinstxtractor 提取了可执行文件的内容:
python pyinstxtractor.py dh_secret.exe
这显示了多个文件,包括:
Python 运行时库
捆绑的依赖项
一个编译后的 Python 字节码文件:
DH shared secret generation.pyc
2. 恢复 Python 源代码
该 .pyc 文件通过在线反编译器被反编译为可读的 Python 代码:
https://pychaos.io
这允许分析负责以下内容的程序逻辑:
Diffie-Hellman 密钥交换
AES 加密/解密
3. 识别加密缺陷
在分析过程中,发现了一个关键的实现错误。
程序使用以下代码生成 Diffie-Hellman 值:
def generate_public_int(g,a,p):
return g^a%p
然而,在 Python 中,运算符 ^ 表示按位 XOR(异或),而不是幂运算。
正确的 Diffie-Hellman 应该使用模幂运算:
pow(g, a, p)
相反,该程序实际计算的是:
A = g XOR (a mod p)
这个错误完全破坏了密钥交换的安全性。
### 4. 重构协议参数
生成器值 g 源自源代码中的硬编码字符串:
g = int(licenseText[39] + licenseText[89])
通过计算这些索引,确定生成器为:
g = 11
### 5. 恢复共享密钥
由于使用了 XOR 而不是幂运算,公钥直接暴露了私钥值。
已知:
B = g ^ (b % p)
我们可以恢复:
b % p = g ^ B
程序使用的共享密钥随后计算为:
shared_secret = A ^ (b % p)
这允许重构加密期间使用的确切密钥。
### 6. 解密消息
程序使用以下方式推导 AES 密钥:
AES_key = SHA256(shared_secret)
加密模式:
AES-CBC
使用恢复的密钥,密文被成功解密。
### 结果
恢复的 flag:
KPMG{Have_you-eva-s33n_binary_python?}
### 关键经验
```
This challenge demonstrates several important cybersecurity concepts:
Reverse engineering PyInstaller executables
Python bytecode analysis
Cryptographic protocol analysis
The dangers of incorrect cryptographic implementations
How small coding mistakes can completely break security guarantees
Even though the program attempted to use strong cryptographic primitives (Diffie-Hellman and AES), the misuse of the XOR operator instead of exponentiation made the protocol trivially exploitable.
```
### 使用的工具
```
Python
pyinstxtractor
Python bytecode decompilers
PyCryptodome
Base64 decoding
Cryptographic analysis
```
标签:AES, Diffie-Hellman, DNS 反向解析, PyInstaller, Python, Writeup, 二进制分析, 云安全运维, 云资产清单, 安全教育, 实现缺陷, 密码学, 密钥交换, 密钥恢复, 手动系统调用, 无后门, 漏洞分析, 漏洞挖掘, 解密, 路径探测, 逆向工具, 逆向工程, 通信截获