Angr安装与使用之使用篇(一)

19 篇文章 4 订阅
16 篇文章 1 订阅

针对angr提供的练习题,现在进行求解00_angr_find,它是关于输入密码的问题,需要使用angr求解出正确密码。

参考博客点这里

#1 创建项目
project = angr.Project(“00_angr_find”)
#2 通过entry_state()创建一个默认初始状态,这个状态是为了告诉angr该从哪里开始
initial_state = project.factory.entry_state()  

查看当前initial_state的值,为0x8048450。
在这里插入图片描述
使用IDA查看地址0x8048450处于00_angr_find的什么位置。
在这里插入图片描述
可以看出,0x8048450对应00_angr_find的_start位置。

#3 创建模拟管理器Simulation Managers
simulation = project.factory.simgr(initial_state)

#4 开始执行直到到达希望的解决方案或者探索完所有的可能的路径
# 0x0804867D为希望得到的输出的虚拟地址
simulation.explore(find=0x0804867D)

#5 如果找到则生成simulation.found,可以打印出这个状态。
if simulation.found:   #检查是否发现了解决方案
        solution_state = simulation.found[0]
        print(solution_state.posix.dumps(sys.stdin.fileno()))  #代表该状态执行路径的所有输入
    else:
        raise Exception('Cannot find')

其中,simulation.found的内容如下所示。
在这里插入图片描述
在IDA中查看0x0804867D,如下所示。
在这里插入图片描述
可以看出,绿框部分0x0804867D对应call _puts,就是我们需要求解的关键路径,而红框部分0x0804866B也对应call _puts,angr却未求解。这是因为指向此基本块的红箭头表示不会执行此路径,因此直接忽略即可。

import angr
import sys
def main(argv): 
    path_to_binary = '00_angr_find' 
    project = angr.Project(path_to_binary)   
    initial_state = project.factory.entry_state()  
    simulation = project.factory.simgr(initial_state)   
    print_good_address = 0x0804867D   
    simulation.explore(find=print_good_address)
    if simulation.found:  
        solution_state = simulation.found[0]
        print(solution_state.posix.dumps(sys.stdin.fileno())) 
    else:
        raise Exception('Cannot find')

if __name__ == '__main__':
    main(sys.argv)

下面验证实验结果
执行刚刚写好的程序,保存为scaffold00.py,并将其与00_angr_find放于同一文件夹中,具体如下图所示。
在这里插入图片描述
再执行00_angr_find,然后需要我们输入angr刚刚求解出的密码即JXWVXRKX,结果为Good Job。
在这里插入图片描述
至此,求解00_angr_find已全部完成。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值