VM保护简单原理

转自:http://bbs.pediy.com

 

/*
VM初探
作者:blueapplez
QQ:124272113
Email:blueapple1987@163.com
http://bbs.pediy.com/
*/

#include "windows.h"

/* 下面是虚拟指令 我们只模拟了2条指令 */

//push 0x12345678  push一个4字节的数
#define vPushData    0x10

//call 0x12345678  call一个4字节的地址
#define vCall        0x12

//结束符
#define vEnd        0xff

//一个字符串
char *str = "Hello World";

/*
这是我们构造的虚拟指令, 数据还不  在mian里面我们进行了修改
push 0
push 0
push offset str  ;把字符串的地址入栈
push 0
call MessageBoxA ;
*/
BYTE bVmData[] = {
vPushData,	0x00, 0x00, 0x00, 0x00, 
vPushData,	0x00, 0x00, 0x00, 0x00,
vPushData,	0x00, 0x00, 0x00, 0x00,
vPushData,	0x00, 0x00, 0x00, 0x00,
vCall,		0x00, 0x00, 0x00, 0x00,
vEnd};


//这就是简单的虚拟引擎了
_declspec(naked) void  VM(PVOID pvmData)
{
	__asm
	{
		//取vCode地址放入ecx
		mov ecx, dword ptr ss:[esp+4]
__vstart:
		//取第一个字节到al中
		mov al, byte ptr ds:[ecx]
		cmp al, vPushData
		je    __vPushData
		cmp al, vCall
		je    __vCall
		cmp al, vEnd
		je __vEnd
		int 3
__vPushData:
		inc ecx
		mov edx, dword ptr ds:[ecx]
		push edx
		add ecx, 4
		jmp __vstart
__vCall:
		inc ecx
		mov edx, dword ptr ds:[ecx]
		call edx
		add ecx, 4
		jmp __vstart
__vEnd:
		ret
	}
}


int main(int argc, char* argv[])
{
	//修改虚拟指令的数据
	*(DWORD *)(bVmData+10 + 1) = (DWORD)str;
	*(DWORD *)(bVmData+20 + 1) = (DWORD)MessageBoxA;

	//执行虚拟指令
	VM(bVmData);
	return 0;
}


 

### 虚拟机 VM 使用案例或示例项目 以下是关于虚拟机(VM)的一些具体使用案例和示例项目: #### 1. WebVM (基于浏览器的 Linux 网络虚拟机) WebVM 是一种可以在浏览器中运行的 Linux 网络虚拟机,适用于远程教学、在线实验环境搭建等场景。其安装过程较为简便,用户可以通过简单的配置完成部署[^1]。 - **应用场景**: 教育培训、开发者沙箱测试、云计算服务。 - **技术特点**: 基于容器化技术和 HTML5 技术栈。 #### 2. Libvirt 自动化虚拟机管理 Libvirt 提供了一种强大的工具链来管理和自动化创建虚拟机实例。通过编写 XML 配置文件模板并结合脚本语言(如 Python 或 Bash),可以轻松实现批量虚拟机的创建与启动[^2]。 - **核心技术**: virsh 工具集、KVM/QEMU 支持。 - **代码示例**: ```bash #!/bin/bash TEMPLATE="vm_template.xml" NAME="test_vm_01" sed "s/%%VM_NAME%%/$NAME/" $TEMPLATE > ${NAME}.xml virsh define "${NAME}.xml" virsh start "$NAME" ``` #### 3. Simple.VM (轻量级字节码解释器) Simple.VM 是一款由 skx 开发的小型虚拟机,专注于执行自定义字节码。该项目不仅提供了一个核心虚拟机实现,还附带了 Perl 编写的编译器和反编译器,方便用户学习虚拟机的工作原理[^3]。 - **适用范围**: 学习计算机体系结构、研究虚拟机内部机制。 - **特性亮点**: 字节码支持整数运算和字符串操作;无复杂依赖项。 #### 4. VM2 JavaScript 沙盒环境 VM2 是一个开源的 JavaScript 沙盒解决方案,允许开发者在一个隔离环境中安全地运行不受信任的代码片段。它的主要用途在于保护宿主应用程序免受恶意代码攻击[^4]。 - **典型用法**: API 测试框架、第三方插件加载器。 - **初始化代码**: ```javascript const { NodeVM } = require('vm2'); const vm = new NodeVM({ sandbox: {}, console: 'inherit', }); vm.run(`console.log("Hello from isolated environment!");`); ``` #### 5. CentOS 上 Oracle 数据库部署实践 在企业生产环境中,CentOS 平台常被用来承载大型数据库系统(如 Oracle)。借助 yum 包管理器简化安装流程的同时,还能有效减少人为错误的发生概率[^5]。 - **实施步骤**: 安装必要的 RPM 文件 -> 设置 ORACLE_HOME 变量 -> 启动监听进程。 - **优势体现**: 易维护性高、兼容性强。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值