跳转至

造成蓝屏死机

如果你认真对待混淆,你甚至可以在检测到调试器时触发蓝屏死机(BSOD)。一种方法是使用 SetProcessIsCritical()Windows API 函数把你的机器人进程设置为关键进程,然后调用 exit(),因为关键进程被终止时 Windows 会触发 BSOD。以下是你可能这样做的方式:

void BSODBaby() {
    typedef long (WINAPI *RtlSetProcessIsCritical)
        (BOOLEAN New, BOOLEAN *Old, BOOLEAN 
NeedScb);
    auto ntdll = LoadLibraryA("ntdll.dll");
    if (ntdll) {
        auto SetProcessIsCritical = 
(RtlSetProcessIsCritical)
            GetProcAddress(ntdll, "
RtlSetProcessIsCritical");
        if (SetProcessIsCritical)
            SetProcessIsCritical(1, 0, 0);
    }
}
BSODBaby();
exit(1);

或者你可能是邪恶的,在这种情况下你可以这样做:

BSODBaby();
OutputDebugString("%s%s%s%s");
recurse1();
exit(1);

假设你实现了本节描述的所有技术,这段代码会造成 BSOD、让调试器崩溃(如果是 OllyDbg v1.10)、溢出栈并退出运行中的程序。如果其中任何一种方法失败或被修补,分析师在继续调试前仍然必须处理其余方法。