angr学习笔记(13)(static_binary)
angr系列
00_angr_find
01_angr_avoid
02_angr_find_condition
03_angr_symbolic_registers
04_angr_symbolic_stack
05_angr_symbolic_memory
06_angr_symbolic_dynamic_memory
07_angr_symbolic_file
08_angr_constraints
09_angr_hooks
10_angr_simprocedures
13_angr_static_binary
文章目录
- angr系列
- 00_angr_find
- 01_angr_avoid
- 02_angr_find_condition
- 03_angr_symbolic_registers
- 04_angr_symbolic_stack
- 05_angr_symbolic_memory
- 06_angr_symbolic_dynamic_memory
- 07_angr_symbolic_file
- 08_angr_constraints
- 09_angr_hooks
- 10_angr_simprocedures
- 13_angr_static_binary
- 伪代码分析
- 脚本
- 验证
伪代码分析
(观察以上函数,都是利用静态链接编入文件,并非调用动态链接库,想要提高程序执行效率需要把它们利用内置的libc
函数进行替换)
angr
里头写好了很多内置的libc
函数,从而让我们用hook来提高符号执行的速度。
要知道更多的函数,可以访问下面的网址:
https://github.com/angr/angr/tree/master/angr/procedures/libc
找出静态链接的函数地址:
printf_addr=0x0804ED40scanf_addr=0x0804ED80strcmp_addr=0x08048280puts_addr=0x0804F350libc_start_main=0x08048D10
利用内置的libc
函数进行替换操作:
p.hook(printf_addr,angr.SIM_PROCEDURES['libc']['printf']())p.hook(scanf_addr,angr.SIM_PROCEDURES['libc']['scanf']())p.hook(strcmp_addr,angr.SIM_PROCEDURES['libc']['strcmp']())p.hook(puts_addr,angr.SIM_PROCEDURES['libc']['puts']())p.hook(libc_start_main,angr.SIM_PROCEDURES['glibc']['__libc_start_main']())
注意,这个__libc_start_main
是属于glibc
库,并非libc
,如果写成libc
的话,那么最后没有结果产生。
脚本
import angr
import sys
def main(argv):bin_path=argv[1]p=angr.Project(bin_path)init_state=p.factory.entry_state()printf_addr=0x0804ED40scanf_addr=0x0804ED80strcmp_addr=0x08048280puts_addr=0x0804F350libc_start_main=0x08048D10p.hook(printf_addr,angr.SIM_PROCEDURES['libc']['printf']())p.hook(scanf_addr,angr.SIM_PROCEDURES['libc']['scanf']())p.hook(strcmp_addr,angr.SIM_PROCEDURES['libc']['strcmp']())p.hook(puts_addr,angr.SIM_PROCEDURES['libc']['puts']())p.hook(libc_start_main,angr.SIM_PROCEDURES['glibc']['__libc_start_main']())def is_good(state):return b'Good Job.' in state.posix.dumps(1)def is_bad(state):return b'Try again.' in state.posix.dumps(1)sm=p.factory.simgr(init_state)sm.explore(find=is_good,avoid=is_bad)if sm.found:found_state=sm.found[0]print("Solution: {}".format(found_state.posix.dumps(0)))else:raise Exception('Solution not found')if __name__=='__main__':main(sys.argv)
PNMXNMUD
验证
angr学习笔记(13)(static_binary)相关推荐
- mybatis学习笔记(13)-延迟加载
2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(13)-延迟加载 标签: mybatis [TOC] resultMap可以实现高级映射(使用asso ...
- opencv进阶学习笔记13:图像形态学操作大全(膨胀,腐蚀,开闭,黑帽,顶帽,梯度)python版
基础版学习笔记: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 基础版形态学: opencv学 ...
- Linux学习笔记13
Linux学习笔记13 Linux学习笔记13 配置Nagios 基本介绍 Nagios安装 - 服务端 Nagios安装 - 客户端 监控中心添加被监控主机 配置文件的简单说明 继续添加需要服务端通 ...
- Hadoop学习笔记—13.分布式集群中节点的动态添加与下架
Hadoop学习笔记-13.分布式集群中节点的动态添加与下架 开篇:在本笔记系列的第一篇中,我们介绍了如何搭建伪分布与分布模式的Hadoop集群.现在,我们来了解一下在一个Hadoop分布式集群中,如 ...
- 台大李宏毅Machine Learning 2017Fall学习笔记 (13)Semi-supervised Learning
台大李宏毅Machine Learning 2017Fall学习笔记 (13)Semi-supervised Learning 本博客参考整理自: http://blog.csdn.net/xzy_t ...
- java 量化指标_量化投资学习笔记13——各种指标的绘图、计算及交易策略
<量化投资:以python为工具>第五部分笔记 先来画k线图,要注意finance模块已经从matplotlib库中去除,现在要用mpl_finance库,单独安装. 其中有candles ...
- 【计算机网络学习笔记13】交换技术(下)
[计算机网络学习笔记13]交换技术(下) 一.生成树的诞生和发展 1. 环路问题 两个网桥之间的连接网线如果只有一根,而这根网线或者接口有问题,网络就会出现单点故障.所以为了提高可靠性,网桥在互连时一 ...
- R语言小白学习笔记13—基本统计
R语言小白学习笔记13-基本统计 笔记链接 学习笔记13-基本统计 13.1 概括性统计量 13.2 相关系数和协方差 13.3 t-检验 13.3.1 单样本t检验 13.3.2 两样本t检验 13 ...
- Excel VBA 学习笔记13:单元格的格式
Excel VBA 学习笔记13:单元格的格式 NumberFormat 属性 (Excel) vba excel 单元格格式设置 Excel VBA 单元格格式 python解决SNIMissing ...
- mysql学习笔记(13)之mycat切分规则与es基础
mycat切分规则与es基础 mycat基础配置 mycat切分规则 es,es-head,kibana简介与安装 Windows下安装 es分布式搜索引擎安装 elasticsearch-head安 ...
最新文章
- 存储的瓶颈--大型网站技术演进思考
- DEDECMS模块插件制作举例-模块生成向导
- c语言小数点进制转换,新手求教,关于含小数的二进制转换成十进制
- 技术人员如何创业《一》—— 产品及想法(转载)
- boost::geometry::coordinate_type用法的测试程序
- cc压力测试_中小型网站如何防范CC攻击?
- python数据分析笔记中panda(2)
- HDU 2045 不容易系列之(3)―― LELE的RPG难题(递推)
- Python编程(思维导图)
- Struts2第三篇【Action开发方式、通配符、Struts常量、跳转全局视图、action节点默认配置】...
- 大厂“无敌卷王”、“圈养式”招聘?年后测试员跳槽一定要注意这几个坑
- 算法与数据结构 第1章 当我们谈论算法的时候,我们在谈论什么?
- SQL语句:查询多表更新数据
- 30天自制操作系统——Day8实验报告
- Android 退出登录实现
- 霍普金斯计算机专业研究生如何,约翰·霍普金斯大学电气和计算机工程硕士研究生...
- FW:维度打击,机器学习中的降维算法:ISOMAP MDS_拔剑-浆糊的传说_新浪博客...
- 彻底搞懂vertical-align 底线、基线、中线的含义
- ROS 问题(topic types do not match、topic datatype/md5sum not match、msg xxx have changed. rerun cmake)
- 怎样判断一个数能否被7整除
热门文章
- 成功解决import win32api, sys, osImportError: DLL load failed: 找不到指定的模块。
- Python之sklearn2pmml:sklearn2pmml库函数的简介、安装、使用方法之详细攻略
- 成功解决AttributeError: module 'cv2.cv2' has no attribute 'xfeatures2d'
- C++:Windows环境下基于Eclipse配置C/C++开发环境
- ML之FE:数据处理—特征工程之特征三化(标准化【四大数据类型(数值型/类别型/字符串型/时间型)】、归一化、向量化)简介、代码实现、案例应用之详细攻略
- DayDayUp:博主,在此,祝愿大家(十五种编程语言输出),2019年春节快乐!猪年诸事大吉!学要有所成,劳要有所获!
- AI机器人:与智能机器人进行实时智能交互,想问什么就问什么
- Paper之Algorithms:国内外Algorithms高质量论文、CUMCM分类推荐(建议收藏,持续更新)
- Algorithm:树相关算法(BBT/BST/B树/R树)简介(二叉查找树、二叉查找树的插入节点、二叉查找树的删除、二叉树的遍历、平衡二叉树)C 语言实现
- TF学习:Tensorflow基础案例、经典案例集合——基于python编程代码的实现