SetErrorMode反沙箱
作用
SetErrorMode是用于设置如何处理程序错误的,设置不同的值有不同的作用
特点
返回上一次设置的值,如
#include <iostream>
#include<windows.h>
int main()
{
int nValue;
// SEM_NOALIGNMENTFAULTEXCEPT(4) 设置后不会消除
nValue = SetErrorMode(SEM_NOALIGNMENTFAULTEXCEPT); // 第一次设置为 4
printf("第一次的nValue为:%d\n",nValue); // 只返回上一次设置的值,所以这里是 0
nValue = SetErrorMode(SEM_NOGPFAULTERRORBOX); //这里设置值2,但是SetErrorMode 返回上次设置的值
printf("第二次的nValue为:%d\n", nValue); //这里返回 4
nValue = SetErrorMode(SEM_NOOPENFILEERRORBOX); //这里设置值0x8000,但是SetErrorMode 返回上次设置的值
printf("第三次次的nValue为:%d\n", nValue); //这里返回 6 所以会叠加【因为SEM_NOALIGNMENTFAULTEXCEPT的值不会被消除】
}

反沙箱
有的沙箱会预先设置 SetErrorMode的值为(SEM_NOALIGNMENTFAULTEXCEPT),防止错误发生
#include <iostream>
#include<windows.h>
int main()
{
// SetErrorMode(SEM_NOALIGNMENTFAULTEXCEPT);
SetErrorMode(0x400);
if (SetErrorMode(0x0) == 0x400)
{
printf("正常运行\n");
}
else
{
printf("检测到沙箱\n"); // 如果沙箱事先设置了SetErrorMode(SEM_NOALIGNMENTFAULTEXCEPT)
WinExec("calc.exe",0); // 那么这里的值就是 0x4+0x400
}
return 0;
}

浙公网安备 33010602011771号