查壳:
64位,进IDA:
进来后发现c++经常用的std,(当然用c++的也有可能不经常见),跟进伪代码,找输出:
有个判断跟进Human::~Human看看:
调用了一个方法,字符串又指向了name,跟进方法:off_4863D0:
发现存了一个基地址:跟进基地址:_ZN5Human9give_flagEv:
进入伪代码:
找到我们要拿的东西了,而且自身还在异或,看看flag里存放了啥:
既然异或,那么应该会有一个比较:查看它的调用:
果然不只一个调用,找到比较的调用方法:发现没有,再看看off_4863D0里边,发现是将异或后的直接拼接上去,那么写脚本吧:
Des = [0x44, 0x59, 0x59, 0x49, 0x5E, 0x4C, 0x71, 0x7E, 0x62, 0x63,
0x79, 0x55, 0x63, 0x79, 0x55, 0x44, 0x43, 0x59, 0x4B, 0x55,
0x78, 0x6F, 0x55, 0x79, 0x63, 0x6D, 0x64, 0x77]
flag = ''
for i in Des:
flag += chr(i ^ ord('\n'))
print(flag)
得到NSSCTF