博客
关于我
angr学习笔记(13)(static_binary)
阅读量:333 次
发布时间:2019-03-04

本文共 1716 字,大约阅读时间需要 5 分钟。

angr系列

文章目录

伪代码分析

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(观察以上函数,都是利用静态链接编入文件,并非调用动态链接库,想要提高程序执行效率需要把它们利用内置的libc函数进行替换)
angr里头写好了很多内置的libc函数,从而让我们用hook来提高符号执行的速度。
要知道更多的函数,可以访问下面的网址:

找出静态链接的函数地址:

 	printf_addr=0x0804ED40    scanf_addr=0x0804ED80    strcmp_addr=0x08048280    puts_addr=0x0804F350    libc_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 angrimport sysdef main(argv):    bin_path=argv[1]    p=angr.Project(bin_path)    init_state=p.factory.entry_state()    printf_addr=0x0804ED40    scanf_addr=0x0804ED80    strcmp_addr=0x08048280    puts_addr=0x0804F350    libc_start_main=0x08048D10    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']())    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

验证

在这里插入图片描述

转载地址:http://mtve.baihongyu.com/

你可能感兴趣的文章
第五章 数字滤波器的基本结构之三
查看>>
第六章 IIR数字滤波器的设计方法之三全通系统
查看>>
FANUC机器人R-30iB_R-30iB PLUS备件规格型号统计整理
查看>>
如何在VM station虚拟机中安装西门子博途TIA PORTAL?
查看>>
FANUC机器人的镜像备份操作及U盘格式化具体步骤
查看>>
vue-依赖-点击复制
查看>>
vue如何配置兼容ie es6转es5
查看>>
js井子棋
查看>>
css取消双击选中文字
查看>>
LeetCode 116填充每个节点的下一个右侧结点指针
查看>>
C++小笔记——function绑定重载函数、私有继承用的条件
查看>>
最近一些算法题的总结
查看>>
2021-4-28【PTA】【L2-1 包装机 (25 分)】
查看>>
2021-5-2【指针】【作业】【指针代替下标进行数组编程】
查看>>
Arduino mega2560+MPU6050利用加速度值控制舵机
查看>>
pycharm+python+MS SQLSERVER 实战2、实现爬虫程序。
查看>>
判断字符是否出现
查看>>
C 语言restrict 关键字的使用浅谈
查看>>
深入理解数组指针与指针数组的区别
查看>>
iOS客户端与PHP服务端的简单交互
查看>>