2025ISCC线下关卡题逆向wp
字数 1315 2025-11-07 08:41:54
ISCC 2025 线下关卡逆向分析教学文档
题目概述
本题目是一个包含多层保护的逆向工程挑战,主要涉及PE加载器、反调试技术、TEA加密算法等知识点。成功解决需要掌握动态调试、内存DUMP、密码学算法逆向等技能。
解题步骤详解
第一阶段:识别与脱壳
1. 识别保护机制
- 程序使用了PELoader技术进行加壳保护
- 所有计算操作都通过变量v29进行,然后传递给v7
- v7作为参数传入核心函数,这是典型的Loader特征
2. 动态调试与Dump策略
推荐工具:x64dbg或Ollydbg配合IDAPython
Dump时机:在PELoader执行完成前进行Dump,此时原始PE已解密在内存中但尚未被加载执行
Dump方法:
# IDAPython示例脚本
start_address = 0x00401000 # 示例起始地址
dump_size = 0x4C000 # 通过分析IMAGE结构获得的大小
with open("dumped_pe.exe", "wb") as f:
for i in range(dump_size):
byte_value = idc.get_wide_byte(start_address + i)
f.write(bytes([byte_value]))
验证方法:使用PE分析工具检查Dump文件的完整性,确保DOS头、PE头和节表完整
第二阶段:绕过反调试
反调试特征
- 程序包含明显的反调试检测代码
- 建议在调试器中设置断点跳过这些检测逻辑
- 常见的反调试技术包括:
- IsDebuggerPresent检测
- 时间差检测
- 硬件断点检测
绕过策略
- 使用ScyllaHide等反反调试插件
- 手动修改关键跳转指令
- 在检测函数返回前修改返回值
第三阶段:算法分析与逆向
输入格式分析
- 程序接受32字节长度的输入
- 支持两种输入格式:
- 直接字符输入(如字符串)
- 十六进制格式(需要添加"hex:"前缀)
加密算法识别
算法特征分析表明这是TEA(Tiny Encryption Algorithm)的变种:
算法特征:
// 类似TEA的加密结构
for (int i = 0; i < rounds; i++) {
d1 += ((d3 << 4) + key1) ^ (d3 + sum) ^ ((d3 >> 5) + key2);
d3 += ((d1 << 4) + key3) ^ (d1 + sum) ^ ((d1 >> 5) + key4);
}
关键加密逻辑
-
数据流分析:
- d4与d1进行异或操作,其中d1由d3生成
- d3的d1参与由上一轮d4产生的计算
- 形成d1-d3和d1-d4的配对关系
-
逆向工程策略:
- 从加密过程的最后开始向前逆向推导
- 以组为单位处理数据流
- 重建加密轮的逆向计算
解密实现
解密过程需要反向执行加密操作:
def decrypt_tea_variant(ciphertext, key):
# 实现逆向TEA算法
# 从后向前处理数据块
# 反转每一轮的加密操作
pass
第四阶段:获取Flag
关键数据
通过逆向分析得到十六进制值:
4D617472796F73686B61323032352121
转换结果:
- ASCII解码:
Matryoshka2025!! - 这是程序的预期输入或关键数据
验证流程
- 运行脱壳后的可执行文件
- 输入获得的字符串:
Matryoshka2025!! - 程序输出最终的flag
技术要点总结
1. 加壳识别技巧
- 观察入口点代码特征
- 分析内存分配和代码解密模式
- 识别Loader的典型行为模式
2. 动态分析最佳实践
- 选择正确的Dump时机
- 验证Dump文件的完整性
- 结合静态和动态分析
3. 密码学算法逆向
- 识别常见的加密算法模式
- 理解数据流依赖关系
- 设计有效的逆向算法
4. 输入处理注意事项
- 注意输入长度限制(32字节)
- 区分字符和十六进制输入模式
- 正确处理格式前缀
扩展学习建议
- 深入学习PE结构:理解Windows可执行文件格式
- 掌握更多加壳技术:UPX、ASPack、VMProtect等
- 研究反调试技术:提升逆向工程能力
- 密码学知识:AES、DES、RSA等常见算法
通过本案例的完整分析,可以系统掌握Windows平台逆向工程的核心技能,为后续更复杂的挑战打下坚实基础。