攻防世界guess_num

Check一下,64位程序。Ida分析,程序主要内容就是输入名字>连续猜10次数字,猜错一次就gg,连续10次即可得到flag。

我们要猜的数字是由rand函数生成的,众所周知,计算机中的随机都是伪随机,如果观察足够多的长度,还是可以找到规律进而预测。rand函数生成数字是基于种子,只要种子选取相同,输出的随机数就相同。
随机数选取的种子的值seed在rbp-10h处, name的buf储存在在rbp-30h处,所以可以通过0x20个数据来将种子覆盖成一个我们自己输入的数。要注意的是由于题目本身是在linux下的,所以我们自己写的程序也要在linux下进行测试,不同的平台所产生的结果是不同的。编写rand函数需要c语言,要借助ctypes调用Linux中C标准动态库libc.so.6。参考https://www.cnblogs.com/yssjun/p/9960479.html,可得libc=cdll.LoadLibrary('/lib/x86_64-linux-gnu/libc.so.6')


浙公网安备 33010602011771号