目录

1.前言

2.原理讲解

3.代码实现

4.参考

1.前言

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

2.原理讲解

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

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

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

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

 #include<Windows.h>
#include<stdio.h> int main()
{
DWORD dwCode;
//开始没有设置任何值,所以返回值为0
dwCode = SetErrorMode(SEM_NOALIGNMENTFAULTEXCEPT);
printf("the first dwCode:0x%x\n", dwCode); //这里设置为SEM_NOGPFAULTERRORBOX,返回值为上次设置的值为0x4
dwCode = SetErrorMode(SEM_NOGPFAULTERRORBOX);
printf("the second dwCode:0x%x\n", dwCode); //这里设置为SEM_FAILCRITICALERRORS,返回值却不为0x2,这是由于前面设置的SEM_NOALIGNMENTFAULTEXCEPT不会清除,所以叠加0x4+0x2
dwCode = SetErrorMode(SEM_FAILCRITICALERRORS);
printf("the second dwCode:0x%x\n", dwCode); return ;
}

3.代码实现

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

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

 #include<Windows.h>
#include<stdio.h> int main()
{
//模拟沙箱环境设置
SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOALIGNMENTFAULTEXCEPT | SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX); DWORD dwCode ;
dwCode = SetErrorMode(0x400); //虽然没有参数的值为0x400,但是这里设置也可以正常运行
//这里返回前面设置的值,0x1+0x2+0x4+0x8000=0x8007
printf("the first dwCode:0x%x\n", dwCode);
dwCode = SetErrorMode(0x0);
//由于之前设置了SEM_NOALIGNMENTFAULTEXCEPT,所以这里返回值为是0x400+0x4=0x404
printf("the second dwCode:0x%x\n", dwCode);
//在沙箱下返回0x404与0x400不相等,所以可以判断是在沙箱下。如果在正常情况下返回0x400
if (dwCode != 0x400)
{
printf("In Sandbox\n");
}
else
{
printf("In normal machine\n");
} return ;
}

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. flask学习(二)

    一.蓝图 作用:给开发者提供目录结构 功能:1.自定义模板.静态文件目录 2.给一类url加前缀    3.给一类url添加before_request 目录结构 from flask_werkzur ...

  2. PHP Request请求封装

    /** * Request请求封装 * Class Request * @package tool */ class Request { // curl 请求错误码 protected static ...

  3. HTML5 移动端Meta设置

    1.   强制让文档的宽度与设备的宽度保持1:1,并且文档最大的宽度比例是1.0,且不允许用户点击屏幕放大浏览. <meta name="viewport" content= ...

  4. Lesson 1-2

    1.5 模块 模块可视为扩展,通过将其导入可以扩展python的功能.python中自带有一组模块,也称为“标准库”. 1.5.1 模块的导入:import + 模块名称 • 使用关键字import导 ...

  5. http 四大特征

  6. Django组件-中间件

    1.中间件的概念 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.因为改变的是全局,所以需要谨慎实用,用不好会影 ...

  7. Photoshop 操作

    本文主要记录在工作过程中使用ps的一些快捷键或操作顺序 1.ctrl+H:取消标尺 2.ctrl+D:取消选区 3.看矩形尺寸:选中矩形图层 >窗口 >属性(w:宽  H:高) 4.看图层 ...

  8. Linux-进程描述(1)—进程控制块

    进程概念介绍 进程是操作系统对运行程序的一种抽象. • 一个正在执行的程序: • 一个正在计算机上执行的程序实例: • 能分配给处理器并由处理器执行的实体: • 一个具有普以下特征的活动单元:一组指令 ...

  9. 集腋成裘-11-sql性能优化

    SQL Nexus是一个用于将SQL Trace数据.性能监视日志及T-SQL输出整合进一个单独的SQL Server数据库的工具. 先决条件 开始使用SQL Nexus之前,注意下面要做的事项: 安 ...

  10. eclipse中alt+/失效的几种解决方法

    1.次方法用于没有一点提示的情况:依次打开eclipse上面的windows ——preferences ——java ——editor —— content assist ,在右上方有一行“sele ...