XYCTF2025RE(部分解)
字数 1603 2025-08-30 06:50:28

XYCTF2025 RE逆向工程部分题目解析与教学文档

目录

  1. 签到题 - VBS逆向与RC4加密
  2. Dragon - LLVM bc文件逆向
  3. Moon - Python pyd文件逆向
  4. Lake - IDA动态调试与Z3求解

签到题 - VBS逆向与RC4加密

题目分析

这是一个VBScript逆向题目,主要考察RC4加密算法的识别与解密。

解题步骤

  1. 提取VBS代码

    • 使用Visual Studio或其他文本编辑器打开VBS文件
    • 提取其中的脚本内容
  2. 分析加密逻辑

    • 识别出使用的是RC4加密算法
    • 密钥为"rc4key"
    • 密文为:90df4407ee093d309098d85a42be57a2979f1e51463a31e8d15e2fac4e84ea0df622a55c4ddfb535ef3e51e8b2528b826d5347e165912e99118333151273cc3fa8b2b3b413cf2bdb1e8c9c52865efc095a8dd89b3b3cfbb200bbadbf4a6cd4
  3. 解密方法

    • 使用在线RC4解密工具
    • 或者编写解密脚本:
      from Crypto.Cipher import ARC4
      
      key = b"rc4key"
      ciphertext = bytes.fromhex("90df4407ee093d309098d85a42be57a2979f1e51463a31e8d15e2fac4e84ea0df622a55c4ddfb535ef3e51e8b2528b826d5347e165912e99118333151273cc3fa8b2b3b413cf2bdb1e8c9c52865efc095a8dd89b3b3cfbb200bbadbf4a6cd4")
      
      cipher = ARC4.new(key)
      plaintext = cipher.decrypt(ciphertext)
      print(plaintext.decode())
      

最终Flag

