静态反调试技术

  (许多静态反调试技术对OS有较强的依赖性。)

  静态反调试目的:

  被调试继承用静态反调试技术来侦测自身是否处于被调试状态,若是,则执行非常规代码(主要是终止代码)来阻止。

  实现方法:

    调试器检测

    调试环境检测

    强制隔离调试器

  破解方法:

    主要用来从探测代码获取信息,然后修改信息本身使得反调试技术失效。

  

  1、PEB

  PEB结构体信息可以判断当前进程是否处于被调试状态。这些信息值得信赖使用方便。

 

  PEB中与反调试密切相关的成员如上所示。

  BeingDebugged成员是一个标志(flag),表示进程是否处于被调试状态。

  Ldr、ProcessHeap、NtGlobalFlag与被调试进程的堆内存特性有关。

  

  IsDebuggerPresent() API的破解之法:

    借助OllyDbg调试器的编辑功能,将PEB.BeingDebugged的值修改为0 .

    

  Ldr (+0xC)

  (仅适用xp系统,另外利用附加功能将运行的进程附加到调试器时,不适用)调试进程时,未使用的的堆内存全部填充0xFEEFEEE,利用这一特征判断是否处于调试状态。

  PEB.Ldr成员是一个指向_PEB_LDR_DATA结构体的指针,_PEB_LDR_DATA结构体是在堆内存中创建的,扫描该区域可轻松查找是否存在0xFEEEFEEE区域。

  破解之法:

    将该区域全部复写为NULL。

 

  ProcessHeap(+0x18)

  PEB.ProcessHeap成员是指向HEAP结构体的指针。

  

 

   

    进程处于非调试状态时,Flag(+0xC)为0x2,Force Flag 为0x0 

    PEB.ProcessHeap既可以从PEB结构体获取,也可通过GetProcessHeap()获取  

    破解之法:

      将这两个值设置为2与0即可。

      

  

  

  

  

 

posted @ 2020-09-09 21:09  KnowledgePorter  阅读(86)  评论(0)    收藏  举报