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)相关推荐

  1. mybatis学习笔记(13)-延迟加载

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(13)-延迟加载 标签: mybatis [TOC] resultMap可以实现高级映射(使用asso ...

  2. opencv进阶学习笔记13:图像形态学操作大全(膨胀,腐蚀,开闭,黑帽,顶帽,梯度)python版

    基础版学习笔记: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录链接: python+opencv进阶版学习笔记目录(适合有一定基础) 基础版形态学: opencv学 ...

  3. Linux学习笔记13

    Linux学习笔记13 Linux学习笔记13 配置Nagios 基本介绍 Nagios安装 - 服务端 Nagios安装 - 客户端 监控中心添加被监控主机 配置文件的简单说明 继续添加需要服务端通 ...

  4. Hadoop学习笔记—13.分布式集群中节点的动态添加与下架

    Hadoop学习笔记-13.分布式集群中节点的动态添加与下架 开篇:在本笔记系列的第一篇中,我们介绍了如何搭建伪分布与分布模式的Hadoop集群.现在,我们来了解一下在一个Hadoop分布式集群中,如 ...

  5. 台大李宏毅Machine Learning 2017Fall学习笔记 (13)Semi-supervised Learning

    台大李宏毅Machine Learning 2017Fall学习笔记 (13)Semi-supervised Learning 本博客参考整理自: http://blog.csdn.net/xzy_t ...

  6. java 量化指标_量化投资学习笔记13——各种指标的绘图、计算及交易策略

    <量化投资:以python为工具>第五部分笔记 先来画k线图,要注意finance模块已经从matplotlib库中去除,现在要用mpl_finance库,单独安装. 其中有candles ...

  7. 【计算机网络学习笔记13】交换技术(下)

    [计算机网络学习笔记13]交换技术(下) 一.生成树的诞生和发展 1. 环路问题 两个网桥之间的连接网线如果只有一根,而这根网线或者接口有问题,网络就会出现单点故障.所以为了提高可靠性,网桥在互连时一 ...

  8. R语言小白学习笔记13—基本统计

    R语言小白学习笔记13-基本统计 笔记链接 学习笔记13-基本统计 13.1 概括性统计量 13.2 相关系数和协方差 13.3 t-检验 13.3.1 单样本t检验 13.3.2 两样本t检验 13 ...

  9. Excel VBA 学习笔记13:单元格的格式

    Excel VBA 学习笔记13:单元格的格式 NumberFormat 属性 (Excel) vba excel 单元格格式设置 Excel VBA 单元格格式 python解决SNIMissing ...

  10. mysql学习笔记(13)之mycat切分规则与es基础

    mycat切分规则与es基础 mycat基础配置 mycat切分规则 es,es-head,kibana简介与安装 Windows下安装 es分布式搜索引擎安装 elasticsearch-head安 ...

最新文章

  1. 存储的瓶颈--大型网站技术演进思考
  2. DEDECMS模块插件制作举例-模块生成向导
  3. c语言小数点进制转换,新手求教,关于含小数的二进制转换成十进制
  4. 技术人员如何创业《一》—— 产品及想法(转载)
  5. boost::geometry::coordinate_type用法的测试程序
  6. cc压力测试_中小型网站如何防范CC攻击?
  7. python数据分析笔记中panda(2)
  8. HDU 2045 不容易系列之(3)―― LELE的RPG难题(递推)
  9. Python编程(思维导图)
  10. Struts2第三篇【Action开发方式、通配符、Struts常量、跳转全局视图、action节点默认配置】...
  11. 大厂“无敌卷王”、“圈养式”招聘?年后测试员跳槽一定要注意这几个坑
  12. 算法与数据结构 第1章 当我们谈论算法的时候,我们在谈论什么?
  13. SQL语句:查询多表更新数据
  14. 30天自制操作系统——Day8实验报告
  15. Android 退出登录实现
  16. 霍普金斯计算机专业研究生如何,约翰·霍普金斯大学电气和计算机工程硕士研究生...
  17. FW:维度打击,机器学习中的降维算法:ISOMAP  MDS_拔剑-浆糊的传说_新浪博客...
  18. 彻底搞懂vertical-align 底线、基线、中线的含义
  19. ROS 问题(topic types do not match、topic datatype/md5sum not match、msg xxx have changed. rerun cmake)
  20. 怎样判断一个数能否被7整除

热门文章

  1. 成功解决import win32api, sys, osImportError: DLL load failed: 找不到指定的模块。
  2. Python之sklearn2pmml:sklearn2pmml库函数的简介、安装、使用方法之详细攻略
  3. 成功解决AttributeError: module 'cv2.cv2' has no attribute 'xfeatures2d'
  4. C++:Windows环境下基于Eclipse配置C/C++开发环境
  5. ML之FE:数据处理—特征工程之特征三化(标准化【四大数据类型(数值型/类别型/字符串型/时间型)】、归一化、向量化)简介、代码实现、案例应用之详细攻略
  6. DayDayUp:博主,在此,祝愿大家(十五种编程语言输出),2019年春节快乐!猪年诸事大吉!学要有所成,劳要有所获!
  7. AI机器人:与智能机器人进行实时智能交互,想问什么就问什么
  8. Paper之Algorithms:国内外Algorithms高质量论文、CUMCM分类推荐(建议收藏,持续更新)
  9. Algorithm:树相关算法(BBT/BST/B树/R树)简介(二叉查找树、二叉查找树的插入节点、二叉查找树的删除、二叉树的遍历、平衡二叉树)C 语言实现
  10. TF学习:Tensorflow基础案例、经典案例集合——基于python编程代码的实现