大家好= =这段时间在期末,也有点烂,元旦后会加大力度,共勉。
关于angr
很久之前就看很多师傅在使用的一个框架工具,对二进制文件的动态符号执行能力和多种静态分析能力。
对于符号执行,我的初步理解就是,根据我们给定的状态(一般都是初始状态),运行到设置的目标状态。更科学的讲,把程序到中每一条路径化为一条向量,然后得到一条可以通往目标状态的向量,在这条向量上面根据约束推算出需要输入的内容等等。

用流程图和方程组来解释就是如下。
先是流程。

然后根据得到一个方程组,约束求解。

原理大概就是这个样子,只是我的初步理解,希望随着运用的增加逐步加深。
后面就用一个具体例子来做,这些例子在一个github项目里面。
https://github.com/jakespringer/angr_ctf/tree/master
也有一个非常好的up主做了视频
https://space.bilibili.com/386563875/video
00_angr_find
一个elf文件。

然后用IDA看看流程
可以看到一个非常简单且清晰的流程,把我们的输入进行complexfunction处理,然后比较是否是目标字符串。

看看这个函数
其实也不是很复杂对吧,正常逆也很好逆,但现在我们学学angr,就用angr来做这题。

然后我们上angr吧,对于angr的安装在这里
https://blog.csdn.net/YenKoc/article/details/133101901
里面一个重要的概念,虚拟环境,需要如下命令来打开一个虚拟环境
source /venv/bin/activate
现在得到打开一个目标虚拟环境且里面有我们的程序

然后命令行打开python

引入angr

新建一个project

设置初始状态

设置一个simulation manager并设置目标的地址

这个地址在这

然后就开始找路径了

现在可以看到一个found
设置这个found并打印出来

ok这样我们就出来了
如下链接给予了我帮助
https://www.52pojie.cn/thread-1484714-1-1.html
https://www.52pojie.cn/thread-1861336-1-2.html
https://www.52pojie.cn/forum.php?mod=viewthread&tid=1370918&highlight=angr