CTF

BUUCTF XOR

Posted on 2020-01-23,2 min read


很简单的一题。用户输入是V6

global是加密的flag。看下值。刚开始搞逆向。看到的都是整整齐齐的0x多少多少。没见过字符串挤在一起的。

在18行。用strncmp比较。
对于用户输入
for循环33次。但是i的初始值为1
假设第一次循环。i=1
密文的第二个值和第一个进行异或
密文的第三个值和第二个进行异或
依次进行
下面写脚本:

a=['f',10,'k',12,'w','&','O','.','@',17,'x',13,'Z',';','U',17,'p',25,'F',31,'v','"','M','#','D',14,'g',6,'h',15,'G','2','O']
for i in range(34):
    try:
        a[i]=ord(a[i])
    except:
        pass
data=''
for i in range(1,33):
    data+=chr(a[i]^a[i-1])
print('f'+data)

首先。将字符串都提取出来。定义在一个数组里。由于要进行异或。a[i]可能是数字。也可能是字符。如果将数字用ord转换为数字。会报错。所以加了一个异常处理。如果报错。就跳过
没报错。就将字符转换为ascii码。
得到一个都是数字的列表
然后将其依次异或。得到flag
由于f没有被异或。在最后flag开头还缺少一个f。加上即可

下一篇: 安恒元旦月赛逆向--扫雷→