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

26种对付反调试的方法

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

Windows X64里的进程如下:

  1. DWORD64 dwpeb = __readgsqword(0x60); 
  2. *((PBYTE)(dwpeb + 2)) = 0; 

TLS回调

其实,在主函数中检查调试器的存在不是最好的方法,因为TLS回调处于反汇编列表时反向工具的第一个位置。它实施的检查可以由nop指令擦除,从而解除保护。如果使用CRT库,则在将控制权转移到主函数之前,主线程就已经有一个调用堆栈了。执行调试器存在检查的一个方法便是TLS回调。如下图所示,在可执行模块入口调用之前就已经调用回调函数。

  1. #pragma section(".CRT$XLY", long, read) 
  2. __declspec(thread) int var = 0xDEADBEEF; 
  3. VOID NTAnopPI TlsCallback(PVOID DllHandle, DWORD Reason, VOID Reserved) 
  4.     var = 0xB15BADB0; // Required for TLS Callback call 
  5.     if (IsDebuggerPresent()) 
  6.     { 
  7.         MessageBoxA(NULL, "Stop debugging program!", "Error", MB_OK | MB_ICONERROR); 
  8.         TerminateProcess(GetCurrentProcess(), 0xBABEFACE); 
  9.     } 
  10. __declspec(allocate(".CRT$XLY"))PIMAGE_TLS_CALLBACK g_tlsCallback = TlsCallback; 

NtGlobalFlag

在Windows NT中,存在一组标识,它们存储在全局变量NtGlobalFlag中。在系统启动时,NtGlobalFlag全局系统变量将使用系统注册表项中的值进行初始化:

  1. [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerGlobalFlag] 

该变量值用于系统跟踪,调试和控制。虽然变量标识未记录,但SDK包括gflags实用程序,它允许对一个全局标识值进行编辑。 PEB结构还包括NtGlobalFlag字段,其位结构不对应于NtGlobalFlag全局系统变量。在调试期间,这些标识在NtGlobalFlag字段中的设置如下:

  1. FLG_HEAP_ENABLE_TAIL_CHECK (0x10) 
  2. FLG_HEAP_ENABLE_FREE_CHECK (0x20) 
  3. FLG_HEAP_VALIDATE_PARAMETERS (0x40) 

(编辑:西安站长网)

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

热点阅读