N1CTF Junior re pyramid
字数 1218 2025-09-23 19:27:38
N1CTF Junior re pyramid 题目解析与教学
概述
本题是一个Python逆向题目,涉及多层嵌套结构:EXE -> PYC -> PYD -> 白盒AES加密。主要考察Python逆向、RC4密钥流爆破、白盒AES差分故障分析等技能。
解题步骤
第一步:EXE解包与PYC反编译
- 使用
pyinstxtractor.py解包提供的EXE文件 - 获取
chal.pyc文件 - 使用PyLingual等工具反编译PYC得到源代码
反编译后的主要逻辑:
import pyramid
import os
text = 'A pyramid fortified with intricate defenses looms before you. \nIts secrets are locked behind layers of puzzles. \nYou stand at its base, challenged to unravel them all.'
print('・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・')
for line in text.split('\n'):
print(f' {line}')
print('・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・')
a=input()
pyramid.a_long_way_to_treasure()
try:
os.remove('checkinput.pyd')
except Exception as e:
pass
第二步:分析PYD文件
- 使用IDA打开
checkinput.pyd - 定位
pyramid.a_long_way_to_treasure()函数 - 发现动态解密逻辑:
- 大字节数组(0x327B2长度)与密钥"bangdreamitsmygo"逐字节异或
- 解密后得到新的PYC文件
解密代码示例:
# 手动提取数据并解密
large_data = [...] # 从IDA中提取的0x327B2长度字节数组
key = b"bangdreamitsmygo"
decrypted = bytes([large_data[i] ^ key[i % len(key)] for i in range(len(large_data))])
第三步:解密后的PYC分析
解密后的文件具有PYC文件头特征(0xE3开头),反编译后得到真实逻辑:
- 用户输入作为key
- 使用FNV-1a(32-bit)哈希将key压缩为32位整数
- 通过ctypes调用advapi32的SystemFunction033(RC4加密)
- 使用RC4解密数据并加载为PYD文件
第四步:RC4密钥流爆破
已知条件:
- 正常PYD文件头:
b'\x4D\x5A\x90\x00' - 密文开头:
b'\xb7\xc3\xbc\xe5'
爆破思路:
# 参考RC4暴力破解算法
for keystream_byte in range(256):
if plaintext_byte ^ ciphertext_byte == keystream_byte:
# 找到匹配的密钥流字节
最终得到密钥流:B7 BC 71 42
第五步:白盒AES分析
解密得到的PYD文件包含白盒AES加密:
-
识别白盒AES特征:
- 大型查找表
- 复杂的字节置换操作
- 多轮加密结构
-
差分故障分析(DFA)攻击:
- 在第8轮列混淆处设置断点
- 修改单字节并观察输出差异
- 收集正常密文和16个故障密文
-
使用工具:
phoenixAES:进行DFA攻击aes_keyschedule.c:计算轮密钥
攻击步骤:
# 安装phoenixAES
pip install phoenixAES
# 编译密钥计划工具
gcc -o aes_keyschedule aes_keyschedule.c
- 提取最后一轮轮密钥并反向推导得到原始AES密钥
第六步:最终解密
使用得到的AES密钥解密最终密文,获取flag。
关键技术点
-
Python逆向技巧:
- PyInstaller解包
- PYC反编译
- PYD文件分析
-
RC4密码分析:
- 已知明文攻击
- 密钥流爆破
-
白盒密码分析:
- 识别白盒实现特征
- 差分故障分析(DFA)
- 轮密钥推导
-
工具使用:
- IDA Pro静态分析
- 动态调试技巧
- 专用密码分析工具
防护与加固建议
- 避免在代码中硬编码密钥
- 使用代码混淆技术
- 实现反调试机制
- 避免使用白盒密码实现
- 使用多层加密保护敏感逻辑
总结
本题展示了从外层包装到核心加密算法的完整逆向工程过程,涉及多种逆向技术和密码学分析方法。通过逐步剥离保护层,最终攻克白盒AES加密,体现了现代CTF题目中常见的多层防御体系破解方法。
掌握这些技术不仅有助于CTF竞赛,也对理解软件保护机制和密码学实现有重要意义。