CTF笔记
[学习笔记]攻防世界—crypt
2025-10-23
•1 分钟•67 字逆向流程
下载附件

直接用IDA打开

找到main函数并进行反编译

用户输入v10,虽然初始化是32位,但是应该是22位数(下面的只判断了22位数)
我们翻翻函数,寻找一下有用的信息


看到了经典的256大循环,还有一个异或处理,判断应该是RC4加密,我们再看看判断方法中进行对比的数组byte_14013B000[i]

我们找到了密文,前面看起来像字符表的那一串字符应该是密钥,大概流程我们明白了:
用户输入22位的flag,先进行RC4加密,然后与0x22(十进制是34)进行异或后与其进行比对,现在我们可以尝试写脚本进行解密了
from Crypto.Cipher import ARC4
Key = "12345678abcdefghijklmnopqrspxyz"
Str = [0x9E, 0xE7, 0x30, 0x5F, 0xA7, 0x01, 0xA6, 0x53, 0x59, 0x1B, 0x0A, 0x20, 0xF1, 0x73, 0xD1, 0x0E, 0xAB, 0x09, 0x84,
0x0E, 0x8D, 0x2B]
a = []
flag = []
for i in range(0, 22):
a.append(Str[i] ^ 34)
flag = ARC4.new(bytes(Key,encoding="utf-8")).decrypt(bytes(a))
for i in range(0, len(Str)):
print(chr(flag[i]), end='')
运行代码,成功获得了flag

总结
这个题目考点就是RC4加密和xor异或,只要能够判断出来加密方法即可完成题目