
angr学习笔记(13)(static_binary)
发布日期:2021-05-07 12:09:04
浏览次数:9
分类:原创文章
本文共 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
验证
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年03月15日 15时53分19秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
(恋上数据结构笔记):优先级队列(Priority Queue)
2019-03-04
(Python学习笔记):条件语句
2019-03-04
(Python学习笔记):字典
2019-03-04
(C++11/14/17学习笔记):并发基本概念及实现,进程、线程基本概念
2019-03-04
(C++11/14/17学习笔记):线程启动、结束,创建线程多法、join,detach
2019-03-04
(C++11/14/17学习笔记):创建多个线程、数据共享问题分析及案例
2019-03-04
(QT学习笔记):按钮组中的常用控件
2019-03-04
(音视频学习笔记):SDL-YUV显示-播放音频PCM
2019-03-04
leetcode 14 最长公共前缀
2019-03-04
做做Java
2019-03-04
攻防世界新手区pwn
2019-03-04
2020-2021新技术讲座课程
2019-03-04
eclipse github团队成员修改工程后push推送
2019-03-04
shell中的数学运算
2019-03-04
如何使用4G模块通过MQTT协议传输温湿度数据到onenet
2019-03-04
图解:网络硬件的发展史
2019-03-04
map的find函数和count函数
2019-03-04
C++并发与多线程(一)
2019-03-04
C++ 并发与多线程(五)
2019-03-04
STM32--USART串口收发数据
2019-03-04