XYCTF2025RE(部分解)
字数 1603 2025-08-30 06:50:28
XYCTF2025 RE逆向工程部分题目解析与教学文档
目录
签到题 - VBS逆向与RC4加密
题目分析
这是一个VBScript逆向题目,主要考察RC4加密算法的识别与解密。
解题步骤
-
提取VBS代码:
- 使用Visual Studio或其他文本编辑器打开VBS文件
- 提取其中的脚本内容
-
分析加密逻辑:
- 识别出使用的是RC4加密算法
- 密钥为"rc4key"
- 密文为:
90df4407ee093d309098d85a42be57a2979f1e51463a31e8d15e2fac4e84ea0df622a55c4ddfb535ef3e51e8b2528b826d5347e165912e99118333151273cc3fa8b2b3b413cf2bdb1e8c9c52865efc095a8dd89b3b3cfbb200bbadbf4a6cd4
-
解密方法:
- 使用在线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中间表示的逆向能力。
解题步骤
-
编译bc文件:
clang challenge.bc -o challenge -
逆向分析:
- 使用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)
- 发现密文为16进制数字:
-
解密方法:
- 直接调用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求解
题目分析
这是一个需要动态调试和约束求解的逆向题目。
解题步骤
-
动态调试:
- 使用IDA Pro打开可执行文件
- 定位到主要加密逻辑(sub_1000019B0函数)
- 使用IDA的调试功能逐步执行分析
-
加密逻辑分析:
- flag[index]与inc变量进行加减乘除等运算
- 每个字符经过一系列数学运算后与预期值比较
-
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())
-
修正结果:
- 原始解密结果:
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比赛中非常常见且实用。