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

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 17:55   1060   0

一、反调试

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

在程序启动后,会有一个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;

其中的参数很多,不过我们只关心DWORD类型的变量。

要想弄懂问题,我们就先来看看代码吧。

 1 #include <windows.h> 
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP