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

26种对付反调试的方法

发布时间:2019-03-22 03:36:50 所属栏目:建站 来源:luochicun
导读:今朝首要有3种说明软件的要领: 1.数据互换说明,研究职员行使数据包嗅探器材来说明收集数据互换。 2.对软件的二进制代码举办反汇编,然后以汇编说话列出。 3.字节码解码或二进制解码,然后以高级编程说话从头建设源代码。 本文针对的是Windows操纵体系中

Windows Vista引入了NtCreateThreadEx函数,其函数如下:

  1. NTSTATUS NTAPI NtCreateThreadEx ( 
  2.     _Out_    PHANDLE              ThreadHandle, 
  3.     _In_     ACCESS_MASK          DesiredAccess, 
  4.     _In_opt_ POBJECT_ATTRIBUTES   ObjectAttributes, 
  5.     _In_     HANDLE               ProcessHandle, 
  6.     _In_     PVOID                StartRoutine, 
  7.     _In_opt_ PVOID                Argument, 
  8.     _In_     ULONG                CreateFlags, 
  9.     _In_opt_ ULONG_PTR            ZeroBits, 
  10.     _In_opt_ SIZE_T               StackSize, 
  11.     _In_opt_ SIZE_T               MaximumStackSize, 
  12.     _In_opt_ PVOID                AttributeList 
  13. ); 

最风趣的参数是CreateFlags,这个参数的标识如下:

  1. #define THREAD_CREATE_FLAGS_CREATE_SUSPENDED 0x00000001 
  2. #define THREAD_CREATE_FLAGS_SKIP_THREAD_ATTACH 0x00000002 
  3. #define THREAD_CREATE_FLAGS_HIDE_FROM_DEBUGGER 0x00000004 
  4. #define THREAD_CREATE_FLAGS_HAS_SECURITY_DESCRIPTOR 0x00000010 
  5. #define THREAD_CREATE_FLAGS_ACCESS_CHECK_IN_TARGET 0x00000020 
  6. #define THREAD_CREATE_FLAGS_INITIAL_THREAD 0x00000080    

假如一个新线程获取了THREAD_CREATE_FLAGS_HIDE_FROM_DEBUGGER标识,它将在调试器建设时被潜匿。它是由NtSetInformationThread函数配置的ThreadHideFromDebugger,认真安详运行的代码可以在配置了THREAD_CREATE_FLAGS_HIDE_FROM_DEBUGGER标识的线程中执行。

怎样避开NtCreateThreadEx

该技能可以通过钩子NtCreateThreadEx函数来避开,个中THREAD_CREATE_FLAGS_HIDE_FROM_DEBUGGER将被重置。

如那里理赏罚跟踪

从Windows XP开始,体系就设置了内核工具句柄跟踪的机制。当跟踪模式打开时,具有处理赏罚措施的全部操纵都将生涯到轮回缓冲区,同时也实行行使不存在的处理赏罚措施,譬喻,行使CloseHandle函数封锁它,将天生EXCEPTION_INVALID_HADNLE非常。假如历程不是从调试器启动,那么CloseHandle函数将返回FALSE。以下就是基于CloseHandle的防调试掩护:

  1. EXCEPTION_DISPOSITION ExceptionRoutine( 
  2.     PEXCEPTION_RECORD ExceptionRecord, 
  3.     PVOID             EstablisherFrame, 
  4.     PCONTEXT          ContextRecord, 
  5.     PVOID             DispatcherContext) 
  6.     if (EXCEPTION_INVALID_HANDLE == ExceptionRecord->ExceptionCode) 
  7.     { 
  8.         std::cout << "Stop debugging program!" << std::endl; 
  9.         exit(-1); 
  10.     } 
  11.     return ExceptionContinueExecution; 
  12. int main() 
  13.     __asm 
  14.     { 
  15.         // set SEH handler 
  16.         push ExceptionRoutine 
  17.         push dword ptr fs : [0] 
  18.         mov  dword ptr fs : [0], esp 
  19.     } 
  20.     CloseHandle((HANDLE)0xBAAD); 
  21.     __asm 
  22.     { 
  23.         // return original SEH handler 
  24.         mov  eax, [esp] 
  25.         mov  dword ptr fs : [0], eax 
  26.         add  esp, 8 
  27.     } 
  28.     return 0 

仓库段操纵

(编辑:湖南网)

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

热点阅读