看雪论坛
发新帖
1

[原创]VT虚拟化架构编写视频教程①~⑥课(完结)

小宝来了 2016-8-2 13:05 22756

前言:
虚拟化技术(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
其他课程解压密码在压缩包注释内。
百度云 http://pan.baidu.com/s/1pLerbU7 密码:ebem

大家如果也有对VT和内核逆向方面的兴趣,欢迎加入我们QQ群,一起学习进步。
QQ群:555087477

本主题帖已收到 0 次赞赏,累计¥0.00
最新回复 (94)
1
小宝来了 2016-8-2 13:06
2
沙发就自己坐啦
1
xiaohouhui 2016-8-2 13:07
3
我草,楼主太给力了
靴子 2016-8-2 13:08
4
有兴趣 mark一下~!
网瘾犯了 2016-8-2 13:16
5
谢谢分享 对于我这样还没入门的人来说太给力了
zzxxaa 2016-8-2 13:27
6
支持一下谢谢
ugvjewxf 2016-8-2 13:27
7
https://github.com/tandasat/DdiMon   其实能讲解下这个代码也不错的,里面还是有很多代码看不大懂,
ghostway 2016-8-2 13:31
8
这个都做视频教程了
lhb天羽 2016-8-2 13:33
9
怎么能这么流弊!
7
无名侠 2016-8-2 13:34
10
小宝太给力。
ntDownload 2016-8-2 13:55
11
我草楼主,太给力了
OnlyForU 2016-8-2 14:08
12
狂赞!!!!
OnlyForU 2016-8-2 14:10
13
楼主说的VT视频教程是什么论坛的啊?
小艾 2016-8-2 14:12
14
先支持100个
loveqiao 2016-8-2 14:29
15
谢谢楼主分享   来学习学习
qqsunqiang 2016-8-2 14:50
16
谢谢楼主的分享。
Yecate 2016-8-2 14:56
17
解压密码呢
lhb天羽 2016-8-2 15:07
18
居然有个压缩密码?
2
JoenChen 2016-8-2 15:13
20
图文并茂哈!
1
小宝来了 2016-8-2 15:19
21
膜拜大神,感谢你发的OD插件,没有你,哪能有今天!
ntDownload 2016-8-2 15:34
22
楼上那些问要压缩密码的都是盲人?
对得起楼主吗?
ZChameleon 2016-8-2 15:50
23
QQ群真的没写错么
lwykj 2016-8-2 15:57
24
这的支持!
1
小宝来了 2016-8-2 16:06
25
写错了 不好意思。
应该是555087477
lhb天羽 2016-8-2 16:25
26
你是把网盘密码看成了解压密码??!!!!盲人!
yangaijia 2016-8-2 16:38
27
感谢楼主的无私分享;
ntDownload 2016-8-2 16:48
28
哈哈,好吧,反正我正在看着楼主的视频了~~
wodexinren 2016-8-2 17:22
29
好评,感谢LZ分享
yy虫子yy 2016-8-2 18:13
30
LZ出VT视频教程了
zjloveldd 2016-8-2 18:28
31
什么都不说,支持楼主
dodou 2016-8-2 18:54
32
期待一下下
小阿弟 2016-8-2 19:21
33
<---------------这个必须顶,支持楼主原创,辛苦了!!!!!!
ID蝴蝶 2016-8-2 19:38
34
狂赞!!
VCKFC 2016-8-3 03:31
35
你为什么要草楼主?
冷瞳 2016-8-3 07:12
36
谢谢分享
tmxfh 2016-8-3 08:29
37
不错!感谢楼主
BlackTrace 2016-8-3 09:12
38
楼主太给力了,支持啊
比方 2016-8-3 09:29
39
makr~!
pushmop 2016-8-3 09:46
40
楼主 也算有心人了。现在 大家都忙着变现, 愿意分享的人已经不多了。
burnett 2016-8-3 10:35
41
网盘里的第4个文件"装载并运行虚拟机压缩文件"貌似下载不了,请LZ解决下,谢谢!
woshidc 2016-8-3 10:43
42
lz万岁万岁万万岁
Tebox 2016-8-3 11:08
43
给力 感谢楼主
1
小宝来了 2016-8-3 17:06
44
我也不知道什么原因 可能是视频太大了用客户端下载试试。
暴强 2016-8-4 13:43
45
好东西,如果能推荐几本书就更好了!
我就来看看 2016-8-4 13:52
46
支持一下谢谢
guotouck 2016-8-5 01:18
47
不错哦!!小宝人品好 一直无私风险!
1
myqqi 2016-8-5 08:07
48
各路大神层出不穷,大赞
任天广 2016-8-6 18:46
49
十分感谢您的分享 赞
KOEIKOEI 2016-8-7 20:54
50
mark....
返回



©2000-2017 看雪学院 | Based on Xiuno BBS | 微信公众号:ikanxue
Time: 0.014, SQL: 10 / 京ICP备10040895号-17