浅谈VM虚拟机
浅谈VM虚拟机
1. 什么是虚拟机?
虚拟机:自己定义一套指令,在程序中能有一套函数和结构解释自己定义的指令并执行功能。
查一下维基百科
虚拟机(英语:virtual machine),在计算机科学中的体系结构里,是指一种特殊的软件,可以在计算机平台和终端用户之间创建一种环境,而终端用户则是基于虚拟机这个软件所创建的环境来操作其它软件。虚拟机(VM)是计算机系统的仿真器,通过软件模拟具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统,能提供物理计算机的功能。
有不同种类的虚拟机,每种虚拟机具有不同的功能:
- 系统虚拟机(也称为全虚拟化虚拟机)可代替物理计算机。它提供了运行整个操作系统所需的功能。虚拟机监视器(hypervisor)共享和管理硬件,从而允许有相互隔离但存在于同一物理机器上的多个环境。现代虚拟机监视器使用虚拟化专用硬件(主要是主机CPU)来进行硬件辅助虚拟化。
- 程序虚拟机 被设计用来在与平台无关的环境中执行计算机程序。
而我们CTF中遇到的虚拟机一般是这种:
vm(虚拟机保护)是一种基于虚拟机的代码保护技术。他将基于x86汇编系统中的可执行代码转换为字节码指令系统的代码。来达到不被轻易篡改和逆向的目的。
2. 虚拟机的运行原理
要搞清虚拟机的运行原理,最好的方法是手搓一个虚拟机出来:
一般虚拟机分为基于寄存器的虚拟机和基于栈的虚拟机,通过数据存储处理的方式区分,二者的区别可以看这里 栈式虚拟机和寄存器式虚拟机?
这里先写一个简单的寄存器虚拟机,
实现虚拟机时,要做好这么几个步骤:
- 寄存器虚拟机需要初始化好栈空间和寄存器空间
- 定义一套opcode
- 实现opcode功能的模块
定义opcode和寄存器:
1 |
|
定义vm相关变量:
1 |
|
初始化vm各项数据,并使opcode关联handler功能函数
1 |
|
vm启动函数:
1 |
|
执行器:
1 |
|
再写出opcode:
1 |
|
寄存器虚拟机完成。
3. 给个实例,出个小题
上面的虚拟机大概实现的就是这个过程
1 |
|
也就是实现了
1 |
|
的功能。
把源码放在这:
4. 如何破解VM虚拟机保护类题目
解题一般步骤:
分析VM结构->分析opcode->编写parser->re算法
VM结构常见类型:
基于栈、基于队列、基于信号量
opcode:
与VM数据结构对应的指令 :push pop
运算指令:add、sub、mul等
示例1链接:[NewStarCTF 2023 公开赛道]茶 用来简单了解VM原理 ——by me
示例2链接:[watevrCTF 2019]Repyc——WriteUp pyc+混淆+VM虚拟机 ——by me