pwnable.kr第二遍---random

>>>>>random
1.是否需要编写脚本
重复执行很多次,并令key=0
当random的值为0xdeadbeef时,即可拿到flag


2.于是编写脚本....no


3.rand()与srand()
rand()是伪随机数生成器,如果没有设置种子,默认每次的种子数为1,每次执行的结果是相同的,所以random=rand()的结果是确定的
而srand()相当于给rand()函数设置种子,使得每次rand()的种子不同,从而生成不同的随机数


在一个进程中多次调用Rand()是不同的数字
但是在两个进程中分别调用两次rand()就是两个相同的数字


3.gdb断点执行程序
GDB十分钟教程
http://blog.csdn.net/liigo/article/details/582231/


gdb file:指定对某一个file进行gdb调试
b 8:在第8行处下断点
b *main
b main:在函数处下断点
b *0xabcdef:在某地址处下断点;注意前边的地址符
d [编号]:删除断点


r:运行
i:info的缩写;查看信息;i r:查看寄存器的信息


4.此题思路为:
首先对可执行文件gdb,反汇编查看main函数的汇编代码:disassem main
找到rand()方法的地址,然后打断点:b *0xabcdef(不是真实地址)
执行代码:r
程序在断点处中断,此时查看寄存器的信息:i r(info registers)
知道rand()函数的返回值是在rax中存放,查看rax的值即为此次rand()值
"若 a^b=c,则a^c=b",可以计算出key=random^0x...,即可计算出key值


5.什么反汇编?反编译。。。
反汇编(v)是将机器码转化为汇编代码或者高级语言的过程,低级转高级。
编译(v)将高级语言程序编译成机器码,高级转低级。
反向编译(v)机器码转化为高级程序语言,低级转高级。
汇编(n)汇编语言是一种低级语言
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值