nitro
nitro需要libvmi获取更多信息,libvmi的Python binding,因此涉及到github上面两个项目:
nitro
- 现版本
    
- linux:4.9.0
 - qemu:2.8.0
 
 - 目标版本
    
- linux:4.10.2
 - qemu:2.6.0
 
 
Using
对应的KVM/QEMU,recall, libvmi配置之后,执行main.py,参数为libvirt的domain name,用来绑定QEMU pid,
./main win7
VM启动方式
Virsh
连接hypervisor
virsh connect [*hostname-or-URI*] [--readonly]
virsh connect qemu:///system,作为root用户连入qemu:///session,作为用户连入
qemu-system-x86_64
ps -ef | grep qemu-system-x86_64
显示qemu-system-x86_64启动的所有进程,进程号以及启动参数。
Setup
1. python3、pip3
2. docopt
pip install docopt==0.6.2
注意:这里需要pip/pip2安装docopt,因为是rekall需要使用。包括后续依赖future,需要pip/pip2安装future==0.16.0。
3.libvirt
xml配置文件tests/下有模板。虚拟机名字要和nitro/libvmi.conf里面的一致。
python binding
sudo apt install python3-libvirt
virsh创建虚拟机
virsh define win7x86.xml
virsh start domain
virsh reboot domain
virsh shutdown domain
gvncviewer 127.0.0.1:0
重点配置好xml文件就可以了。
4. Ioctl-opt Python3
pip3 install ioctl-opt==1.1
5.libvmi python bindings
后面会有vmi_request_page_fault,这个结果python binding里面有,nitro/libvmi里面没有
- 所以吧python binding里面的删除掉即可,
 - Merge pull request #42 from libvmi/add_vmi_request_page_fault,该commit回滚到之前就行
 
libvmi
- 依赖
 
sudo apt install cmake flex bison libglib2.0-dev libvirt-dev libjson-c-dev libyajl-dev check
- 编译安装
 
mkdir build
cd build
cmake ..
make
sudo ldconfig
sudo make install
- 配置
nitro/libvmi.conf, 配置要监控的虚拟机名字 
win7x64 {
    ostype      = "Windows";
    win_tasks   = 0x188;
    win_pdbase  = 0x28;
    win_pid     = 0x180;
    win_pname   = 0x2e0;
}
libvmi/python
- 依赖
 
pip3 install pkgconfig==1.0.0
pip3 install cffi
pip3 install future==0.16.0
- 编译安装
 
python3 setup.py build
sudo python3 setup.py install
rekall
由于作者作者脚本引用的是Python2版本的rekall,所以要使用pip/pip2安装。
python 2.7需要安装libffi-dev, 其余版本2.x, 3.x 已经默认安装python-dev/python3-dev。
sudo apt install libffi-dev
sudo pip3 install --upgrade setuptools pip wheel
sudo pip3 install rekall
安装完rekall之后一定先运行一下rekall,如果运行成功再运行nitro。
其余的缺啥补啥。
TypeError
sudo python3 main.py win7x64
如果带上--nobackend一切正常,没有的话会出现问题
TypeError: NewZipFile() takes exactly 3 arguments (2 given)
TypeError:XXX takes exactly 3 arguments (2 given)
由于aff4升级出现的问题,rekall使用的PyAFF4==0.26.post6
pip install PyAFF4==0.26.post6