概述
随着对pwn题的学习,慢慢开始接触VM虚拟机的pwn题了,刚开始做这种类型的题时会发现代码量比较大,略显复杂,复杂的部分主要是在用程序实现虚拟机指令那里。
其实这种题做法和普通pwn类似,也是寻找漏洞,复杂的地方在于需要我们去分析出虚拟机实现的指令,然后用这些指令操作进行漏洞利用。
如何分析
接下来介绍下如何分析,对于VM类型的pwn题,复杂的地方在于分析出该VM对应实现的指令,那么如何分析需要一定章法。这里需要简单知晓一些计算机组成原理和汇编语言的知识。
VM类型的pwn究其本质还是用程序实现了一个虚拟机,这个虚拟机可以解析自定义的指令。这里我们可以类比真实的机器,程序在运行时需要操作寄存器、内存空间,内存空间细分的话还有栈、堆以及代码段等。pwn题的虚拟机就是用程序虚拟了这些物理器件,并通过代码逻辑来对指令进行解析,使得各个虚拟部件合理配合,完成工作。
因此在分析虚拟机实现了哪些指令时,我们可以从下面两个大方向入手。首先找到虚拟实现的物理器件,比如程序可能单独malloc几块内存用来当作寄存器或者栈空间,亦或者就用全局变量来实现,此时位于bss段上。第二步就是读代码逻辑,分析指令,这里考虑程序是用二进制判别指令还是用字符串直接判别。用字符串的话,就比较简单,容易识别。用二进制的话,这里需要知道指令构成的基本知识,学过计算机组成原理的话,我们知道指令由操作码 | 操作数
构成,根据操作数的个数还可分为一操作数指令、两操作书指令以及三操作数指令等。因此在分析指令时,我们可以将这些概念加入到代码逻辑的阅读中,帮助