基于STARTUPINFO的反调试与反反调试

本文探讨了程序的反调试策略,通过分析STARTUPINFO结构体在正常运行和调试状态下的差异来检测调试器。同时,针对反反调试,介绍了如何通过修改汇编代码来绕过调试检测。此外,还提到了多种虚拟机检测方法,包括特权指令、IDT基址、LDT/GDT、STR、注册表检查、时间差和硬件指纹检测等。
摘要由CSDN通过智能技术生成

一、反调试

     为了保护自己的程序,现在很多程序都加入了反调试,那么,有什么简单的方法来进行调试检测么?

在程序启动后,会有一个STARTUPINFO的结构体变量,来保存程序启动的信息,我们通过其中参数的改变来检测程序是正常运行还是在调试器中运行的。

在一般情况下,程序是由explorer.exe调用的(如果对此有疑问,你可以安装一个hips来了解下,例如:2012/4/17 星期二 15:23:42 c:\windows\explorer.exe 创建新进程 d:\program files\屏幕录像专家\屏录专家.exe 允许 [应用程序]* 命令行: "D:\Program Files\屏幕录像专家\屏录专家.exe" ),具体就是explorer.exe使用shell32中的ShellExecute来运行程序,而ShellExecute会在执行时清除不使用的值。而如果程序是由OD调用的话,会对STARTUPINFO结构体中的dwFlags 进行修改。

好,下面我们先来具体看看STARTUPINFO结构体的情况:

 

 1     typedef struct _STARTUPINFOW {
 2         DWORD   cb;
 3         LPWSTR  lpReserved;
 4         LPWSTR  lpDesktop;
 5         LPWSTR  lpTitle;
 6         DWORD   dwX;
 7         DWORD   dwY;
 8         DWORD   dwXSize;
 9         DWORD   dwYSize;
10         DWORD   dwXCountChars;
11         DWORD   dwYCountChars;
12         DWORD   dwFillAttribute;
13         DWORD   dwFlags;
14         WORD    wShowWindow;
15         WORD    cbReserved2;
16         LPBYTE  lpReserved2;
17         HANDLE  hStdInput;
18         HANDLE  hStdOutput;
19         HANDLE  hStdError;
20     } STARTUPINFOW, *LPSTARTUPINFOW;

其中的参数很多,不过我们只关心

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值