angr的一道题

第一步,把文件下载下来进行解压缩,解出来的文件 ,文件名为re3.ppp 。

可以把它复制到linux 系统中(我这里直接用kali 的),查看得知它是一个ELF 32位可执行程序。如图1所示。

图1 查看re3.ppp的文件类型

第二步,将re3.ppp  改为可执行。然后执行一下试试。发现它真的是一个需要输入四位数字的小程序,如果输错了数字程序出现wrong的反馈,如图2所示。

图2 执行re3.ppp

第三步,将re3.ppp 用IDA (32位)打开,可查看到它的程序结构,如图3所示。

图三,re3.ppp的程序结构。

第四步,在程序结构上。点击最上面的,我们可来到main程序。如图4所示。右键点击后,可以转到此程序的入口,也就是起始,记下它的0x080484E4 这个地址。

图四,main函数

 

 

图5 text view显示地址

第五步,回到图3的程序结构,找到程序中的两个分支结构,点击拖动一番以后,主窗体中显示为如图6所示。注意到其中的两个词“correct”和“wrong” 。显然,得使程序向correct 方向 走。用同样的text view 的方法。结果如图 7所示。分别记下 它们的入口点 ,前者为0x0804868B,后者为0x0804869E,前者是我们想让程序去的,而后者是我们想避免程序去的。   

 

图6 程序的两个分支

图7 两个分支入口点

第六步,接下去,就是符号执行的方法了,具体编写一个python代码,代码如下:

import angr

import claripy

import binascii

p=angr.Project("re3.ppp")

state=p.factory.blank_state(addr=0x080484E4)

sm=p.factory.simgr(state)

sm.explore(find=0x0804868B,avoid=0x0804869E)

print(sm.found[0].posix.dumps(0))

 

解释部分:

import angr

因为要使用到angr所以,预先import ,注意在使用之前,先pip install angr

import claripy

此句总是配合着angr使用。

import binascii

二进制编码转换。

p=angr.Project("re3.ppp")

re3.ppp创建工程

state=p.factory.blank_state(addr=0x080484E4)

此为main函数的入口

sm=p.factory.simgr(state)

sm.explore(find=0x0804868B,avoid=0x0804869E)

执行时避免后者地址,发现前面地址。

print(sm.found[0].posix.dumps(0))

输出

第七步,执行以上python程序, 得到结果9563  ,如图8所示。

图8 程序执行结果

程序若改成:

import angr
import claripy
import binascii
p=angr.Project("re3.ppp")
state=p.factory.entry_state()
sm=p.factory.simulation_manager(state)
sm.explore(find=0x0804868B,avoid=0x0804869E)
print(sm.found[0].posix.dumps(0))

执行效果也一样。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值