加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 建站资源 > 策划 > 正文

26种对付反调试的方法

发布时间:2019-03-22 20:28:59 所属栏目:策划 来源:luochicun
导读:目前主要有3种分析软件的方法: 1.数据交换分析,研究人员使用数据包嗅探工具来分析网络数据交换。 2.对软件的二进制代码进行反汇编,然后以汇编语言列出。 3.字节码解码或二进制解码,然后以高级编程语言重新创建源代码。 本文针对的是Windows操作系统中

从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; 

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读