用IDA载入,找到main函数,按F5查看伪代码
其中sub_4007C0为
sub_4007F0为
经分析可知,flag为经过处理的v7和v8异或所得。v8已经给出,重点在v7的处理上。因为是新手第一次遇到这种情况,在网上查找资料后,得知v7是long long int型,处理方式是等价于将v7转换成十六进制再转换成字符串。注意,处理顺序是从低地址到高地址。
最后,贴出脚本
a = 'harambe'
b = ':"AL_RT^L*.?+6/46'
flag = ''
for i in range(len(b)):
temp = ord(a[i % 7]) ^ ord(b[i])
flag += chr(temp)
print(flag)