目录

1.前言

2.原理讲解

3.代码实现

4.参考

1.前言

利用SetErrorMode进行反沙箱的技术,在2010年就有被提出,但是之前搜了很久都没有相关内容,这里简单的说一下这个反沙箱的实现。反沙箱参考GandCrab5.2。

2.原理讲解

首先讲一下SetErrorMode这个函数,SetErrorMode是用于设置如何处理程序错误的,设置不同的值有不同的作用,下面是机翻的结果。

而SetErrorMode有一个特点就是返回值为上次设置的值,如下代码和结果。

 1 #include<Windows.h>
 2 #include<stdio.h>
 3
 4 int main()
 5 {
 6   DWORD dwCode;
 7   //开始没有设置任何值,所以返回值为0
 8   dwCode = SetErrorMode(SEM_FAILCRITICALERRORS);
 9   printf("the first dwCode:0x%x\n", dwCode);
10
11   //这里设置值SEM_NOGPFAULTERRORBOX是2,返回值为前面设置的值所以为1
12   dwCode = SetErrorMode(SEM_NOGPFAULTERRORBOX);
13   printf("the second dwCode:0x%x\n", dwCode);
14
15   return 0;
16 }

但是这里有一个特别的参数SEM_NOALIGNMENTFAULTEXCEPT,简单来说就是设置这个值后就不会消除这个值。

 1 #include<Windows.h>
 2 #include<stdio.h>
 3
 4 int main()
 5 {
 6   DWORD dwCode;
 7   //开始没有设置任何值,所以返回值为0
 8   dwCode = SetErrorMode(SEM_NOALIGNMENTFAULTEXCEPT);
 9   printf("the first dwCode:0x%x\n", dwCode);
10
11   //这里设置为SEM_NOGPFAULTERRORBOX,返回值为上次设置的值为0x4
12   dwCode = SetErrorMode(SEM_NOGPFAULTERRORBOX);
13   printf("the second dwCode:0x%x\n", dwCode);
14
15   //这里设置为SEM_FAILCRITICALERRORS,返回值却不为0x2,这是由于前面设置的SEM_NOALIGNMENTFAULTEXCEPT不会清除,所以叠加0x4+0x2
16   dwCode = SetErrorMode(SEM_FAILCRITICALERRORS);
17   printf("the second dwCode:0x%x\n", dwCode);
18
19   return 0;
20 }

3.代码实现

那上面讲解的内容和反沙箱有什么关系呢?我们先看看cuckoosandbox里的一段代码,沙箱会预先设置值用于监控错误的发生,这里就用到了SetErrorMode并且其中的参数有SEM_NOALIGNMENTFAULTEXCEPT。

由于沙箱和运行的样本类似于进程和之进程的关系,所以利用SetErrorMode才可以检测,如果是同一系统下的两个进程设置了SetErrorMode是不会相互影响的。那么就可以利用这个设置来模拟一下沙箱环境下代码的运行情况,代码和效果如下

 1 #include<Windows.h>
 2 #include<stdio.h>
 3
 4 int main()
 5 {
 6   //模拟沙箱环境设置
 7   SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOALIGNMENTFAULTEXCEPT | SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX);
 8
 9   DWORD dwCode ;
10   dwCode = SetErrorMode(0x400);    //虽然没有参数的值为0x400,但是这里设置也可以正常运行
11   //这里返回前面设置的值,0x1+0x2+0x4+0x8000=0x8007
12   printf("the first dwCode:0x%x\n", dwCode);
13   dwCode = SetErrorMode(0x0);
14   //由于之前设置了SEM_NOALIGNMENTFAULTEXCEPT,所以这里返回值为是0x400+0x4=0x404
15   printf("the second dwCode:0x%x\n", dwCode);
16   //在沙箱下返回0x404与0x400不相等,所以可以判断是在沙箱下。如果在正常情况下返回0x400
17   if (dwCode != 0x400)
18   {
19     printf("In Sandbox\n");
20   }
21   else
22   {
23     printf("In normal machine\n");
24   }
25
26   return 0;
27 }

4.参考

http://joxeankoret.com/blog/2010/02/23/antiemulation-techniques-malware-tricks-ii/

https://asec.ahnlab.com/1202

转载于:https://www.cnblogs.com/QKSword/p/10739142.html

