针对angr提供的练习题,现在进行求解04_angr_symbolic_stack,需要使用angr求解出正确密码。但是需要提供排除地址以减少路径求解时间。

参考博客

具体代码如下所示

import angr
import claripy
import sysdef main(argv):path_to_binary = argv[1]project = angr.Project(path_to_binary)start_address = 0x08048697initial_state = project.factory.blank_state(addr=start_address)initial_state.regs.ebp = initial_state.regs.esp   #初始化ebp、esppassword0 = claripy.BVS('password0', 32)password1 = claripy.BVS('password1', 32)padding_length_in_bytes = 8  # :integer    #一个变量占4个空间,所以两个就是8initial_state.regs.esp -= padding_length_in_bytes     #模拟scanf时栈的情况(剔除了对空间的浪费,即只开辟了两个变量的空间)initial_state.stack_push(password0)  # :bitvector (claripy.BVS, claripy.BVV, claripy.BV)initial_state.stack_push(password1)#至此对scanf的模拟过程就完成了simulation = project.factory.simgr(initial_state)def is_successful(state):stdout_output = state.posix.dumps(sys.stdout.fileno())return b'Good Job.' in stdout_outputdef should_abort(state):stdout_output = state.posix.dumps(sys.stdout.fileno())return b'Try again.' in stdout_outputsimulation.explore(find=is_successful, avoid=should_abort)if simulation.found:solution_state = simulation.found[0]solution0 = solution_state.solver.eval(password0)solution1 = solution_state.solver.eval(password1)print('{}---{}'.format(solution0,solution1))else:raise Exception('Could not find the solution')if __name__ == '__main__':main(sys.argv)

开始地址为0x08048697,是因为上一行’add esp,10h’的作用是清理scanf的栈空间。

下面验证实验结果
执行刚刚写好的程序,保存为scaffold04.py,并将其与04_angr_symbolic_stack放于同一文件夹中,具体如下图所示。

再执行04_angr_symbolic_stack,然后需要我们输入angr刚刚求解出的密码,结果为Good Job。

至此,求解04_angr_symbolic_stack已全部完成。

Angr安装与使用之使用篇(五)相关推荐

  1. 黑群辉安装php,黑群晖从装机到使用全过程 篇五:群晖安装VirtualBox虚拟机

    黑群晖从装机到使用全过程 篇五:群晖安装VirtualBox虚拟机 2017-10-13 21:29:39 33点赞 312收藏 28评论 经常喜欢折腾电脑的童鞋一定知道虚拟机,在自己的电脑上可以安装 ...

  2. 为啥linux分区是nvme0n1,NAS 篇五:尝试达成最终目标: 黑裙+万兆网卡+Nvme 存储空间的实现与测试...

    NAS 篇五:尝试达成最终目标: 黑裙+万兆网卡+Nvme 存储空间的实现与测试 2020-01-18 18:49:23 46点赞 248收藏 80评论 创作立场声明:1. 本系列文章讨论NAS与局域 ...

  3. 国内外物联网平台初探(篇五:机智云平台)

    国内外物联网平台初探(篇五:机智云平台) ------ [导读]------ 物联网智库将在每周五下午的第二篇文章推送由马智先生研究撰写的系列文章--<国内外物联网平台初探>. 物联网智库 ...

  4. 硬盘底座linux,微客智品 篇五十二:机械硬盘如何安放?用奥睿科单盘位移动硬盘底座助力新玩法...

    微客智品 篇五十二:机械硬盘如何安放?用奥睿科单盘位移动硬盘底座助力新玩法 2020-01-07 15:36:58 1点赞 10收藏 30评论 随着新一代M.2硬盘的流行与普及,3.5寸机械硬盘愈发变 ...

  5. ibm x201 怎么清理内部_维修小技巧 篇五:ThinkPadX201i拆机换散热风扇清灰教程

    维修小技巧 篇五:ThinkPadX201i拆机换散热风扇清灰教程 2020-11-25 21:45:44 16点赞 14收藏 42评论 创作立场声明:拆装有风险.拆装有风险.拆装有风险,欢迎收藏,点 ...

  6. 阅读书源最新2020在线导入_书源篇五

    书源篇五 爱阅书香语 昨晚半夜发的书源,竟然把另一位同学的书源仓库给忘了,我的失误啊,已经自罚酒一杯,喝完再干三杯. 新的书源仓库分别是『Liquor030』及『Mxy』同学,写法很厉害,虽然我设计了 ...

  7. ds存储查看 linux,我的NAS我的地盘 篇五:群晖NAS软件介绍与应用之DS Audio篇

    我的NAS我的地盘 篇五:群晖NAS软件介绍与应用之DS Audio篇 2019-03-01 14:11:20 35点赞 567收藏 51评论 前言 继续昨天的话题,前文介绍了群晖下的视频播放管理器D ...

  8. 蜗牛星际做无盘服务器,星际蜗牛 篇五:蜗牛星际 —— 黑群晖二合一系统扩充系统分区方法...

    星际蜗牛 篇五:蜗牛星际 -- 黑群晖二合一系统扩充系统分区方法 2019-07-12 14:28:49 67点赞 429收藏 96评论 因为改装和换硬件(固态+电源),所以重新安装的二合一系统,硬盘 ...

  9. 详解centos7虚拟机安装elasticsearch5.0.x-安装篇(自己做测试了,es启动有错误可以在这上面找)

    本篇文章主要介绍了centos7虚拟机安装elasticsearch5.0.x-安装篇,具有一定的参考价值,感兴趣的小伙伴们可以参考一下. centos7虚拟机安装elasticsearch5.0.x ...

  10. Android日志[进阶篇]五-阅读错误报告

    Android日志[进阶篇]一-使用 Logcat 写入和查看日志 Android日志[进阶篇]二-分析堆栈轨迹(调试和外部堆栈) Android日志[进阶篇]三-Logcat命令行工具 Androi ...

最新文章

  1. c语言常用数据类型转换整理
  2. ISSCC 2021前瞻,智能传感器和IoT端是大势所趋 | AI日报
  3. LineatLayout设置背景为.9图后产生位移
  4. dubbo与springboot的集成
  5. Go案例说明defer panic recover
  6. rabbitmq消息重回队列
  7. 高通首席技术官:5G+AI是至关重要的组合
  8. python能查询MySQL视图_Django框架使用mysql视图操作示例
  9. uc浏览器邀请码_阿里云Teambition网盘收到邀请码,上传下载不限速!!!
  10. pytorch之创建数据集
  11. 关于PMP考试的流程,很实用
  12. 单设施布置方法-精确重心法
  13. 「秘」那些管UI小姐姐要来的网站
  14. android 停止服务方法,Android编程实现开始及停止service的方法
  15. mysql中数据处理小技巧
  16. java调用import了第三方库的python脚本为啥就是出不来结果嘞
  17. 【AIOT】3-1 物联网项目必备功能模块
  18. RabbitMQ基础篇 (一)
  19. Android百度AI植物识别教程,微信开发+百度AI学习:植物识别(示例代码)
  20. centOS之php-fpm不可用

热门文章

  1. [ZT]用CSC.exe来编译Visual C#的代码文件,解释CSC参数和开关的具体作用
  2. 基于springboot的mysql实现动态切换数据源
  3. Linux系统Ubuntu下部署Tomcat
  4. systemd (简体中文)
  5. Hibernate一对多双向、单向
  6. 练习1,从文件到数据库
  7. 对Spring 容器管理事务支持的总结
  8. prototype中文参数乱码解决方案
  9. eclipse如何导入okhttp 2.x源码
  10. java ognl 值栈_ognl-值栈基本操作