基于unicorn-engine的虚拟机的实现(WxSpectre)
反病毒虚拟机是一个很有优势的工具,可以说反病毒软件是否存在模拟器是衡量反病毒软件能力的一个指标。反病毒虚拟机不光是内嵌在反病毒软件内部,来动态执行样本。这种虚拟机一般也可以单独用来动态执行批量样本,检测样本恶意行为,因为它相对virualbox+cuckoo更加的轻巧,节省资源。所以还是有很高的价值的。正因为其高效性与复杂性,现在公开这方面的资料很少。
一、虚拟机vs模拟器
对于恶意样本分析领域,沙箱,虚拟机,模拟器,一个原则就是执行指令不会影响host环境.
| Method | Performance | Execution granularity | System fidelity | |
|---|---|---|---|---|
| VirtualBox | Virtualization/VT | Quick +, heavily | N/A | Very good |
| Bochs | Full emulation | Slow, tiny | Instruction level | Very good |
| Uniron-engine | Emulation/dynamic translation | Quick, tiny | Instruction level | N/A |
virtualbox除过特权指令和部分ring0中运行的指令,是直接在宿主机上运行的。所以运行速度与宿主机没有很大差异。Bochs是纯粹的软件模拟器,另外加上对硬件的模拟,所以其指令执行速度是非常慢的。Unicorn-engine基于动态翻译技术,速度相对于纯粹的指令模拟快的多.
所以如果关心系统仿真度当然选择virtualbox,bochs,但是virtualbox会耗费更多的系统资源。
Unicorn-engine可以虚拟执行x86,x64,arm等指令集。因为其基于动态翻译和部分模拟来执行目标指令,效率比bochs快的多。
很显然,unicorn-engine只是一个”CPU”,所以要想运行样本还缺的是一个windows的运行应用程序的环境。
WxSpectre就是这样基于unicorn-engine的windows仿真环境来实现的虚拟机。
二、关于WxSpectre
Windows是一个多进程环境,这是现代操作系统的普遍的标配。但是在运行恶意样本的时候,我们只关心的恶意样本做了什么,而且为了避免产生干扰一次只能运行一个样本,这就造成了很大的浪费,其实只要满足样本运行所需要的环境就可以,但是我们却提供了一个完整的windows环境,显然杀鸡用了宰牛刀。如果我们只提供运行目标样本所需的基本环境,显然这将节省很多的资源。WxSpectre基本上实现了这一目标。
WxSpectre由两大部分组成:Unicorn-engine+仿真WINDOWS系统环境.WxSpectre实现了大部分的windows执行应用程序的环境,包括文件系统,对象管理,注册表,线程调度,内存管理,异常/中断处理,Windows API(ring3).pe 执行环境初始化模块。
WxSpectre可以跨平台在windows,linux,Mac os,下运行,可以虚拟执行EXE/VBS脚本。
目前实现的功能是:1.api trace.2.运行时内存dump.3.指令trace,4,虚拟调试5.内存字符串提取等。
WxSpectre的框架结构:

1.内存管理:
包括内存的申请释放,堆内存管理。
2.线程调度:
线程切换,线程调度。
3.异常处理:
将cpu的异常传送到hyperviror,然后经过过滤处理,然后分发给相应的处理函数。
4.对象管理:
主要是指对象初始化,对象同步,对象释放,对象的访问。
5.WxVFS:
指的是虚拟文件系统,有点类似于linux的VFS系统,但是所不同的是这里不是为了实现一个统一的文件系统界面,这里主要是虚拟出文件系统的结构。从而使WxSpectre中所有样本访问文件系统的操作得以执行。比如读写文件,创建,删除,文件,目录等。
6.Wxhelper:
所用的api调用将会重定位到这个模块中,然后执行。
7.脚本引擎(WxNscript):
这里的脚本引擎主要用来执行vbs,js脚本.因为现在越来越多的病毒会利用脚本文件了来作为传播载体.
8.兼容层:
在WxSpectre执行应用程序的时候,有的时候需要打补丁,patch某些指令序列从而让样本能顺利执行下去(因为存在某些反虚拟机,反模拟器样本或者其他的异常行为导致执行出现错误,或者奔溃)。
9.虚拟注册表(WxRegistry)
Windows程序执行需要依赖注册表。WxRegistry是对注册表的虚拟。
10.网络访问模块(WxNetwork)
WxNetwork会虚拟出一个sever模块,当有样本请求数据,wxnetwork会与其回话。
WxSpectre的功能:
1. API trace
Api trace是勾勒样本动态行为的一个很重要的方面。这里只记录样本直接调用的api日志。不会记录嵌套在api内部的api调用,这样分析者更加能抓住重点。Cuckoo不好的一点api的记录没有做过滤。
2. 虚拟文件系统(WxVFS)
因为完成了文件系统所以WxSpectre如果捕获到有文件的创建,写入都会被监控。且可以dump创建出的文件。
3.虚拟调试(virtual debugger)
这个功能是非常有用的。因为通常情况下调试病毒必须在虚拟机里面调试。分析者通常需要反复的还原虚拟机,将样本用调试器加载起来,这样会耗费很多的时间。WxSpectre的虚拟调试,完全不依赖虚拟机,启动非常的快。对调试病毒非常的方便。
4. 虚拟注册表&文件监控
监控注册表的访问,读,写,设置,文件及文件夹的创建,读,写,删除等。
5. 进程创建监控
6. 内存dump&及内存字符串dump
三、demo情况
Api trace:
病毒名:DDoS:Win32/Nitol.A
Md5: 4666a8eef0e51323f85f569e083f5bc4、

Drop样本释放的文件:
病毒名:wanncry2.0
Md5: 84c82835a5d21bbcf75a61706d8ab549

WxVFS监控到的病毒创建出来的文件

对应的文件内容
更多关于脱壳能力,注册表监控,进程创建监控,虚拟调试,内存字符串dump,执行速度,这里完整的演示视频。
四、待完成部分
目前脚本执行模块还在完善,调试功能还没有完成。网络模块还没有完成,脱壳能力还需要改善。等到机会合适我将放出这个工具。
基于unicorn-engine的虚拟机的实现(WxSpectre)的更多相关文章
- 基于MACVLAN配置VMWARE虚拟机中容器网络
基于MACVLAN配置VMWARE虚拟机中容器网络 测试部环境组 201711 0 文档说明 MACVLAN是docker的一种支持跨主机网络的driver.macvlan本身是linux kerne ...
- archlinux+UEFI模式在linux主机下基于KVM-QEMU命令行虚拟机安装笔记
ArchLinux十分精简,并且具有强大的滚动更新.最近在基于ubuntu的宿主机下通过KVM-QEMU虚拟机安装了archlinux,将过程记录下来以供参考. 1.下载启动盘 1.1.下载archl ...
- 基于Arcgis Engine 10.2(C#)+PostgreSQL 11(Postgis 3)+pgRouting 3.0实现使用数据库进行路径规划
前言:最近在(被迫)使用ArcGIS Engine10.2(.NET平台)进行二次开发(桌面应用),因为想做一个最短路径查询的功能,而arcgis的网络分析又比较麻烦,于是想到了使用Postgis.但 ...
- 基于Linux系统WINE虚拟机技术的研究
650) this.width=650;" onclick="window.open("http://blog.51cto.com/viewpic.php?refimg= ...
- MacOS通过ssh连接基于Virtualbox的Ubuntu虚拟机
以前总是用Windows软件putty进行ssh连接,今天尝试使用macos. 实验环境:主机:macos 10.15.3 客户机:Ubuntu 18.04 默认情况下,Ubuntu没有安装SSH,需 ...
- HTC Vive 基础入门 基于Unreal Engine 4引擎
主要以讲解介绍HTC Vive设备以及Unreal继承的Steam VR Plugin为主 使用最新的虚幻引擎与Plugin完成VR环境的搭建 然后完成一个基本的VR Games. 任务5: 04-配 ...
- 基于KVM建立虚拟机的步骤及总结说明
1.前言 目前正在涉足云计算IaaS工作,虚拟化是IaaS的重要部分,因此这段时间对各个虚拟机化技术和工具进行研究,研究的目的不仅仅是为了会使用这个工具,而是通过研究了解技术的实现机制和原理,即知其然 ...
- 详解VirtualBox虚拟机网络环境解析和搭建-NAT、桥接、Host-Only、Internal、端口映射
本文以VirtualBox为例 如果出现主机无法ping通虚拟机的情况,请首先确认虚拟机防火墙已关闭. 一.NAT模式 特点: 1.如果主机可以上网,虚拟机可以上网 2.虚拟机之间不能ping通 3. ...
- VirtualBox虚拟机网络环境解析和搭建-NAT、桥接、Host-Only、Internal、端口映射
一.NAT模式 特点: 1.如果主机可以上网,虚拟机可以上网 2.虚拟机之间不能ping通 3.虚拟机可以ping通主机(此时ping虚拟机的网关,即是ping主机) 4.主机不能ping通虚拟机 应 ...
随机推荐
- 在Vue中遇到的各种坑 及性能提升
Vue: (1) 没有再模板里引用data数据,会不会引起update.beforeUpdate生命周期函数的执行? 不会 (2)组件改成异步 (3)v-once (4)如果不用template ...
- nginx 的编译安装及基本操作
下载nginx [root@nginx ~]# wget http://nginx.org/download/nginx-1.14.0.tar.gz --2019-05-02 21:52:23-- h ...
- k8s集群部署之环境介绍与etcd数据库集群部署
角色 IP 组件 配置 master-1 192.168.10.11 kube-apiserver kube-controller-manager kube-scheduler etcd 2c 2g ...
- python基础一 day9 函数升阶(1)
函数 可读性强 复用性强def 函数名(): 函数体 return 返回值所有的函数 只定义不调用就一定不执行 先定义后调用 函数名() #不接收返回值返回值 = 函数名() #接收返回值 返回值 没 ...
- C ++ _基础之共用体
由以下代码来进一步学习共用体 #include <stdio.h> #include<iostream> void main() { union un { int a; cha ...
- python爬虫---从零开始(六)Selenium库
什么是Selenium库: 自动化测试工具,支持多种浏览器.支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera ...
- python爬虫---从零开始(四)BeautifulSoup库
BeautifulSoup是什么? BeautifulSoup是一个网页解析库,相比urllib.Requests要更加灵活和方便,处理高校,支持多种解析器. 利用它不用编写正则表达式即可方便地实现网 ...
- openjudge-1664 放苹果
总时间限制: 1000ms 内存限制: 65536kB 描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. 输 ...
- linux(php环境) 安装ffmpeg
实现上传视频获取视频的第一帧当做视频封面 1.安装ffmpeg ffmpeg的下载链接 https://ffmpeg.org/download.html 解压安装包 tar -jxvf ffmpeg ...
- [Noip2017][Day 1][T1]玩具谜题(toy.cpp)
题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业. 有一天, 这些玩具小人把小南的眼镜藏了起来. 小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外.如下图: 这时singer告诉 ...