Windows反调试总结
前言
以下内容我也不知道写没写全就这样吧,主要是面试时候当时问我反调试都有啥,就说了个TLS,当时是一个都没想起来,这下得好好总结一下
内容参考
加密与解密 第18章 反跟踪技术
合理的分类有助于学习和理解各种反调试技术的原理
以下就分为静态反调试方法与动态反调试方法两大类:
其中静态反调试的分类原理为:程序启动时,系统会根据正常运行和调试运行分配不同的进程环境,通过检测进程环境来检测进程是否处于调试状态;根据逆向人员的工作环境和程序的正常运行环境不同,可以通过检测调试器或逆向分析工具实现反调试。
动态反调试技术的分类原理是:进程运行时的执行流程是否正常,执行状态是否正常。
本文测试环境:
测试代码: https://github.com/alphaSeclab/anti-debug
原版OD
测试环境,这有影响吗,win7和win10和win11都试试
PE编辑器:LordPE
静态反调试
IsDebuggerPresent
首先试了一下调试,有插件的根本不影响
IsDebuggerPresent函数,该函数会检查用户模式调试器是否正在调试该进程。示例代码如下:
int main() |
如果进一步观察IsDebuggerPresent
函数,我们可以找到如下代码:
0:000< u kernelbase!IsDebuggerPresent L3 |
对于x64进程:
0:000< u kernelbase!IsDebuggerPresent L3 |
可以用内联汇编写
bool IsDebuggerR() |
BOOL IsDebuggerPresent(); |
je跳转进行跳转就可以了,那么直接修改jmp
OD进行分析,运行程序,断下点来到如下
7C81F424 > 64:A1 18000000 MOV EAX,DWORD PTR FS:[18] ; 将7FFDD018地址中的值7FFDD00赋值给eax |
eax中的值改为00000000,所以就可以绕过了
所以