首页
社区
课程
招聘
[原创]VT虚拟化架构编写视频教程①~⑥课(已修复链接)
发表于: 2016-8-2 13:05 67678

[原创]VT虚拟化架构编写视频教程①~⑥课(已修复链接)

2016-8-2 13:05
67678

前言:
虚拟化技术(VT)自被那个300W的滴水调试器利用之后终于被挖掘出在软件调试方面的强大功能。
坛友海风月影也有对VT这门Intel处理器技术做了简单介绍,当时我看到他的文章后,感觉VT这门技术很厉害的样子,然而当时我也只是初入内核编程,并没有考虑太多。
但是,近来VT已经被应用到游戏保护上面去了,所以我决定找点资料,研究这门技术。
在这里特别感谢Ddvp插件作者JoenChen做的OD插件,利用VT来构建自己的调试体系简直无人能敌。
然而后来我发现国内VT的资料几乎没有,找了很久,终于找到某论坛自己出的VT视频教程,看他们的教程目录,几乎是把VT的全部潜力给挖掘了出来,但我一看到价格(他们还要收报名费!)杠杠的,这门技术真的值这么多钱?
没有资料就算了吧,自己看Intel手册来学习,同样也要感谢论坛上一些网友写的VT代码,没有他们的代码,我也就只能在BugCheck中徘徊了。
出于以上原因,我自己弄了一套写VT虚拟化框架的教程,也算是对这门VT技术的贡献了吧。


本套教程仅仅只是构建了VT的框架而已,并不深入研究VT的具体功能(内存隐藏技术、无限硬件断点技术、接管系统中断和异常处理技术、构建新内核调试体系技术、内核重载技术等),但在教程里我会稍微提一下,并没有写具体功能的代码。至少,通过构建虚拟化体系能做到虚拟机占坑,*但仍然不能处理掉当前使用VT保护的大型游戏*。

视频目录如下:
第①课:汇编代码以及虚拟化知识讲解。
第②课:搭建驱动环境、检测当前处理器是否支持虚拟化技术。
第③课:构建VM-EXIT退出事件系统。
第④课:装载VMXON、VMCS区域的各个部分,运行虚拟机。
第⑤课:移植VT到Win7以及多核模式VT实现。(*)
第⑥课:将VT移植到64位Win7系统中。(*)


2016年8月28日 更正:
第⑥课的exithandler有点问题,课程里面写错了,这里纠正下:
HandleMsrWrite的rax和rdx进行或操作时,rdx应该向左移动32位 而我的代码用了向右移动32位。
64位系统下宿主机读取/写入MSR寄存器时,有几个特殊的要从VMCS表里读取/写入

void HandleMsrRead()
{
	ULONG64 uCPUID;
	uCPUID = KeGetCurrentProcessorNumber();
	switch(g_GuestRegs[uCPUID].rcx)
	{
	case MSR_IA32_SYSENTER_CS:
		{
			g_GuestRegs[uCPUID].rax = Vmx_VmRead(GUEST_SYSENTER_CS);
			g_GuestRegs[uCPUID].rdx = Vmx_VmRead(GUEST_SYSENTER_CS) >> 32;
			break;
		}
	case MSR_IA32_SYSENTER_ESP:
		{
			g_GuestRegs[uCPUID].rax = Vmx_VmRead(GUEST_SYSENTER_ESP);
			g_GuestRegs[uCPUID].rdx = Vmx_VmRead(GUEST_SYSENTER_ESP) >> 32;
			break;
		}
	case MSR_IA32_SYSENTER_EIP:	// KiFastCallEntry
		{
			g_GuestRegs[uCPUID].rax = Vmx_VmRead(GUEST_SYSENTER_EIP);
			g_GuestRegs[uCPUID].rdx = Vmx_VmRead(GUEST_SYSENTER_EIP) >> 32;
			break;
		}
	case MSR_FS_BASE:
		{
			g_GuestRegs[uCPUID].rax = Vmx_VmRead(GUEST_FS_BASE);
			g_GuestRegs[uCPUID].rdx = Vmx_VmRead(GUEST_FS_BASE) >> 32;
			break;
		}
	case MSR_GS_BASE:
		{
			g_GuestRegs[uCPUID].rax = Vmx_VmRead(GUEST_GS_BASE);
			g_GuestRegs[uCPUID].rdx = Vmx_VmRead(GUEST_GS_BASE) >> 32;
			break;
		}
	case MSR_EFER:
		{
			g_GuestRegs[uCPUID].rax = Asm_ReadMsr(MSR_EFER);
			g_GuestRegs[uCPUID].rdx = Asm_ReadMsr(MSR_EFER) >> 32;
			break;
		}
	default:
// ##########################################################
		g_GuestRegs[uCPUID].rax = Asm_ReadMsr(g_GuestRegs[uCPUID].rcx);
		g_GuestRegs[uCPUID].rdx = Asm_ReadMsr(g_GuestRegs[uCPUID].rcx) >> 32;
// ##########################################################
	}

}

void HandleMsrWrite()
{
	ULONG64 uCPUID;
	uCPUID = KeGetCurrentProcessorNumber();
	switch(g_GuestRegs[uCPUID].rcx)
	{
	case MSR_IA32_SYSENTER_CS:
		{
			Vmx_VmWrite(GUEST_SYSENTER_CS,g_GuestRegs[uCPUID].rax|(g_GuestRegs[uCPUID].rdx<<32));
			break;
		}
	case MSR_IA32_SYSENTER_ESP:
		{
			Vmx_VmWrite(GUEST_SYSENTER_ESP,g_GuestRegs[uCPUID].rax|(g_GuestRegs[uCPUID].rdx<<32));
			break;
		}
	case MSR_IA32_SYSENTER_EIP:	// KiFastCallEntry
		{
			Vmx_VmWrite(GUEST_SYSENTER_EIP,g_GuestRegs[uCPUID].rax|(g_GuestRegs[uCPUID].rdx<<32));
			break;
		}
	case MSR_FS_BASE:
		{
			Vmx_VmWrite(GUEST_FS_BASE,(g_GuestRegs[uCPUID].rax)|(g_GuestRegs[uCPUID].rdx<<32));
			break;
		}
	case MSR_GS_BASE:
		{
			Vmx_VmWrite(GUEST_GS_BASE,(g_GuestRegs[uCPUID].rax)|(g_GuestRegs[uCPUID].rdx<<32));
			break;
		}
	case MSR_EFER:
		{
			Asm_WriteMsr(MSR_EFER,(g_GuestRegs[uCPUID].rax)|(g_GuestRegs[uCPUID].rdx<<32));
			break;
		}
	default:
// ##########################################################
		Asm_WriteMsr(g_GuestRegs[uCPUID].rcx,(g_GuestRegs[uCPUID].rax)|(g_GuestRegs[uCPUID].rdx<<32));
// ##########################################################
	}

}



下载链接:
前四课解压密码:Xiaobao
其他课程解压密码在压缩包注释内,回答问题即可知道密码。
百度云 https://pan.baidu.com/s/10sr91DcHLJTxrHdFOjp21A 密码:0vmp


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

最后于 2018-6-23 08:04 被小宝来了编辑 ,原因: 修复链接
收藏
免费 18
支持
分享
最新回复 (166)
雪    币: 1098
活跃值: (746)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
沙发就自己坐啦
2016-8-2 13:06
0
雪    币: 96
活跃值: (36)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
我草,楼主太给力了
2016-8-2 13:07
0
雪    币: 22
活跃值: (423)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
有兴趣 mark一下~!
2016-8-2 13:08
0
雪    币: 32
活跃值: (49)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢分享 对于我这样还没入门的人来说太给力了
2016-8-2 13:16
0
雪    币: 42
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
支持一下谢谢
2016-8-2 13:27
0
雪    币: 615
活跃值: (530)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
7
https://github.com/tandasat/DdiMon   其实能讲解下这个代码也不错的,里面还是有很多代码看不大懂,
2016-8-2 13:27
0
雪    币: 581
活跃值: (215)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
8
这个都做视频教程了
2016-8-2 13:31
0
雪    币: 25
活跃值: (506)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
怎么能这么流弊!
2016-8-2 13:33
0
雪    币: 6890
活跃值: (8944)
能力值: ( LV17,RANK:797 )
在线值:
发帖
回帖
粉丝
10
小宝太给力。
2016-8-2 13:34
0
雪    币: 135
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
我草楼主,太给力了
2016-8-2 13:55
0
雪    币: 346
活跃值: (25)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
12
狂赞!!!!
2016-8-2 14:08
0
雪    币: 346
活跃值: (25)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
13
楼主说的VT视频教程是什么论坛的啊?
2016-8-2 14:10
0
雪    币: 5734
活跃值: (1737)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
先支持100个
2016-8-2 14:12
0
雪    币: 89
活跃值: (1908)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
谢谢楼主分享   来学习学习
2016-8-2 14:29
0
雪    币: 438
活跃值: (188)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
谢谢楼主的分享。
2016-8-2 14:50
0
雪    币: 149
活跃值: (2618)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
解压密码呢
2016-8-2 14:56
0
雪    币: 25
活跃值: (506)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
居然有个压缩密码?
2016-8-2 15:07
0
雪    币: 6976
活跃值: (1372)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
20
图文并茂哈!
2016-8-2 15:13
0
雪    币: 1098
活跃值: (746)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
21
膜拜大神,感谢你发的OD插件,没有你,哪能有今天!
2016-8-2 15:19
0
雪    币: 135
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
楼上那些问要压缩密码的都是盲人?
对得起楼主吗?
2016-8-2 15:34
0
雪    币: 78
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
QQ群真的没写错么
2016-8-2 15:50
0
雪    币: 870
活跃值: (1033)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
这的支持!
2016-8-2 15:57
0
雪    币: 1098
活跃值: (746)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
25
写错了 不好意思。
应该是555087477
2016-8-2 16:06
0
游客
登录 | 注册 方可回帖
返回
//