设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 手机 数据
当前位置: 首页 > 运营中心 > 建站资源 > 策划 > 正文

26种对付反调试的方法(9)

发布时间:2019-03-21 12:55 所属栏目:20 来源:luochicun
导读:从Windows XP开始,研究人员就为调试过程创建了调试对象。以下就是检查当前进程调试对象的案例: status=NtQueryInformationProcess( GetCurrentProcess(), ProcessDebugObjectHandle, hProcessDebugObject, sizeof

从Windows XP开始,研究人员就为调试过程创建了调试对象。以下就是检查当前进程调试对象的案例:

  1. status = NtQueryInformationProcess( 
  2.             GetCurrentProcess(), 
  3.             ProcessDebugObjectHandle, 
  4.             &hProcessDebugObject, 
  5.             sizeof(HANDLE), 
  6.             NULL); 
  7. if (0x00000000 == status && NULL != hProcessDebugObject) 
  8.     std::cout << "Stop debugging program!" << std::endl; 
  9.     exit(-1); 

如果有调试对象,则正在调试该进程。

ProcessDebugFlags

当检查该标识时,它会返回到EPROCESS内核结构的NoDebugInherit位的反转值。如果NtQueryInformationProcess函数的返回值为0,则正在调试进程。以下就是一个这样的反调试检查的例子:

  1. status = NtQueryInformationProcess( 
  2.     GetCurrentProcess(), 
  3.     ProcessDebugObjectHandle, 
  4.     &debugFlags, 
  5.     sizeof(ULONG), 
  6.     NULL); 
  7. if (0x00000000 == status && NULL != debugFlags) 
  8.     std::cout << "Stop debugging program!" << std::endl; 
  9.     exit(-1); 
  10. }    

ProcessBasicInformation

当使用ProcessBasicInformation标识调用NtQueryInformationProcess函数时,会返回PROCESS_BASIC_INFORMATION结构:

  1. typedef struct _PROCESS_BASIC_INFORMATION { 
  2.     NTSTATUS ExitStatus; 
  3.     PVOID PebBaseAddress; 
  4.     ULONG_PTR AffinityMask; 
  5.     KPRIORITY BasePriority; 
  6.     HANDLE UniqueProcessId; 
  7.     HANDLE InheritedFromUniqueProcessId; 
  8. } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION; 

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读