符号执行--angr初学分析

0x1,简介

angr在ctf中密码,逆向,以及pwn中都会有涉及,它可以让我们拜托那些头大的算法,单纯知道开始以及结束,暴力破解的方法来得到我们最后的结果,不得不说,在某些方面很方便,但也有局限性,当遇到死循环或者其他中断情况就不太行,而且计算量大时过于费时对于电脑配置也有些要求(我的电脑每次跑都)。

0x2,安装

python的一个模块,自行安装百度,安装过程有点坑。

0x3,实例分析

r100(蓝鲸ctf的一道逆向)

这道逆向本身算法逆向并不难,这里用angr来求解:

符号执行--angr初学分析_第1张图片

64位程序,把丢在ida中分析:

符号执行--angr初学分析_第2张图片

此为加密函数,这里我们不分析他的算法

符号执行--angr初学分析_第3张图片

主函数中有两个分支我们只要他输出'Nice!'就行了

这是正确的地址。

这是错误的地址。

我们需要让他执行到正确的地址附近,并打印出flag。

脚本如下:

 

import angr # 导入angr库

p=angr.Project('./r100',auto_load_libs=False) # 加载程序

state=p.factory.entry_state() # 创建一个状态,默认为程序的入口地址

simgr=p.factory.simgr(state) # 创建一个模拟器用来模拟程序执行,遍历所有路径

res=simgr.explore(find=0x400844,avoid=0x400855) # 约束执行的流程,0x400844为打印正确,0x400855附近即为打印错误的地址

print (res.found[0].posix.dumps(3)) # 打印found的第一个结果

 

符号执行--angr初学分析_第4张图片

 密码时code_Talkers

你可能感兴趣的:(符号执行--angr初学分析)