直接放入IDA中定位Main函数进行分析:
该程序的原理是:将我们输入的变量进行异或操作后与Global进行比较前0x21(对应十进制的33)位是否相同,如果相同则输出Success,反正则输出Failed;
我们这里可以看到程序先要求我们输入一个长度为33的变量,如果不满足则跳转到LABEL_7
因此我们需要满足的第一个条件就是变量长度为33;
然后我们可以看到程序对我们输入的变量进行了XOR(异或)的操作,具体操作代码如下:
for ( i = 1; i < 33; ++i ){
b[i] ^= b[i-1]
}
这里代码的意思是:变量B的每一位与前一位进行异或,然后得到一个新的变量;
因此我们需要找到Global的值,然后将其每一位与前一位进行异或,并且从后往前进行操作,即可通过Global的值还原出,满足输出Success的变量B的值;
我们跳转到Global的地址处,选择Global然后按下Shift+e进行数据导出,我们选择导出格式为:Hex String (Spaced)
然后使用Python编写代码如下:即可取得Flag
key=[0x66,0x0A,0x6B,0x0C,0x77,0x26,0x4F,0x2E,0x40,0x11,0x78,0x0D,0x5A,0x3B,0x55,0x11,0x70,0x19,0x46,0x1F,0x76,0x22,0x4D,0x23,0x44,0x0E,0x67,0x06,0x68,0x0F,0x47,0x32,0x4F]
flag = ''
for i in range(len(key)-1,0,-1):
key[i] ^= key[i-1]
for i in range(len(key)):
flag += chr(key[i])
print(flag)
flag{QianQiuWanDai_YiTongJiangHu}