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异或,只要能够判断出来加密方法即可完成题目

许可协议: CC BY-SA 4.0 。转载请注明出处,允许商用;改编/转载须以相同许可(CC BY-SA 4.0)发布。如有问题请联系我。