@dyk
2016-03-07T11:21:14.000000Z
字数 798
阅读 803
RollBack
Drakvuf 代码分析
Drakvuf是2014年发表的一篇文章中基于libvmi的恶意软件的检测工具。目前我打算使用他的代码的模式进行日志的记录。
旧的record应用的缺点
- 旧的虚拟机record程序过于老旧大部分都是基于Xen3.3的在文章中提及实现可能会被reviewer挑刺。
- 旧的虚拟机record程序大部分是针对于cpu的determinant replay使用的,重点在于重放能够和上一次的执行一致,但是我们并不需要这些
代码流程
里面貌似使用drakvuf类去封装了drakvuf结构体
重要的数据结构:
- drackvuf类以及结构体
- 插件类型
- event的触发函数
Main函数流程
- 初始化drakvuf类实例,调用构造函数
- 设置自身对于系统信号的处理相应函数
- 是否需要进行命令的注入
- 循环
- 注销drakvuf类实例
drakvuf构造函数
- 设置相关的drakvuf结构数据,rekall_profile;
- drakvuf_init函数,
- 创建xc的接口,初始化互斥锁,获得domain信息
- init_vmi初始化vmi接口,
- 规定输出模式
- 创建一个新的进程运行timer
- drakvuf_plugins给当前的drakvuf实例创建插件。
init_vmi函数初始化vmi
- 获得目标虚拟机配置文件信息
- 初始化libvmi的库接口,获得page mode,vcpu数目,内存大小
- 初始化查询breakpoints的表,解析rekall配置文件
- 给设置相应的事件触发函数并且注册到相应的CPU上面
- 创建create altp2m视图,(影子页表),分别在idx以及idr上面进行创建
- idr视图用来将全部的影子页表映射到zero page上面,由于影子页表已经映射到了zero page上面,那么对它的修改将能够通过与另外的影子页表进行比较而获得。
drakvuf_plugins