博客
关于我
angr学习笔记(13)(static_binary)
阅读量:332 次
发布时间: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/

你可能感兴趣的文章
shell 数学运算
查看>>
如何使用4G模块通过MQTT协议传输温湿度数据到onenet
查看>>
图解:网络硬件的发展史
查看>>
map的find函数和count函数
查看>>
C++并发与多线程(一)
查看>>
C++ 并发与多线程(五)
查看>>
STM32--USART串口收发数据
查看>>
逆合成孔径雷成像(一)— 傅里叶变换基础1
查看>>
openthread编译错误:error: could not find ctags
查看>>
7628 EDCCA认证寄存器修改(认证自适应)
查看>>
C#四行代码写简易计算器,超详细带注释(建议新手看)
查看>>
计算机网络子网划分错题集
查看>>
java一些基本程序
查看>>
数据结构之排序
查看>>
数据结构经典十套卷之八
查看>>
修改jupyter保存文件目录
查看>>
tensorflow入门变量常量
查看>>
卷积神经网络六之CNN反向传播计算过程
查看>>
神经元与神经网络一之概述
查看>>
神经网络二之手写数字识别
查看>>