首先这题有挺多做法的,先从简单的说起吧,逆向做法,直接上脚本
key = "Do_you_know_why_my_teammate_Orange_is_so_angry???"
cipher = [7, 59, 25, 2, 11, 16, 61, 30, 9, 8, 18, 45, 40, 89, 10, 0, 30, 22, 0, 4, 85, 22, 8, 31, 7, 1, 9, 0, 126, 28, 62, 10, 30, 11, 107, 4, 66, 60, 44, 91, 49, 85, 2, 30, 33, 16, 76, 30, 66]
i=0
flag=""
while(i<len(key)):
c=ord(key[i])^cipher[i]
flag+=chr(c)
i+=1
print flag
第二种常见的pwn做法,gdb调试找password,然后输入magic
首先下断点下到输入magic之前(即0x8048712),由gdb分析可知,ebp-0x80存放的是password,ebp-0x7c存放的是输入的magic,那么我们可以在输入magic之前查看password的值,并输入同样的数给magic
这里看到password的值是1011303426,于是我们输入这个数
第三种做法也是看网上wp的,就是把程序跳转的命令给nop掉,让程序始终执行输出flag,不过对于一般的pwn题,这种解法并没有用,这里也只是熟练一下ida的功能
把上面这个代码nop掉
最后变成这样就行了
运行一下,效果如图