CTF逆向专题连载之虚拟机vm混淆(3)

  • A+
所属分类:逆向工程

前言

在前边的连载两篇文章我们分别讲了两种动态调试的方法,现在讲一种自动化的方法:angr

什么是angr

angr是一个基于python的二进制漏洞分析框架,它将以前多种分析技术集成进来,方便后续的安全研究人员的开发。既能动态执行,也能静态分析。在CTF逆向中简直是“偷懒”的神器!
简而言之,angr能够自己模拟程序执行,走到我们所给出的地址,跑出flag,实现CTF逆向题的解决。
实现一个angr跑出flag的步骤如下:
  1. 加载文件

  2. 初始化入口

  3. 给入口地址或字节 开始设置模拟执行

  4. 告诉程序要执行到的地方

  5. 出结果

  6. 输出结果

下面我们用简单例题讲解angr的使用
网鼎杯青龙组signal
搜索字符串定位到main函数,并进入红框处函数

CTF逆向专题连载之虚拟机vm混淆(3)

根据graph可以看出题目是虚拟机。同时查看伪代码

CTF逆向专题连载之虚拟机vm混淆(3)

CTF逆向专题连载之虚拟机vm混淆(3)

分析可知:该题如果执行至地址0x004017A5,则代表着题目解答正确。因此我们可以使用angr,让他尝试运行至地址0x004017A5处。

CTF逆向专题连载之虚拟机vm混淆(3)

代码如下:
In [1]: import angr                                                             In [2]: p = angr.Project("./signal.exe")    # 加载文件                                     In [3]: init_state = p.factory.entry_state()  # 初始化入口                                  In [4]: sm = p.factory.simgr(init_state)    # 给入口 开始设置模拟执行                                     In [5]: sm.explore(find = 0x004017A5)  # 告诉程序要执行到的地方 In [6]: found_state = sm.found[0]      # 出结果 In [8]: found_state.posix.dumps(0)     # 输出结果 # 出flagOut[8]: b'757515121f3d478x00x01x08x00x00x00x02Ix19x00x0cx00Jx1ax02x00x02x02x9ax01x00)x02x00x00x00x01x08)*x00x00x08x83x08x00*Fx08x8ax00x08x02x00x08'
验证正确

CTF逆向专题连载之虚拟机vm混淆(3)

总结:

  1. angr能够让我们省去逆向的时间,但也有不能用的时候,有其局限性。

  2. 文中并没有多介绍angr,在该题中的应用也只是最简单的应用方法。还有大量的相关知识需要学习。


文章系列链接:

CTF逆向专题连载之虚拟机vm混淆(1)


题目链接:

https://pan.baidu.com/s/1Cj3DVssh8ZOiZpWax1UDmQ

提取码:9t5k

(题目出自2020网鼎杯青龙组)


本文始发于微信公众号(山石网科安全技术研究院):CTF逆向专题连载之虚拟机vm混淆(3)

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: