【angr学习】一

工具学习

Posted by Corax on December 29, 2023

大家好= =这段时间在期末,也有点烂,元旦后会加大力度,共勉。

关于angr

很久之前就看很多师傅在使用的一个框架工具,对二进制文件的动态符号执行能力和多种静态分析能力。

对于符号执行,我的初步理解就是,根据我们给定的状态(一般都是初始状态),运行到设置的目标状态。更科学的讲,把程序到中每一条路径化为一条向量,然后得到一条可以通往目标状态的向量,在这条向量上面根据约束推算出需要输入的内容等等。

image-20231230231909382

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

先是流程。

image-20231230232019170

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

image-20231230232039074

原理大概就是这个样子,只是我的初步理解,希望随着运用的增加逐步加深。

后面就用一个具体例子来做,这些例子在一个github项目里面。

https://github.com/jakespringer/angr_ctf/tree/master

也有一个非常好的up主做了视频

https://space.bilibili.com/386563875/video

00_angr_find

一个elf文件。

image-20231230232251291

然后用IDA看看流程

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

image-20231230232340989

看看这个函数

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

image-20231230232429376

然后我们上angr吧,对于angr的安装在这里

https://blog.csdn.net/YenKoc/article/details/133101901

里面一个重要的概念,虚拟环境,需要如下命令来打开一个虚拟环境

source /venv/bin/activate

现在得到打开一个目标虚拟环境且里面有我们的程序

image-20231230232831942

然后命令行打开python

image-20231230232850793

引入angr

image-20231230232907331

新建一个project

image-20231230232920694

设置初始状态

image-20231230232935769

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

image-20231230233008278

这个地址在这

image-20231230233038454

然后就开始找路径了

image-20231230233104956

现在可以看到一个found

设置这个found并打印出来

image-20231230233133743

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