巅峰极客2024 Rev&Misc WP
字数 1367 2025-08-24 07:48:09
巅峰极客2024 Rev&Misc 题目解析与教学文档
题目概述
这是一道结合逆向工程(Reverse Engineering)和杂项(Miscellaneous)的CTF题目,主要考察UPX脱壳、虚拟机检测绕过、恶意软件分析、Python配置解码器使用、隐写术以及自定义加密算法分析等技能。
Misc 部分解析
1. 初始分析
-
源文件带有UPX壳,首先需要脱壳:
upx -d filename -
脱壳后程序在沙箱中无法正常运行,IDA分析发现存在虚拟机检测机制,必须在真实环境中运行。
2. 程序行为分析
-
运行后释放两个文件:
- 一张图片
- 一个名为"file"的可疑文件
-
"file"文件分析:
- 沙箱分析显示为木马,会释放"default"程序
- 逆向分析发现大量Python对象和"pupy"字段
- 实际是Pupy RAT(远程访问工具)的配置文件
3. 配置文件解码
使用专用解码工具:
git clone https://github.com/CaledoniaProject/pupyrat-config-decoder
cd pupyrat-config-decoder
python2 main.py
注意:
- 需要Python2环境
- 直接执行
./main.py可能会报错,应使用python2 main.py执行 - 解码后会得到IP地址等配置信息
4. 图片分析
- 使用
zsteg工具分析图片:zsteg image.png - 图片中隐藏了与释放的"file"相同的二进制数据
- 提取方法多样,关键是要识别出这是Pupy RAT的配置
Reverse 部分解析
1. 加密流程分析
-
输入验证:
- 程序在513行附近验证输入字符
- 允许字符:数字、大小写字母、"-"和"{}"
-
加密过程:
- 主要加密逻辑在276行附近
- 使用大量SHA256哈希算法
- 结合异或操作进行加密
-
加密特点:
- 每次处理3个字节
- 每个循环处理窗口向后移动1字节(重叠2字节)
- 生成32字节的密文
- 密文总长度1280字节(40个32字节块)
2. 加密算法细节
-
对每3字节明文:
def encrypt(data): data_bytes = data.encode() sha256_hash = hashlib.sha256() sha256_hash.update(data_bytes) hash_bytes = sha256_hash.digest() result = bytearray() for i in range(len(hash_bytes)): result.append(data_bytes[i % len(data_bytes)] ^ hash_bytes[i % len(hash_bytes)]) return result -
密文存储:
- 不是按明文顺序排列
- 可能使用二叉搜索树(BST)结构存储
- 需要按特征重新排序解密结果
3. 解密方法
-
爆破策略:
- 由于无法逆向哈希,采用3字节爆破
- 爆破所有可能的3字节组合(使用可打印字符)
- 计算每个组合的加密结果并与密文比对
-
爆破脚本:
import hashlib import itertools enc = "EB74464F7924C56210CBFFC5A239BE0399ED2C8FB9542BA7C58A7E560F352CA0..." enc_list = [enc[i:i+64] for i in range(0, len(enc), 64)] # 分割为64字符(32字节)的块 char_list = "1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM-{}" flag_list = [] for data in itertools.product(char_list, repeat=3): data = ''.join(data) enc_result = encrypt(data).hex().upper() if enc_result in enc_list: flag_list.append(data) # 排序拼接 current = "fla" # 已知起始段 start_index = flag_list.index('fla') i = start_index while i < len(flag_list): if flag_list[i][:2] == current[-2:]: current += flag_list[i][2] i = 0 else: i += 1 print(current) # 输出完整flag -
最终flag:
flag{194a39a4-7937-48fb-bfea-80bd17729f8a}
关键技术点总结
- UPX脱壳:识别和脱去UPX壳是第一步
- 反虚拟机技术:识别并绕过简单的反虚拟机检测
- 恶意软件分析:识别Pupy RAT及其配置
- 专用工具使用:找到并正确使用Pupy配置解码器
- 隐写分析:使用zsteg等工具分析图片中的隐藏数据
- 自定义加密分析:理解SHA256+异或的加密方式
- 部分爆破:针对3字节可打印字符的爆破策略
- 密文重组:根据已知模式("fla")重组乱序的爆破结果
教学建议
-
环境准备:
- 安装Python2环境
- 熟悉UPX、zsteg等工具
- 准备沙箱分析环境
-
分析流程:
- 先静态分析(IDA、strings等)
- 再动态分析(调试、沙箱)
- 最后针对性破解
-
调试技巧:
- 关注加密API调用点(如SHA256)
- 跟踪内存中的明文和密文
- 注意输入验证和加密之间的逻辑
-
爆破优化:
- 缩小字符集范围(如先尝试小写字母)
- 利用已知flag格式("flag{"开头)
- 并行计算加速爆破过程
通过这道题目,可以全面锻炼逆向分析、加密算法理解和CTF解题的综合能力。