【CTF对抗-CTF 逆向:基础 VM 的三大解法剖析】此文章归类为:CTF对抗。
前几天,一位学弟发了道很基础的vm题目给我,我自己想用多种思路来解,中间碰壁多次,于是想着写一篇博客分享下碰壁过程以及关于vm题型我自己的一些解法
一、VM 核心原理速览
vm题型简介
程序大多会有自己一套循环的执行程序流
大致长相为
1
2
3
4
5
6
7
|
while (i< len (opcode)):
if (opcode[i] = = 0x00 ):
i + = 1
elif (opcode[i] = = 0x01 ):
i + = 2
elif (opcode[i] = = 0x02 ):
i + = 3
|
其中opcode一般情况是由操作数和操作组成的一大串数据(通常由成百上千个byte组成)
说白了就是其中的加密过程很多,我们需要模拟执行流
破局思路
关键定位:虚拟指令分发器(opcode)
加密逻辑:找到他的循环加密
模拟重建:模拟执行流进行爆破或者解密
二、三种解法
解法一:传统手撕
将整个执行流程保存下来,倒着用enc去回到flag
解法二:正向Z3
模拟加密过程,使用Z3约束求解来得到flag
解法三:通过gbd或者frida插桩爆破
因为单字节或者双字节的缘故,所有可能也不过那么几样,我们通过一些手段可以实现爆破程序得到flag
高难度vm
2024年强网杯就有一道vm,对我来说很难
找不到opcode和中间的执行流
这种题我目前的想法也只会无脑的爆破程序,不出也不会了,硬看经常大脑卡死
(大佬轻松手撕)
三、解题
前言
解题前放两位大佬关于vm的博客,我也是跟着学的~
upsw1ng佬关于vm的博客
swdd佬关于利用frida去插桩爆破的博客
前面两种方法
最后于 3小时前
被namename123编辑
,原因: 有个没有加载出来的图片
更多【CTF对抗-CTF 逆向:基础 VM 的三大解法剖析】相关视频教程:www.yxfzedu.com