反沙箱——SetErrorMode
目录
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的更多相关文章
- 基于深度学习的病毒检测技术无需沙箱环境,直接将样本文件转换为二维图片,进而应用改造后的卷积神经网络 Inception V4 进行训练和检测
话题 3: 基于深度学习的二进制恶意样本检测 分享主题:全球正在经历一场由科技驱动的数字化转型,传统技术已经不能适应病毒数量飞速增长的发展态势.而基于沙箱的检测方案无法满足 APT 攻击的检测需求,也 ...
- 恶意软件/BOT/C2隐蔽上线方式研究
catalogue . 传统木马上线方式 . 新型木马上线方式 . QQ昵称上线 . QQ空间资料上线 . 第三方域名上线 . UDP/TCP二阶段混合上线 . Gmail CNC . NetBot两 ...
- 2016年的EK工具
什么是Exploit Kit? 预打包了安装程序.控制面板.恶意代码以及相当数量的攻击工具.通常基于PHP的一个软件. Exploit Kit经济体制 价格在成百上千美元: 可以按日/周/月来付租金: ...
- java安全沙箱(一)之ClassLoader双亲委派机制
java是一种类型安全的语言,它有四类称为安全沙箱机制的安全机制来保证语言的安全性,这四类安全沙箱分别是: 类加载体系 .class文件检验器 内置于Java虚拟机(及语言)的安全特性 安全管理器及J ...
- 联邦学习开源框架FATE助力腾讯神盾沙箱,携手打造数据安全合作生态
近日,微众银行联邦学习FATE开源社区迎来了两位新贡献者——来自腾讯的刘洋及秦姝琦,作为云计算安全领域的专家,两位为FATE构造了新的功能点,并在Github上提交修复了相关漏洞.(Github项目地 ...
- class-dump 反编译私有的库和应用
一.下载并安装class-dump 下载class-dump-3.5.dmg 点击下载 下载完成以后双击.dmg的文件,将里面的class-dump拷贝到/usr/local/bin 设置权限chm ...
- iOS 原生地图地理编码与反地理编码
当我们要在App实现功能:输入地名,编码为经纬度,实现导航功能. 那么,我需要用到原生地图中的地理编码功能,而在Core Location中主要包含了定位.地理编码(包括反编码)功能. 在文件中导入 ...
- MySql LIKE 查找带反斜线“\”的记录
解决方法是在反斜线“\前加“\\\”三个反斜杠. SELECT * FROM 表名 AS a WHERE a.字段 \\\\qc0npwqe.3v4', '%') 原理: 写成三个'\'的原因是反斜线 ...
- 反编译.NET工程
工具: 1. .Net Reflector 2. 远程桌面 步骤: 1. 远程桌面连接到服务器 IP,port,user,pwd 2. 打开 IIS 这里面就是所部属的网 ...
随机推荐
- DC综合简单总结(2)
DC综合简单总结(2) 建立时间和保持时间和数据输出延时时间 一.概念 建立时间和保持时间都是针对触发器的特性说的. 建立时间(Tsu:set up time) 是指在触发器的时钟信号上升沿到来以前, ...
- Java基础——Instanceof 运算符
Instanceof 运算符 java 中的instanceof 运算符是用来在运行时指出对象是否为特定类的一个实例 instanceof运算返回值:boolean类型 用法 boolean resu ...
- js 检测输入内容是否为空(小程序,网站)
一.输入内容只要有空格就会返回true if(/\s*/.test(data)){ return true }else{ return false } 二.先替换掉空格,更利于赋值或者判断 1.需要判 ...
- 用JDBC连接SQL Server2017数据库
用JDBC连接SQL Server2017数据库 2018年03月26日 17:40:47 yasinzhang 阅读数:8346 安装完SQL server2017之后,选择SQL 身份验证登录,可 ...
- spring-cloud-hystrix-dasboard服务调用监控
除了隔离依赖服务的调用以外,hystrix还提供了准实时的调用监控(hystrix dashboard),hystrxi会持续的记录所有通过hyxtrix发起的请求的执行信息,并以统计报表和图形的形式 ...
- J2EE_Maven_POM文件配置的详解(转)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- 末学者笔记--rpm和yum软件管理(Linux)
一.rpm简介 这是一个数据库管理工具,可以通过读取数据库,判断软件是否已经安装,如果已经安装可以读取出来所有文件的所在位置等,并可以实现删除这些文件. rpm:RPM is Redhat Packa ...
- python的学习之路(一)
1.python的简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为AB ...
- Unity引擎相关知识UnityKnowledgeHyperlink
请简述Unity中的四种坐标系 http://liuqingwen.me/blog/2017/07/31/understanding-coordinate-system-in-unity3d/
- 获取clock ticks per second
#include <sys/syscall.h> #include <stdio.h> #include <unistd.h> int main() { print ...