[src = hackme] passthis
题目描述
You should be able to pass this
WP
直接IDA–>F5,得到一大段代码,仔细查看,有用的就是下面部分:
1 | printf("Let me check your flag: ", v9); |
其中v10这个数组就是flag,首先判断其首字母是不是‘F’,如果是的话进入循环,我们看到,需要输入的flag满足while的条件,然后才有机会挑战到LABEL_9,(即 goto LABEL_9;) 。所以关键是while里面的循环做了什么操作。其实可以看出,while的条件就是将byte_404040数组里面的每个字节跟flag数组V10的每个字节(在循环中被赋值给v6)进行XOR操作要求结果是0x87u。
所以根据XOR的性质,v6=byte_404040[v4]^0x87u即可,所以从程序的hex-view中把byte_404040数组的内容取出来,然后使用python写下面脚本:
1 | a=[0xC1,0xCB,0xC6,0xC0,0xFC,0xC9,0xE8,0xAB,0xA7,0xDE,0xE8,0xF2,0xA7,0xF4,0xEF,0xE8,0xF2,0xEB,0xE3,0xA7,0xE9,0xE8,0xF3,0xA7,0xF7,0xE6,0xF4,0xF4,0xA7,0xF3,0xEF,0xE2,0xA7,0xE1,0xEB,0xE6,0xE0,0xFA,0x00] |
运行输出flag。