郁金香VC++过驱动保护全套 免key版 天異赤提供
教程下载地址获取方法:
第一步:打开下方链接,填写QQ邮箱,系统会往QQ邮箱发一封确认订阅邮件
第二步:打开QQ邮箱查看邮件,确认订阅,订阅成功后系统会自动把下载地址和解压密码一起发送到你QQ邮箱http://list.qq.com/cgi-bin/qf_invite?id=585e150c59f30e1213af9a9352367711b2e45c217582cf35
最近时间有些多,一时对网络游戏的保护机制感兴趣了,来研究了一下,听说QQ系列的TesSafe.sys 有些强,于是拿来看看驱动都做了些什
么.以下是对DNF和QQffo(自由幻想)研究结果(xp sp2)
在网上找了些TesSafe的资料,说TesSafe并不怎么样
现在这个版本保护的结果为:任务管理器中可以看到游戏进程,但OD和CE看不见,更不用说什么调试了,iceword可以 看到EPROCSS,但WSysCheck看
郁金香驱动
不见,自己写程序,也不能注入受保护的游戏进程.
可见,NtOpenProcess被Hook了,恢复SSDT后,没有任何效果,可见是inline hook ,
用一般的软件检测一下,没有发现inline hook,看来hook得比较深,在网上一找资料才发现,原来的确够隐藏的
郁金香驱动
以下是上一个TesSafe版本的分析结果
从网上找出来的资料,TesSafe.sys保护原理(DNF的保护,我听说,QQ系列游戏的保护机制都是一样的)
=================================================================
保护得比较没有意思,强度也不高.可能隐藏性稍好一些.
用IDA反汇编TesSafe.sys可以看到:
这个驱动一加载,ExAllocPoolWithTag分配了一块内存,然后将一个函数写进这块内存,接着做好保护,然后 PsCreateSystemThread()创建的
郁金香驱动
线程调用ZwUnloadDriver将驱动卸载。虽
然驱动被卸载了,但是ExAllocPoolWithTag分配的内存仍然在起作用。
具体来看它如何进行保护:
郁金香驱动
先是得到了ObOpenObjectByPointer的地址,然后在 NtOpenProcess中搜索0xe8 ,也就是跳转指令,直到遇见RET为止。
一但得到0xe8,比较后面的四个字节,如果转换后为 ObOpenObjectByPointer的地址,就把这个地址用自己代理函数的地址转换后替换掉,达到
保护自己的目的。
郁金香驱动
用WinDbg看了看,果然在我的机器上:0x80570e41这个在 NtOpenProcess中的区域被TesSafe.sys修改,原来这里是:80570e41 e87c8dffff
call nt!ObOpenObjectByPointer (80569bc2)
系统通过ObOpenObjectByPointer来通过 EPROCESS得到Handle返回给调用者。TENCENT在这里下了一个跳转:(TesSafe.sys加载后。)80570e41
e826542a78 call f881626c
很明显,系统执行到这里就会调用0x6881626c的函数,也就是 TesSafe.sys的
ObOpenObjectByPointer代理函数。这 样,Client.exe就会在这里被过滤掉,从而让R3程序无法得到QQT的句柄,从而保护进程。
郁金香驱动
=================================================================================
我手头拿到的版本是2008年8月5号的,把TesSafe逆出来一看,比上个版本有所加强.
在这个新版本中,TesSafe一共InLine Hook了六个函数,我只逆出并恢复了五个
其中:
1.
KeAttachProcess
NtOpenProcess
NtOpenThread
这三个函数的HOOK方式与上一个版本一样,就是上面蓝色字体的方法,把本应该call ObOpenObjectByPointe的代码修改成了call他自己的代码,
然后在他自己的代码中处理保护的进程
上面三个函数,原来正常的代码为
80581ce3 e8a658ffff call nt!ObOpenObjectByPointer (8057758e)
被HOOK后的代码变成了
call a8724af4(TesSafe自己搞出来的函数)
lkd> u a8724af