目录

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 ;
  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 ;
  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 ;
  27. }

4.参考

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

https://asec.ahnlab.com/1202

反沙箱——SetErrorMode的更多相关文章

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

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

  2. 恶意软件/BOT/C2隐蔽上线方式研究

    catalogue . 传统木马上线方式 . 新型木马上线方式 . QQ昵称上线 . QQ空间资料上线 . 第三方域名上线 . UDP/TCP二阶段混合上线 . Gmail CNC . NetBot两 ...

  3. 2016年的EK工具

    什么是Exploit Kit? 预打包了安装程序.控制面板.恶意代码以及相当数量的攻击工具.通常基于PHP的一个软件. Exploit Kit经济体制 价格在成百上千美元: 可以按日/周/月来付租金: ...

  4. java安全沙箱(一)之ClassLoader双亲委派机制

    java是一种类型安全的语言,它有四类称为安全沙箱机制的安全机制来保证语言的安全性,这四类安全沙箱分别是: 类加载体系 .class文件检验器 内置于Java虚拟机(及语言)的安全特性 安全管理器及J ...

  5. 联邦学习开源框架FATE助力腾讯神盾沙箱,携手打造数据安全合作生态

    近日,微众银行联邦学习FATE开源社区迎来了两位新贡献者——来自腾讯的刘洋及秦姝琦,作为云计算安全领域的专家,两位为FATE构造了新的功能点,并在Github上提交修复了相关漏洞.(Github项目地 ...

  6. class-dump 反编译私有的库和应用

    一.下载并安装class-dump 下载class-dump-3.5.dmg  点击下载 下载完成以后双击.dmg的文件,将里面的class-dump拷贝到/usr/local/bin 设置权限chm ...

  7. iOS 原生地图地理编码与反地理编码

    当我们要在App实现功能:输入地名,编码为经纬度,实现导航功能. 那么,我需要用到原生地图中的地理编码功能,而在Core Location中主要包含了定位.地理编码(包括反编码)功能. 在文件中导入 ...

  8. MySql LIKE 查找带反斜线“\”的记录

    解决方法是在反斜线“\前加“\\\”三个反斜杠. SELECT * FROM 表名 AS a WHERE a.字段 \\\\qc0npwqe.3v4', '%') 原理: 写成三个'\'的原因是反斜线 ...

  9. 反编译.NET工程

    工具:       1.  .Net Reflector       2.   远程桌面 步骤: 1. 远程桌面连接到服务器 IP,port,user,pwd 2. 打开 IIS 这里面就是所部属的网 ...

随机推荐

  1. window10:jdk 8下载和安装步骤

    window10:jdk 8下载和安装步骤 点击链接:https://blog.csdn.net/qq_39720249/article/details/80721719

  2. dash视频服务器本地搭建 (初探)

    2019-4-17 15:54:17 星期三 技术说明: dash: 将一个大视频分解成不同分辨率, 不同清晰度的小视频, 以及一个描述文件(后缀: mpd), 根据网络带宽自动调整视频流, 看起来更 ...

  3. windows 下 配置 github

       github   功能介绍 1. 记录多个版本 2.查看历史操作,可以进行版本回退和前进的控制 3. 多端共享代码,自动合成  Github  与  SVN   1.  SVN 版本集中管理,所 ...

  4. hbase学习一 shell命令操作

    基本操作: #命名空间级别: #列出所有命名空间 hbase> list_namespace #新建命名空间 hbase> create_namespace 'ns1' #删除命名空间 h ...

  5. 初学python之路-day09

    今天的主要内容为内存管理. 1.引用计数:垃圾回收机制的依据 # 1.变量的值被引用,该值的引用计数 +1 # 2.变量的值被解绑,该值的引用计数 -1 # 3.引用计数为0时就会被垃圾回收机制回收 ...

  6. iOS 仿抖音 视频裁剪

    1.最近做短视频拍摄.其中的裁剪界面要做得和抖音的视频裁剪效果一样 需求:  裁剪有一个最大裁剪时间.最小裁剪时间.左右拖动可以实时查看对应的视频画面.拖动进度条也能查看对应的画面 .拖动底部视图也能 ...

  7. web---资源的下载及中文乱码问题

    1.html网页,超链接交由Servlet处理 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  8. Django与Ajax

    一.Ajax简介 AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进行异步交互,传输 ...

  9. VIM 编辑器

    可视化模块 进入vi/vim编辑器,按CTRL+V进入可视化模式(VISUAL BLOCK) 2 移动光标上移或者下移,选中多行的开头,如下图所示 3 选择完毕后,按大写的的I键,此时下方会提示进入“ ...

  10. 物化视图(materialized view) 实现数据迁移、数据定时同步

    近日公司有一个9i 的Oracle数据库,运行效率低下.想要将其升级到11G. 但是升级之前 要将数据进行同步,好在表不是很多.只有三张表.业务压力也不大,就想到了使用物 化视图的方式将数据同步过来. ...