搞定QQ游戏系列驱动保护TesSafe.sys
来源:互联网 发布:网易蜂巢注册域名 编辑:程序博客网 时间:2024/05/29 18:03
1.用RKU看一下SSDT和SSDTShadow,发现SSDT并没有被HOOK,SSDTShadow HOOK了5个调用:
NtUserBuildHwndList
NtUserFindWindowEx
NtUserGetDC
NtUserGetDCEx
NtUserGetForegroundWindow
想也不用想,肯定是为了防止其他软件找到他的窗口。
解决方法:在TesSafe加载前先加载自己的驱动,备份这5个调用的地址,等TesSafe加载后直接还原即可,或者直接用RKU还原,TesSafe并没有在这里加效验,所以比较容易。
2.既然SSDT没有没HOOK,那么肯定有inline hook,用windbg看一下,发现被inline hook的调用有如下几个:
NtReadVirtualMemory
NtWriteVirtualMemory
NtOpenProcess + 0x2xx Call ObOpenObjectByPointer处
NtOpenThread + 0x1xx Call ObOpenObjectByPointer处
KiAttachProcess
解决方法:
(1).
NtReadVirtualMemory
NtWriteVirtualMemory
这2个比较好解决,自己写2个调用,实现这2个调用的头10个字节,然后再跳转到这2个调用头10个字节后面的地址,再到SSDT表里把这2个调用地址改成我们自己的即可。
(2).
NtOpenProcess + 0x2xx
NtOpenThread + 0x1xx
在 TesSafe加载前,先保存ObOpenObjectByPointer的地址(或者用MmGetSystemRoutineAddress获取),然 后我们自己写一段代码,实现Call ObOpenObjectByPointer头N个字节(随便自己)以及Call ObOpenObjectByPointer,然后再jmp到Call ObOpenObjectByPointer后面的代码地址,如:
push eax
push dword ptr [ebp-38h]
push dword ptr [ebp-24h]
Call ObOpenObjectByPointer
jmp xxx
然后在Call ObOpenObjectByPointer前面N个字节处jmp到我们自制的代码,这样的话就算TesSafe把Call ObOpenObjectByPointer改成Call到自己的函数,对我们也没有作用了。
注意:直接还原代码的话,势必会蓝屏。因为TesSafe对这个地址有代码效验
(3).
KiAttachProcess
由于这个调用并没有被导出,在SSDT表中也没有他的地址。所以我们首先要获取他的地址
虽 然它没有被导出,但是调用它的另外一个调用KeAttachProcess却是被导出了的,我们可以先用 MmGetSystemRoutineAddress获取KeAttachProcess的地址,再通过KeAttachProcess +0x41的Call KiAttachProcess来取得KiAttachProcess的地址,然后直接还原它的代码即可(TesSafe并没有对这里进行代码效验)。
至此,TesSafe的所有HOOK都已恢复完毕,这时用OD附加游戏,发现OD会突然停止。
其实,上面那些HOOK大部分人都已经搞定,关键就是这最后一步,OD停止的原因是他收不到调试消息了,因为TesSafe有一个线程不停的向PEPROCESS->DebugPort 写入NULL(0)。
DebugPort其实就是Debug_Object的指针。
UnHook的方法多种多样,稍微灵活变通下就能想出很多方法。
程序我就不传了,我相信这些分析比传一个程序有用的多
NP和HS也都大同小异,自己写系统调用,一样过他
以后我会介绍如果绕过NP,以及HS的保护
NtUserBuildHwndList
NtUserFindWindowEx
NtUserGetDC
NtUserGetDCEx
NtUserGetForegroundWindow
想也不用想,肯定是为了防止其他软件找到他的窗口。
解决方法:在TesSafe加载前先加载自己的驱动,备份这5个调用的地址,等TesSafe加载后直接还原即可,或者直接用RKU还原,TesSafe并没有在这里加效验,所以比较容易。
2.既然SSDT没有没HOOK,那么肯定有inline hook,用windbg看一下,发现被inline hook的调用有如下几个:
NtReadVirtualMemory
NtWriteVirtualMemory
NtOpenProcess + 0x2xx Call ObOpenObjectByPointer处
NtOpenThread + 0x1xx Call ObOpenObjectByPointer处
KiAttachProcess
解决方法:
(1).
NtReadVirtualMemory
NtWriteVirtualMemory
这2个比较好解决,自己写2个调用,实现这2个调用的头10个字节,然后再跳转到这2个调用头10个字节后面的地址,再到SSDT表里把这2个调用地址改成我们自己的即可。
(2).
NtOpenProcess + 0x2xx
NtOpenThread + 0x1xx
在 TesSafe加载前,先保存ObOpenObjectByPointer的地址(或者用MmGetSystemRoutineAddress获取),然 后我们自己写一段代码,实现Call ObOpenObjectByPointer头N个字节(随便自己)以及Call ObOpenObjectByPointer,然后再jmp到Call ObOpenObjectByPointer后面的代码地址,如:
push eax
push dword ptr [ebp-38h]
push dword ptr [ebp-24h]
Call ObOpenObjectByPointer
jmp xxx
然后在Call ObOpenObjectByPointer前面N个字节处jmp到我们自制的代码,这样的话就算TesSafe把Call ObOpenObjectByPointer改成Call到自己的函数,对我们也没有作用了。
注意:直接还原代码的话,势必会蓝屏。因为TesSafe对这个地址有代码效验
(3).
KiAttachProcess
由于这个调用并没有被导出,在SSDT表中也没有他的地址。所以我们首先要获取他的地址
虽 然它没有被导出,但是调用它的另外一个调用KeAttachProcess却是被导出了的,我们可以先用 MmGetSystemRoutineAddress获取KeAttachProcess的地址,再通过KeAttachProcess +0x41的Call KiAttachProcess来取得KiAttachProcess的地址,然后直接还原它的代码即可(TesSafe并没有对这里进行代码效验)。
至此,TesSafe的所有HOOK都已恢复完毕,这时用OD附加游戏,发现OD会突然停止。
其实,上面那些HOOK大部分人都已经搞定,关键就是这最后一步,OD停止的原因是他收不到调试消息了,因为TesSafe有一个线程不停的向PEPROCESS->DebugPort 写入NULL(0)。
DebugPort其实就是Debug_Object的指针。
UnHook的方法多种多样,稍微灵活变通下就能想出很多方法。
程序我就不传了,我相信这些分析比传一个程序有用的多
NP和HS也都大同小异,自己写系统调用,一样过他
以后我会介绍如果绕过NP,以及HS的保护
0 0
- 搞定QQ游戏系列驱动保护TesSafe.sys
- 过NP 系列之一---搞定QQ游戏系列(寻仙,DNF等等)驱动保护TesSafe.sys
- 搞定QQ游戏系列(寻仙,DNF等等)驱动保护TesSafe.sys
- QQ游戏系列(寻仙,DNF等等)驱动保护TesSafe.sys
- 绕TX驱动保护TesSafe.sys方法
- 过游戏保护之 过TX驱动保护TesSafe.sys方法(现在可以用)3
- 最新绕过TX驱动保护TesSafe.sys方法
- 逆向TesSafe.sys
- 过游戏保护驱动
- Pass all use tessafe.sys protect game
- 过QQ游戏大厅的SX保护
- 过QQ游戏大厅的SX保护
- 过QQ游戏大厅的SX保护
- 突破游戏驱动级反外挂保护
- 破解XXX游戏驱动保护过程总结
- TP 游戏保护驱动调试视频教程
- 突破游戏驱动级反外挂保护
- 过TP保护与解除游戏驱动保护(可以借鉴)
- EasyHR人力资源管理系统V5.1发布了
- 突破游戏驱动级反外挂保护
- Qt中编译mysql驱动程序及解决 driver not loaded 错误
- 谈谈信息熵--信息的度量
- Jquery+php+mysql建立省市级三级联动【很简单的构思】
- 搞定QQ游戏系列驱动保护TesSafe.sys
- android网络数据提交类HttpUtils
- 使用YII框架进行PHP程序的计划任务
- 5类(8种)常用内部排序算法(适用于C、C++、Java)
- 45个超实用的JavaScript技巧及最佳实践(二)
- cocos2d-x 观察者模式
- 最大子向量和(连续子数组的最大和)
- java中dynamic web project与web project 的区别?
- 检索COM类工厂中CLSID 为{00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005/8000401A的错误解决方法