反沙箱——SetErrorMode相关推荐

  1. 反沙箱CobaltStrike木马加载器分析

    总结 1.计算Sleep类函数延时时间与实际流逝时间是否匹配可判断环境是否为正常.对沙箱来说,跳过Sleep节约时间成本是有必要的不可省去,但可适当处理GetTickCount类函数,使其与延时时间匹 ...

  2. 基于深度学习的病毒检测技术无需沙箱环境,直接将样本文件转换为二维图片,进而应用改造后的卷积神经网络 Inception V4 进行训练和检测...

    话题 3: 基于深度学习的二进制恶意样本检测 分享主题:全球正在经历一场由科技驱动的数字化转型,传统技术已经不能适应病毒数量飞速增长的发展态势.而基于沙箱的检测方案无法满足 APT 攻击的检测需求,也 ...

  3. 拿什么保护你,我的区块链

    被纳入新基建的区块链,以数据不可篡改.可公开监管.便于查证的特性,广泛应用于有多方参与的系统中,为多方交互的信息(行为.数据等)提供可靠的存证.那么,在信息上链接受公开监管的同时,能否为信息提供隐私保 ...

  4. gamaredon_Gamaredon组织某样本分析

    0x01 Запит СБУ.docx文档分析 打开文档后,远程注入模板: 文档内容如下: 翻译后内容如下: 由图标也可以看出: 0x02 opt.dot模板分析 模板启用了宏,通过olevba.py ...

  5. 远控免杀专题(23)-SharpShooter免杀

    转载:https://mp.weixin.qq.com/s/EyvGfWXLbxkHe7liaNFhGg 免杀能力一览表 几点说明: 1.上表中标识 √ 说明相应杀毒软件未检测出病毒,也就是代表了By ...

  6. 俄罗斯国家黑客TA505被指攻击金融机构

     聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 MirrorBlast 公司指出,和俄罗斯存在关联的威胁组织 TA505 使用一个轻量级 Office 文档向位于多个地点的金融机构传播恶意软件 ...

  7. Smoke Loader、AZORult木马通过虚假海啸警报传播到了日本

    在上个月,FortiGuard Labs的研究人员发现了一起针对日本公民的垃圾电子邮件活动.这些电子邮件伪装成海啸警报,且均包含一个指向虚假日本气象厅(JMA)网站的恶意链接.点击这个链接,会导致Sm ...

  8. Smoke Loader、AZORult***通过虚假海啸警报传播到了日本

    在上个月,FortiGuard Labs的研究人员发现了一起针对日本公民的垃圾电子邮件活动.这些电子邮件伪装成海啸警报,且均包含一个指向虚假日本气象厅(JMA)网站的恶意链接.点击这个链接,会导致Sm ...

  9. 静态扫描之Yara第一话--安装及使用Yara

    Yara安装及使用 概述 Yara是一款用于识别恶意软件及对其行为进行分类的安全利器.Yara会根据我们自己编写的yara规则,来对可疑软件进行一个模式匹配,若可疑软件中的一些特征与我们的yara规则 ...

最新文章

  1. spring事务介绍
  2. 【机器学习PAI实践六】金融贷款发放预测
  3. android开发之EditText默认hint字体大小
  4. 深入理解右值引用,move语义和完美转发
  5. Migrate Instance 操作详解 - 每天5分钟玩转 OpenStack(40)
  6. anaconda安装python视频_怎么安装anaconda?
  7. 去掉“搜一搜”后,让“查看新贴”等按钮居中
  8. asp.net很有用的字符串操作类
  9. java-io-FileReader和FileWriter类
  10. 如何在 Apache Flink 1.10 中使用 Python UDF?
  11. Qt配置OpenCV教程
  12. 做在线交易你必须知道的关于支付的知识
  13. Zetero+zotfile+坚果云配置
  14. 使用wxpy实现在微信定时发送文件和消息
  15. 诗歌一 我自倾杯,君且随意
  16. train data 和 model bias 对 Mutilayer Perceptrons 的影响
  17. 【90】RootPort的completion timeout为什么不能阻止CPU发生MCE
  18. C语言实训 实训项目一 统计歌唱比赛成绩
  19. 数据分析三剑客之特征值提取(七)
  20. Java面向对象练习题

热门文章

  1. 问题 1076: 内部收益率
  2. NOIP模拟测试20「周·任·飞」
  3. 嵊州D5T2 折纸 folding
  4. 【luogu 1024 一元三次方程求解】二分思想
  5. Java - 文件(IO流)
  6. c语言main函数的参数argc,argv说明
  7. MySql命令行基本操作
  8. python list转map_Python 进阶之术 Map Filter Reduce
  9. 怎么创建数据表的实体类和业务类_怎样创建一个网站?
  10. centos 编译mysql5.6_centos下编译安装MySQL5.6