flag{We1c0me_t0_XYCTF_2025_reverse_ch@lleng3_by_th3_w@y_p3cd0wn's_chall_is_r3@lly_gr3@t_&_fuN!}

Dragon - LLVM bc文件逆向

题目分析

这是一个LLVM bitcode(.bc)文件逆向题目,考察LLVM中间表示的逆向能力。

解题步骤

  1. 编译bc文件

    clang challenge.bc -o challenge
    
  2. 逆向分析

    • 使用IDA 64位打开生成的可执行文件
    • 分析发现使用了CRC64算法
  3. 算法识别

    • 在IDA中定位到CRC64计算函数
    • 可能需要查找CRC64的常数表或特征代码

最终Flag

flag{LLVM_1s_Fun_Ri9h7?}

Moon - Python pyd文件逆向

题目分析

这是一个Python扩展模块(.pyd)逆向题目,需要分析Python编译的二进制模块。

解题步骤

  1. 逆向pyd文件

    • 使用IDA或Ghidra打开pyd文件
    • 搜索字符串定位到加密部分
  2. 加密分析

    • 发现密文为16进制数字:426b87abd0ceaa3c58761bbb0172606dd8ab064491a2a76af9a93e1ae56fa84206a2f7
    • 分析出是异或加密(XOR)
  3. 解密方法

    • 直接调用pyd文件中的解密函数
    • 或者编写解密脚本:
      ciphertext = bytes.fromhex("426b87abd0ceaa3c58761bbb0172606dd8ab064491a2a76af9a93e1ae56fa84206a2f7")
      
      # 爆破密钥(示例)
      for key in range(256):
          plaintext = bytes([b ^ key for b in ciphertext])
          if b"flag" in plaintext:
              print(f"Key: {key}, Plaintext: {plaintext}")
              break
      

注意事项

  • 可能需要动态分析Python调用pyd模块的过程
  • 可以使用Python的inspect模块查看pyd导出的函数

Lake - IDA动态调试与Z3求解

题目分析

这是一个需要动态调试和约束求解的逆向题目。

解题步骤

  1. 动态调试

    • 使用IDA Pro打开可执行文件
    • 定位到主要加密逻辑(sub_1000019B0函数)
    • 使用IDA的调试功能逐步执行分析
  2. 加密逻辑分析

    • flag[index]与inc变量进行加减乘除等运算
    • 每个字符经过一系列数学运算后与预期值比较
  3. Z3求解

    • 使用Z3定理证明器建立方程并求解
    • 示例脚本:
      from z3 import *
      
      s = Solver()
      flag = [BitVec(f'flag_{i}', 8) for i in range(40)]  # 假设flag长度40
      
      # 添加约束条件(根据实际逆向结果)
      s.add(flag[0] == 0x63)
      s.add(flag[1] == 0x69)
      # ... 添加所有已知的约束
      
      if s.check() == sat:
          m = s.model()
          result = bytes([m[flag[i]].as_long() for i in range(40)])
          print(result.decode())
      
  4. 修正结果

    • 原始解密结果:0x63,0x69,0x55,0x73,...
    • 转换为ASCII后可能需要手动调整某些字符

最终Flag

修正后的flag:
flag{L3@rn1ng_1n_0ld_sch00l_@nd_g3t_j0y}

总结

本教学文档涵盖了XYCTF2025逆向工程部分的四个题目,涉及:

  1. VBS逆向与RC4加密
  2. LLVM bitcode逆向
  3. Python pyd文件分析
  4. 动态调试与Z3约束求解

每种题型都展示了不同的逆向技术和方法,建议学习者针对每种技术进行深入练习,特别是动态调试和约束求解在实际CTF比赛中非常常见且实用。

XYCTF2025 RE逆向工程部分题目解析与教学文档 目录 签到题 - VBS逆向与RC4加密 Dragon - LLVM bc文件逆向 Moon - Python pyd文件逆向 Lake - IDA动态调试与Z3求解 签到题 - VBS逆向与RC4加密 题目分析 这是一个VBScript逆向题目,主要考察RC4加密算法的识别与解密。 解题步骤 提取VBS代码 : 使用Visual Studio或其他文本编辑器打开VBS文件 提取其中的脚本内容 分析加密逻辑 : 识别出使用的是RC4加密算法 密钥为"rc4key" 密文为: 90df4407ee093d309098d85a42be57a2979f1e51463a31e8d15e2fac4e84ea0df622a55c4ddfb535ef3e51e8b2528b826d5347e165912e99118333151273cc3fa8b2b3b413cf2bdb1e8c9c52865efc095a8dd89b3b3cfbb200bbadbf4a6cd4 解密方法 : 使用在线RC4解密工具 或者编写解密脚本: 最终Flag flag{We1c0me_t0_XYCTF_2025_reverse_ch@lleng3_by_th3_w@y_p3cd0wn's_chall_is_r3@lly_gr3@t_&_fuN!} Dragon - LLVM bc文件逆向 题目分析 这是一个LLVM bitcode(.bc)文件逆向题目,考察LLVM中间表示的逆向能力。 解题步骤 编译bc文件 : 逆向分析 : 使用IDA 64位打开生成的可执行文件 分析发现使用了CRC64算法 算法识别 : 在IDA中定位到CRC64计算函数 可能需要查找CRC64的常数表或特征代码 最终Flag flag{LLVM_1s_Fun_Ri9h7?} Moon - Python pyd文件逆向 题目分析 这是一个Python扩展模块(.pyd)逆向题目,需要分析Python编译的二进制模块。 解题步骤 逆向pyd文件 : 使用IDA或Ghidra打开pyd文件 搜索字符串定位到加密部分 加密分析 : 发现密文为16进制数字: 426b87abd0ceaa3c58761bbb0172606dd8ab064491a2a76af9a93e1ae56fa84206a2f7 分析出是异或加密(XOR) 解密方法 : 直接调用pyd文件中的解密函数 或者编写解密脚本: 注意事项 可能需要动态分析Python调用pyd模块的过程 可以使用Python的 inspect 模块查看pyd导出的函数 Lake - IDA动态调试与Z3求解 题目分析 这是一个需要动态调试和约束求解的逆向题目。 解题步骤 动态调试 : 使用IDA Pro打开可执行文件 定位到主要加密逻辑(sub_ 1000019B0函数) 使用IDA的调试功能逐步执行分析 加密逻辑分析 : flag[ index ]与inc变量进行加减乘除等运算 每个字符经过一系列数学运算后与预期值比较 Z3求解 : 使用Z3定理证明器建立方程并求解 示例脚本: 修正结果 : 原始解密结果: 0x63,0x69,0x55,0x73,... 转换为ASCII后可能需要手动调整某些字符 最终Flag 修正后的flag: flag{L3@rn1ng_1n_0ld_sch00l_@nd_g3t_j0y} 总结 本教学文档涵盖了XYCTF2025逆向工程部分的四个题目,涉及: VBS逆向与RC4加密 LLVM bitcode逆向 Python pyd文件分析 动态调试与Z3约束求解 每种题型都展示了不同的逆向技术和方法,建议学习者针对每种技术进行深入练习,特别是动态调试和约束求解在实际CTF比赛中非常常见且实用。