26种对付反调试的方法
副标题[/!--empirenews.page--]
目前主要有3种分析软件的方法: 1.数据交换分析,研究人员使用数据包嗅探工具来分析网络数据交换。 2.对软件的二进制代码进行反汇编,然后以汇编语言列出。 3.字节码解码或二进制解码,然后以高级编程语言重新创建源代码。 本文针对的是Windows操作系统中常用的防破解及防逆向工程保护技术,即反调试方法,各种防逆向工程技术的主要目标是尽可能多的使逆变工具尽可能失效。 本文的对付反调试方法,总共涉及26种: 1. IsDebuggerPresent 2. PEB(进程环境块) 3.如何避开IsDebuggerPresent的检查 4. TLS回调 5.NtGlobalFlag 6.如何避开NtGlobalFlag检查 7.NtGlobalFlag和IMAGE_LOAD_CONFIG_DIRECTORY 8.HeapFlag和ForceFlags 9.如何避开HeapFlag和ForceFlags 10.陷阱标识检查 11如何避开陷阱标识检查 12.CheckRemoteDebuggerPresent和NtQueryInformationProcess 13.如何避开CheckRemoteDebuggerPresent和NtQueryInformationProcess 14.基于NtQueryInformationProcess的其他反调试保护技术 15.如何避开NtQueryInformationProcess检查 16.软件和硬件的断点反应 17.SEH(结构化异常处理) 18.如何避开SHE检查 19.VEH(向量化异常处理) 20.如何避开硬件断点检查和VEH 21.NtSetInformationThread ,在调试工具中隐藏线程 22.如何避开从调试工具中隐藏线程 23.NtCreateThreadEx 24. 如何避开NtCreateThreadEx 25.处理跟踪 26.堆栈段操作 建议你在阅读本文时,先具备一定的Assembler知识,一些Windbg操作经验以及使用API函数开发Windows的经验。 IsDebuggerPresent 也许最简单的方法是调用IsDebuggerPresent函数,用此函数检测用户模式的调试器是否正在调试调用进程。下面的代码就是一个基本的保护案例:
如果我们来看看IsDebuggerPresent函数,我们会发现这样的代码:
Windows X64里的进程如下:
在FS寄存器的偏移量30h处存在PEB(进程环境块),而在X64上,PEB(进程环境块)存在于GS段寄存器的偏移量60h处。在PEB中的2个偏移量处,我们将找到BeingDebugged字段:
即IsDebuggerPresent函数读取BeingDebugged字段的值。如果进程被调试,值为1,否则为0。 PEB(进程环境块) PEB是在操作系统内使用的封闭结构。在不同地运行环境下,大家应该以不同的方式获取PEB结构指针。如下所示,你可以在下图中找到x32和x64系统的PEB指针:
(编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |