在学习Win32 创建进程的时候.我们发现了有一个进程信息结构体. STARTUPINFO. 这个结构体可以实现反调试.
具体CreateProcess可以参考上一篇博客.: https://cloud.tencent.com/developer/article/1348764
假设我们要实现反调试. 那么我们需要一个API
GetStartupInfo (STARTUPINFO) 使用此API可以在进程启动的时候获取启动信息结构体
1.我们的程序中调用Getstartupinfo API来获取启动时的启动信息.
2.判断启动信息结构体的值.是否是我们预期的.如果不是在调用 ExitProcess结束进程.
3.如果是调试器启动我们的程序.那么启动信息结构体的信息肯定是不同了.我们可以做实验.
测试:
如果是桌面管理器打开.
如果是调试器打开.
代码很简单.如下.
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
int main()
{
STARTUPINFO si;
si.cb = sizeof(si);
GetStartupInfo(&si);
if (si.dwFlags != 1)
{
ExitProcess(0);
}
printf("程序没有被反调试\r\n");
system("pause");
return 0;
}
测试. 没有反调试的时候打开.
调试器打开. PS: 调试器打开会退出. 并且不会输出内容. 这个属于简单的反调试.如果不知道有可能也过不了. 当然攻防对抗.看谁的基础扎实. 谁更厉害了.