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;
}
posted @ 2020-06-03 09:33  Kakadewo  阅读(732)  评论(0)    收藏  举报