pwnable从入门到放弃第七题。

ssh random@pwnable.kr -p2222 (pw:guest)
目前为止做的最快的一道题...
#include <stdio.h> int main(){ unsigned int random; random = rand(); // random value! //key = 0x6b8b4567 unsigned int key=0; scanf("%d", &key); if( (key ^ random) == 0xdeadbeef ){ printf("Good!\n"); system("/bin/cat flag"); return 0; } printf("Wrong, maybe you should try 2^32 cases.\n"); return 0; }
瞬间就看见了rand()函数,这个函数本身就是一个伪随机函数,没次运行这个程序,初始化后这个值都相同,用gdb跟踪了两次也都一样。
都是0x6b8b4567,。
异或函数也是可逆的,a^b = c ,a = c^b.
因此,需要输入的key就是0x6b8b4567^0xdeadbeef

就是0xb526fb88
但是需要注意的就是scanf("%d")只能接收十进制数,就用calc转换一下:

输入:

本文解析了pwnable从入门到放弃第七题的具体解决方法,通过分析rand()函数的特性,利用gdb进行跟踪发现每次运行程序时的随机数为固定值0x6b8b4567。通过异或运算的可逆性,计算出正确的key值为0xb526fb88。
2121

被折叠的 条评论
为什么被折叠?



