- 注册时间
 - 2010-8-21
 
- 最后登录
 - 2017-5-30
 
- 在线时间
 - 4 小时
 
 
 
 
 
编程入门 
  
	- 魔鬼币
 - 638 
 
 
 
 | 
 
这几天翻看论坛里的精华里,谈到了DebugPort清零。但似乎都是说怎么anti,没讲怎么实现。于是便动手写了一个不知道游戏保护中是不是也这么个思路。。在XP SP3下测试过。有不好的地方请大家指正。。- #include <ntddk.h>
 
  
- PETHREAD pThreadObj = NULL;
 
 - BOOLEAN bTerminated = FALSE;
 
 - UCHAR szProcessName[16] = "TestCrackMe.exe";
 
  
- VOID DriverUnload(PDRIVER_OBJECT pDriverObject);
 
 - VOID AntiDbgThread(PVOID pContext);
 
  
- NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject,PUNICODE_STRING pRegistryPath)
 
 - {
 
 -   OBJECT_ATTRIBUTES ObjAddr = {0};
 
 -   HANDLE ThreadHandle = 0;
 
 -   NTSTATUS NtStatus = STATUS_SUCCESS;
 
  
-   KdPrint(("Driver Entry"));
 
  
-   pDriverObject->DriverUnload = DriverUnload;
 
  
-   InitializeObjectAttributes(&ObjAddr,NULL,OBJ_KERNEL_HANDLE,0,NULL);
 
  
-   NtStatus = PsCreateSystemThread(&ThreadHandle,THREAD_ALL_ACCESS,&ObjAddr,NULL,NULL,AntiDbgThread,NULL);
 
  
-   if(NT_SUCCESS(NtStatus))
 
 -   {
 
 -     KdPrint(("Thread Created"));
 
  
-     NtStatus = ObReferenceObjectByHandle(ThreadHandle,THREAD_ALL_ACCESS,*PsThreadType,KernelMode,&pThreadObj,NULL);
 
  
-     ZwClose(ThreadHandle);
 
  
-     if(!NT_SUCCESS(NtStatus))
 
 -     {
 
 -       bTerminated = TRUE;
 
 -     }
 
 -   }
 
  
-   return NtStatus;
 
 - }
 
  
- VOID DriverUnload(PDRIVER_OBJECT pDriverObject)
 
 - {
 
 -   bTerminated = TRUE;
 
 -   KeWaitForSingleObject(pThreadObj,Executive,KernelMode,FALSE,NULL);
 
  
-   ObDereferenceObject(pThreadObj);
 
 - }
 
  
- VOID AntiDbgThread(PVOID pContext)
 
 - {
 
 -   PEPROCESS pCurrentProcess = NULL;
 
 -   PEPROCESS pFirstProcess = NULL;
 
 -   LARGE_INTEGER inteval;
 
  
-   inteval.QuadPart = -20000000;
 
  
-   KeSetPriorityThread(KeGetCurrentThread(),LOW_REALTIME_PRIORITY);
 
  
-   while(1)
 
 -   {
 
 -     if(bTerminated)
 
 -     {
 
 -       break;
 
 -     }
 
 -     
 
 -     pCurrentProcess = IoGetCurrentProcess();
 
 -     pFirstProcess = pCurrentProcess;
 
  
-     while(RtlCompareMemory(szProcessName,(PUCHAR)((ULONG)pCurrentProcess + 0x174),16) != 16)
 
 -     {
 
 -       pCurrentProcess = (PEPROCESS)(*(PULONG)((ULONG)pCurrentProcess + 0x88) - 0x88);
 
  
-       if(pCurrentProcess == pFirstProcess)
 
 -       {
 
 -         goto END;
 
 -       }
 
 -     }
 
 -     
 
 -     *(PULONG)((ULONG)pCurrentProcess + 0xbc) = 0;
 
 - END:
 
 -     KeDelayExecutionThread(KernelMode,FALSE,&inteval);
 
 -   }
 
 - }
 
 
  复制代码 |   
 
 
 
 |