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);
}

关键加密逻辑

  1. 数据流分析

    • d4与d1进行异或操作,其中d1由d3生成
    • d3的d1参与由上一轮d4产生的计算
    • 形成d1-d3和d1-d4的配对关系
  2. 逆向工程策略

    • 从加密过程的最后开始向前逆向推导
    • 以组为单位处理数据流
    • 重建加密轮的逆向计算

解密实现

解密过程需要反向执行加密操作:

def decrypt_tea_variant(ciphertext, key):
    # 实现逆向TEA算法
    # 从后向前处理数据块
    # 反转每一轮的加密操作
    pass

第四阶段:获取Flag

关键数据

通过逆向分析得到十六进制值:
4D617472796F73686B61323032352121

转换结果

  • ASCII解码:Matryoshka2025!!
  • 这是程序的预期输入或关键数据

验证流程

  1. 运行脱壳后的可执行文件
  2. 输入获得的字符串:Matryoshka2025!!
  3. 程序输出最终的flag

技术要点总结

1. 加壳识别技巧

  • 观察入口点代码特征
  • 分析内存分配和代码解密模式
  • 识别Loader的典型行为模式

2. 动态分析最佳实践

  • 选择正确的Dump时机
  • 验证Dump文件的完整性
  • 结合静态和动态分析

3. 密码学算法逆向

  • 识别常见的加密算法模式
  • 理解数据流依赖关系
  • 设计有效的逆向算法

4. 输入处理注意事项

  • 注意输入长度限制(32字节)
  • 区分字符和十六进制输入模式
  • 正确处理格式前缀

扩展学习建议

  1. 深入学习PE结构:理解Windows可执行文件格式
  2. 掌握更多加壳技术:UPX、ASPack、VMProtect等
  3. 研究反调试技术:提升逆向工程能力
  4. 密码学知识:AES、DES、RSA等常见算法

通过本案例的完整分析,可以系统掌握Windows平台逆向工程的核心技能,为后续更复杂的挑战打下坚实基础。

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