首页
社区
课程
招聘
[原创]散谈游戏保护那点事:HShield
发表于: 2012-2-25 14:22 51956

[原创]散谈游戏保护那点事:HShield

2012-2-25 14:22
51956
声明:本文只为研究技术,如使用本文中的源码及技术产生了侵权或违法行为,本人概不负责。如有侵犯你版权的行为,请联系我,本文将立即改正!

在正式开篇之前我要感谢看雪ID:十年寒窗 提供了ThreadHideFromDebugger.sys驱动程序的源码.以及另外几位不愿意透露姓名大牛的破解思路.感谢你们!

前言:大家好,我又回来了.承诺过许多事情,要一件一件去完成.本打算去年8月就写出来的.可惜一直没有时间整理这篇文章.
关于HShield的文章在网络上一搜一大把,我想也没什么秘密可言了.
当时在看雪第一篇搜索出来的帖子(http://bbs.pediy.com/showthread.php?t=104951)
本想做一个从头到尾所有版本的帖子.可惜精力太有限了.今天送上的是 ehsvc.dll版本为 5.5.14.174.去年是多少我忘记了,只记录着它的驱动文件版本号EagleXNt.sys:1.0.0.36截止发帖时本文的一切内容都对该驱动有效.
本文使用操作系统:WindowsXP_SP3
本文完整代码在最下面下载


老规矩既是研究游戏保护总要有个研究对象,选定日本的DNF (アラド戦記)
简报:
NtClose 		[->0x9FD162F0==>C:\WINDOWS\system32\drivers\EagleXNt.sys]
NtDeviceIoControlFile	[->0x9FD16190==>C:\WINDOWS\system32\drivers\EagleXNt.sys]
NtOpenProcess		[->0x9FD16400==>C:\WINDOWS\system32\drivers\EagleXNt.sys]
NtGetContextThread	[->0x9FD16DC0==>C:\WINDOWS\system32\drivers\EagleXNt.sys]
NtQueryPerformanceCounter[->0x9FD16FC0==>C:\WINDOWS\system32\drivers\EagleXNt.sys]
NtReadVirtualMemory	[->0x9FD166C0==>C:\WINDOWS\system32\drivers\EagleXNt.sys]
NtSetContextThread	[->0x9FD16C70==>C:\WINDOWS\system32\drivers\EagleXNt.sys]
NtWriteVirtualMemory	[->0x9FD16820==>C:\WINDOWS\system32\drivers\EagleXNt.sys]
KiAttachProcess		[->0x9FD15DB0==>C:\WINDOWS\system32\drivers\EagleXNt.sys]
IopXxxControlFile	[->0x9FD163B0==>C:\WINDOWS\system32\drivers\EagleXNt.sys]
PsSuspendThread		[->0x9FD16F40==>C:\WINDOWS\system32\drivers\EagleXNt.sys]
NtGetContextThread	[->0x9FD16980==>C:\WINDOWS\system32\drivers\EagleXNt.sys]


另外有一个系统回调函数、一个DPC、两个系统线程






下面看看它下钩子的手法:


看看 NtOpenProcess



大家对照上面一张图可以看到它做得很隐蔽,
接着往下看


终于看到了熟悉的JMP
其它函数和这里处理的手法基本一致.
给出解决方案,很简单:
以NtOpenProcess 为例
在头5字节设置一个钩子,然后过滤.判断如果是游戏进程访问了这个函数则执行正常的流程
否则执行我们自己的流程.下面看代码
//////////////////////////////////////////////////////////////////////
//	名称:	MyNtOpenProcess
//	功能:	NtOpenProcess的中继函数
//	参数:	
//	返回:	
//////////////////////////////////////////////////////////////////////
BYTE	*pOpenProcessCall = (PBYTE)0x804E3EA3;
ULONG		NtOpenProcessAddress;
ULONG		NtOpenProcessRetn1;
ULONG		NtOpenProcessRetn2;
PEPROCESS	processEPROCESS = NULL;	//保存访问者的EPROCESS
ANSI_STRING	p_str1,p_str2;			//保存进程名称
static NAKED VOID Nakd_NtOpenProcess()
{
	__asm
	{
		pushad
		pushf
	}
	
	//获得调用者的EPROCESS
	processEPROCESS = IoGetCurrentProcess();
	//将调用者的进程名保存到str1中
	RtlInitAnsiString(&p_str1,(ULONG)processEPROCESS+0x174);
	//将我们要比对的进程名放入str2
	RtlInitAnsiString(&p_str2,APPNAME);
	if (RtlCompareString(&p_str1,&p_str2,TRUE) == 0)
	{
		//这里说明DNF 进程访问这里了
		__asm
		{
			popf
			popad
			push	0xC4
			push	NtOpenProcessRetn1
			retn
		}
	}
	else
	{
		__asm
		{
			popf
			popad
			push    0x0C4
			push    0x804F5308
			call	pOpenProcessCall
			push	NtOpenProcessRetn2
			retn
		}
	}
}




其它的函数依次类推.但是NtGetContextThread不可以,从简报上面大家可以看到NtGetContextThread这个函数被HOOK 了两次
下面看看NtGetContextThread 被挂钩后的样子



大家清楚看到了吧,有2处.而第一处毋庸置疑的每次都会执行到.
看下NtGetContextThread被我们挂钩以后
mov edi, edi
push ebp
mov ebp, esp
push ecx
push esi
mov eax, dword ptr fs:[124]
mov al, byte ptr [eax+140]
push 0
mov byte ptr [ebp-4], al
lea eax, dword ptr [ebp+8]
push eax
push dword ptr [ebp-4]
push dword ptr [ntoskrnl.PsThreadType]
jmp A52756F0
call 8787BF08
mov esi, eax
test esi, esi
jl short 80636D34
push edi
mov edi, dword ptr [ebp+8]
test byte ptr [edi+248], 10
jne short 80636D27
push dword ptr [ebp-4]
push dword ptr [ebp+C]
push edi
jmp A52757A0
mov esi, eax
jmp short 80636D2C
mov esi, C0000008
mov ecx, edi
call 879F6050
pop edi
mov eax, esi
pop esi
leave
retn 8


而第二个挂钩处就是这次绕过游戏保护的妙笔生花之处了(详见下面给出的代码),原因追溯到游戏保护会在R3层判断是否有硬件断点
看了下MSDN
BOOL WINAPI GetThreadContext(
  __in          HANDLE hThread,
  __in_out      LPCONTEXT lpContext
);

大家看到了LPCONTEXT 参数前面写着 in out 意味着输入和输出
于是我们联想到,如果在半路截住NtGetContextThread设置它的参数lpContext为一些不敏感的内容呢?又或者?总之可以随心所欲的玩弄了

关于加载驱动以及挂载OD的工作顺序如下,
1.先加载ThreadHideFromDebugger.sys (相关技术细节大家GOOGLE SetInformationThread)
2.启动游戏
3.用XueTr删除系统回调函数和DPC,
4.用process explorer挂起两条系统线程(这两步我都用工具完成的)
5.加载驱动
6.挂载OD

因为HShield 的版本太多了.我的文章不一定能够帮到你,请见谅.

完整驱动源码下载: sysCode.zip

ThreadHideFromDebugger.zip

到此本文结束
最后AD一下,我不想辛苦了半年的东西就这么扔掉了.由于日本DNF登陆的时候网页需要验证码,出售绕过该验证码的方案,既:直接启动客户端.以及大量的游戏特征码.可以让你的挂武装到脚趾甲
最后还想找个"这"方面的工作.自己做太累了.我累了

联系QQ:460874,(只联系业务内容,不提供技术咨询)

[课程]FART 脱壳王!加量不加价!FART作者讲授!

上传的附件:
收藏
免费 6
支持
分享
最新回复 (45)
雪    币: 258
活跃值: (84)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
赶紧坐上沙发!!!!!!!!!!!!!(顶级小白)
2012-2-25 14:32
0
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
非常不错,有码
那些无效的附件是啥?
2012-2-25 14:44
0
雪    币: 439
活跃值: (1279)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
4
无效附件是图片,已经重新上传并修正
2012-2-25 14:47
0
雪    币: 13
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
支持下
2012-2-25 16:33
0
雪    币: 410
活跃值: (214)
能力值: ( LV13,RANK:220 )
在线值:
发帖
回帖
粉丝
6
mark下,不过硬干,不是好方法。驱动保护也就那些事
2012-2-25 17:12
0
雪    币: 2323
活跃值: (4113)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
7
学习,学习~~
2012-2-25 20:30
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
有自效验的能这么干吗 直接给你来个bsod
2012-2-25 20:47
0
雪    币: 2503
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
支持下 小白 还看不懂
2012-2-25 21:28
0
雪    币: 34
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
xuetr太强大.
2012-2-25 22:24
0
雪    币: 220
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
考,我看到了HS开始泛滥的近景
2012-2-25 23:17
0
雪    币: 8865
活跃值: (2379)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
12
内容很好,其实IopXXX的那个hook也是有深意的。
2012-2-27 03:32
0
雪    币: 220
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
额,偶居然及时发现了这帖子,前排跟上
2012-2-27 06:19
0
雪    币: 27
活跃值: (90)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
14
今天很开心,来跟V校一贴 : )
2012-2-27 08:56
0
雪    币: 107
活跃值: (326)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
膜拜.............呵呵...."这"方面现在不好做
2012-2-27 10:27
0
雪    币: 308
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
16
支持楼主的美贴。。。
2012-2-27 10:51
0
雪    币: 24
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
虽然还不是很懂,但.......还是要来顶一下滴
2012-2-27 11:01
0
雪    币: 284
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
美丽的hs不是最新版,代码有点那啥。
坐等HP
2012-2-27 11:10
0
雪    币: 1644
活跃值: (53)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
感谢分享。。
2012-2-27 18:12
0
雪    币: 120
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
顶了再看。。。
2012-2-27 21:11
0
雪    币: 10726
活跃值: (2730)
能力值: ( LV5,RANK:71 )
在线值:
发帖
回帖
粉丝
21
楼主果然好信用。支持下。
2012-2-28 08:58
0
雪    币: 6976
活跃值: (1372)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
22
果然很黄很暴力啊, 楼主是好人, 鉴定完毕..
2012-2-28 15:35
0
雪    币: 96
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
楼主太2了。。。牛P
2012-2-29 13:36
0
雪    币: 123
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
不错的帖子,收藏了!
2012-2-29 15:46
0
雪    币: 603
活跃值: (40)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
25
围观楼主。。。
2012-2-29 18:01
0
游客
登录 | 注册 方可回帖
返回
//