0x1,简介
angr在ctf中密码,逆向,以及pwn中都会有涉及,它可以让我们拜托那些头大的算法,单纯知道开始以及结束,暴力破解的方法来得到我们最后的结果,不得不说,在某些方面很方便,但也有局限性,当遇到死循环或者其他中断情况就不太行,而且计算量大时过于费时对于电脑配置也有些要求(我的电脑每次跑都)。
0x2,安装
python的一个模块,自行安装百度,安装过程有点坑。
0x3,实例分析
r100(蓝鲸ctf的一道逆向)
这道逆向本身算法逆向并不难,这里用angr来求解:
64位程序,把丢在ida中分析:
此为加密函数,这里我们不分析他的算法
主函数中有两个分支我们只要他输出'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的第一个结果
密码时code_Talkers