知识点
rand()函数,
本题的关键!!!这个函数本身就是一个伪随机函数,每次运行这个程序,初始化后这个值都相同。
使用gdb调试
看下菜鸟教程中对rand()的解释
rand() 的内部实现是用线性同余法做的,它不是真的随机数,因其周期特别长,故在一定的范围里可看成是随机的。
rand()返回一随机数值的范围在 0 至 RAND_MAX间。RAND_MAX的范围最少是在 32767 之间(int)。用unsigned int 双字节是 65535,四字节是 4294967295的整数范围。0~RAND_MAX 每个数字被选中的机率是相同的。
用户未设定随机数种子时,系统默认的随机数种子为1。
rand()产生的是伪随机数字,每次执行时是相同的; 若要不同, 用函数srand()初始化它。
异或
异或函数也是可逆的,a^b = c ,a = c^b.
因此,需要输入的key就是0x6b8b4567^0xdeadbeef=0xb526fb88
题外
安装了ssh服务器
安装ssh-client命令:
sudo apt-get install openssh-client
安装ssh-server命令:
sudo apt-get install openssh-server
安装完成以后,先启动服务:
sudo /etc/init.d/ssh start
启动后,可以通过“ps -e|grep ssh”查看是否正确启动。
解题
1 |
|
观察逻辑,发现需要用户输入一个key,这个key异或random要等于0xdeadbeef,而这个random的值来源于rand()函数,这就牵扯到rand()的知识了。(见上述知识点)
用gdb调试,看下random的值(大佬的截图)
得到flag
https://www.jianshu.com/p/68118fb11ec5
https://www.cnblogs.com/p4nda/p/7122275.html