刺激战场
六合彩
贵宾厅
  • 3012阅读
  • 15回复

腾讯系列游戏驱动保护研究 [复制链接]

上一主题 下一主题
在线啊冲
 

只看楼主 倒序阅读 使用道具 楼主  发表于: 2016-02-03
lkd> u 805878d0 805878d0+180 ;NtWriteVirtualMemory
805878d0 b89e9707a9      mov     eax,0A907979Eh
805878d5 ffe0            jmp     eax
805878d7 e8a7c5f5ff      call    nt!CIsqrt+0x2d7 (804e3e83)
805878dc 64a124010000    mov     eax,dword ptr fs:[00000124h]

上面这是NtWriteVirtualMemory的代码,头几个字节被修改了,直接恢复之就OK了,
上面inline hook的函数一共六个,我只恢复了五个,另一个函数不知道是什么,没弄出来
3.
在驱动中TesSafe还用了以下三个函数
PsSetCreateProcessNotifyRoutine
PsSetCreateThreadNotifyRoutine
PsSetLoadImageNotifyRoutine

可见,他设置了进程,线程创建和加载模块的回调函数,这几个函数设置的回调函数,不容易去除,我只能把
PspCreateProcessNotifyRoutine,PspCreateThreadNotifyRoutine,PspLoadImageNotifyRoutine表全部清空,分析结果:
经过我以上的处理,ce可以对进程进程读写操作,但不能附加调试,会失败,
OD可以附加上去,可以读写内存,可以暂停程序,但还是不能调试,表现为暂停后,游戏程序就会出错
看来TesSafe这次吸收了以前的教训了,下了狠工夫,太烂了,HOOK这么多函数
至于为什么不能调试,有可能是还有一个函数我没有恢复的原因吧,我也没那么多时间去研究了
总体来说,他次的保护做得还可以,但就不知道他的ring3保护做得如何了,我只分析了一下驱动,没有分析他的游戏进程,
如果游戏进程中没有做好保护,驱动保护就等同于摆设,

PspCreateProcessNotifyRoutine,PspCreateThreadNotifyRoutine,PspLoadImageNotifyRoutine表全部清空代码如下:
其它的恢复代码都很简单,就不放出来了
RtlInitUnicodeString(&name,L"PsSetCreateProcessNotifyRoutine");
RemoveNotifyRoutine((PVOID)MmGetSystemRoutineAddress(&name));
RtlInitUnicodeString(&name,L"PsRemoveCreateThreadNotifyRoutine");
RemoveNotifyRoutine((PVOID)MmGetSystemRoutineAddress(&name));
RtlInitUnicodeString(&name,L"PsRemoveLoadImageNotifyRoutine");
RemoveNotifyRoutine((PVOID)MmGetSystemRoutineAddress(&name));
__declspec(naked) void DisableWPBitAndCli()
{
__asm
{
   cli
   mov     eax, cr0
   and     eax, 0xFFFEFFFF
   mov     cr0, eax
   retn
}
}
__declspec(naked) void EnableWPBitAndSti()
{
__asm
{
    mov eax, cr0
    or eax, 0x10000
    mov cr0, eax
    sti
    retn
}
}
NTSTATUS
MydrvDispatch (
      IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp
      )
{
Irp->IoStatus.Status = STATUS_SUCCESS;
Irp->IoStatus.Information = 0L;
IoCompleteRequest( Irp, 0 );
return Irp->IoStatus.Status;
}
/*
NTSTATUS RemoveNotifyRoutine(PVOID RemoveFunPointer)
can remove all of the Routine of CreateThread and CreateProcess and LoadImage
注意传入参数为下面三者之一
PsSetCreateProcessNotifyRoutine
PsRemoveCreateThreadNotifyRoutine
PsRemoveLoadImageNotifyRoutine
===========
by xp sp2
*/
NTSTATUS RemoveNotifyRoutine(PVOID RemoveFunPointer)
{
ULONG AddrFun;
ULONG* pRoutineList;
ULONG i;
pRoutineList = 0;
AddrFun = (ULONG)RemoveFunPointer;
DbgPrint("RemoveNotifyRoutine = %08X\n",RemoveFunPointer);
//
//the RemoveFunPointer could
//only be PsRemoveLoadImageNotifyRoutine
//or PsSetCreateProcessNotifyRoutine
//or PsRemoveCreateThreadNotifyRoutine
//find code bf 00975680      mov     edi,offset nt!PsThreadType+0x44 (80569700)
//
for(i = AddrFun;i<AddrFun + 0x20;i++)
{
   if( 0xbf == *(PBYTE)i )
   {
    i++;
    pRoutineList = (ULONG*)( *(ULONG*)i );
    break;
   }
}
if( 0 == pRoutineList)
{
   DbgPrint("Can not find the RoutineList\n");
   return STATUS_UNSUCCESSFUL;
}

if( TRUE != MmIsAddressValid((PVOID)pRoutineList) )// memory is valid
{
   DbgPrint("Access Memory is not Valid %08X\n",pRoutineList);
   return STATUS_UNSUCCESSFUL;
}

//
//Zero the PspCreateThreadNotifyRoutine;
//
DisableWPBitAndCli();
for(i=0;i<8;i++) //这里写成0x40也没有问题,我看他这个表应该长度为0x40,但网上说PspCreateProcessNotifyRoutine表长
度在win2K下为8,xp下为多少,我没有找到资料,懒得去分析代码找出他的长度
{
   //if( 0 == pRoutineList )break;
   pRoutineList = 0;//清空
}
EnableWPBitAndSti();
DbgPrint("RemoveNotifyRoutine STATUS_SUCCESS %08X\n",RemoveFunPointer);
return STATUS_SUCCESS;
}

善者 慈悲心常在 无怨无恨 以苦为乐
默认压缩密码www.hifyl.com
文件分享密码问题:http://www.hifyl.com/read-htm-tid-4444.html
离线im86165507

只看该作者 沙发  发表于: 2016-02-07
离线htr78

只看该作者 板凳  发表于: 2016-02-17
看不懂,感觉好高深
离线v2680267313

只看该作者 地板  发表于: 2016-04-30
用户被禁言,该主题自动屏蔽!
离线zauberer

只看该作者 4楼 发表于: 2016-06-09
小风币+1
离线zauberer

只看该作者 5楼 发表于: 2016-06-09
  小风币+1
离线zauberer

只看该作者 6楼 发表于: 2016-06-09
小风币+1
离线zauberer

只看该作者 7楼 发表于: 2016-06-09
小风币+1
离线zauberer

只看该作者 8楼 发表于: 2016-06-09
小风币+1
离线zauberer

只看该作者 9楼 发表于: 2016-06-09
小风币+1
离线2210478413

只看该作者 10楼 发表于: 2016-10-11
好高深哦。。看不懂
键盘挥霍青春
离线sonyh2p

只看该作者 11楼 发表于: 2016-12-08
感谢大神分享!!!!!!!!!!!!!!!
离线liulika

只看该作者 12楼 发表于: 2016-12-25
谢谢分享,分数不够
离线wanglei123

只看该作者 13楼 发表于: 2017-09-19
要是能看懂该多好

只看该作者 14楼 发表于: 02-10
回复会有小风币吗?
离线xcfd65d

只看该作者 15楼 发表于: 03-13
啊冲老师,不知能搞到最近的TP的帖子么,这个好老啊。
本帖提到的人: @啊冲
快速回复
限100 字节
如果您在写长篇帖子又不马上发表,建议存为草稿
 
上一个 下一个