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

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

发布时间:2019-03-21 12:55 所属栏目:20 来源:luochicun
导读:检查操作系统版本的功能代码如下: WORDGetVersionWord() { OSVERSIONINFOverInfo={sizeof(OSVERSIONINFO)}; GetVersionEx(verInfo); returnMAKEWORD(verInfo.dwMinorVersion,verInfo.dwMajorVersion); } BOOLIsWin

检查操作系统版本的功能代码如下:

  1. WORD GetVersionWord() 
  2.     OSVERSIONINFO verInfo = { sizeof(OSVERSIONINFO) }; 
  3.     GetVersionEx(&verInfo); 
  4.     return MAKEWORD(verInfo.dwMinorVersion, verInfo.dwMajorVersion); 
  5. BOOL IsWin8OrHigher() { return GetVersionWord() >= _WIN32_WINNT_WIN8; } 
  6. BOOL IsVistaOrHigher() { return GetVersionWord() >= _WIN32_WINNT_VISTA; }        

如何避开IsDebuggerPresent检查

为了做到这一点,在执行检查代码之前,需要将0置于BeingDebugged。例如,可以使用DLL注入:

  1. mov eax, dword ptr fs:[0x30]   
  2. mov byte ptr ds:[eax+2], 0 

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) 

(编辑:ASP站长网)

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