2011年10月27日

Some notes for TEMU

最近在研究UCB的Dawn Song教授带领她们实验室所开发的BitBlaze系统 (a binary analysis platform),目前研究的是其中的TEMU模块。TEMU是基于Linux下著名虚拟机QEMU的dynamic analysis tool 。在QEMU的基础之上,它可以做taint analysis、API跟踪……功能是很强大的,不过最近的版本已经是2009年发布的,推荐的平台是ubuntu 9.04,一个已经不被支持的平台。我花了不少功夫想让它在最新的ubuntu 11.10中运行起来,但是gcc-3.4在ubuntu 11.10中连hello world都编译不了,似乎有一些库文件和新版冲突了。据说卸载gcc-4可缓解,不过我的方法是换成ubuntu 10.10。虽然ubuntu 10.10不如11.10漂亮,不过界面还可以接受。
首先,TEMU需要用gcc-3.4编译,而gcc-3.4已经消失在ubuntu的软件库中了。推荐到此下载deb安装包http://archive.ubuntu.com/ubuntu/pool/universe/g/gcc-3.4/
所需安装包有:
gcc-3.4-base_3.4.6-6ubuntu3_i386.deb、
gcc-3.4_3.4.6-6ubuntu3_i386.deb、
cpp-3.4_3.4.6-6ubuntu3_i386.deb、
g++-3.4_3.4.6-6ubuntu3_i386.deb、
libstdc++6-dev_3.4.6-6ubuntu3_i386.deb
如果直接1个1个安装的话会发现g++-3.4和libstdc++6-dev发生了循环依赖,真是很蛋疼。可以用dpkg的强制安装。最简单的是把这些安装包放在同一个目录下,然后在这个目录下运行
sudo dpkg -i *.deb
gcc-3.4安装成功后可以按照TEMU installation and user manual的指示安装。由于现在的QEMU已经全面转向KVM,所以原来的QEMU Accelerator (kqemu)已经被抛弃了。幸好TEMU还是支持新版的QEMU。如果要用kqemu加速,就只能下载旧版qemu手动安装了,有些老教程可以参考。TEMU在开始分析后是不支持KVM和kqemu加速的,但KVM和kqemu可以加快虚拟机准备的时间,比如装系统、拷病毒文件什么的。
常用的QEMU指令如下 :
qemu-img create -f qcow2 winxp.qcow2 20G # create a virtual disk
qemu -hda winxp.qcow2 -cdrom winxp_sp3.iso -boot d -m 1024 # install windows xp sp3
qemu -hda winxp.qcow2 -cdrom winxp_sp3.iso -boot c -m 1024 # reboot and finish installing windows xp sp3
qemu winxp.qcow2 -m 1024 # boot

qemu-img create -f qcow2 -b winxp.qcow2 snapshot.qcow2 # create a snapshot, you can boot from snapshow.qcow2 and don't worry about damage the vm in winxp.qcow2
基本就是这样,TEMU的指令参考manual。不过我有2个遗留问题:
 1、我必须额外加上-no-kvm的参数,才能启动vm,否则QEMU会停止在booting from cd-rom/disk的地方。不知道是什么原因,我查过kvm是支持我的CPU AMD Phenom II X4的。而且QEMU-KVM在启动时也没有任何报警信息说KVM不能用等等。也许我用的QEMU-KVM 0.12.5有bug?
2、我无法在QEMU中上网,本来应该是用默认的网络设置就可以上了(类似VirtualBox的NAT上网),但是我怎么试都不行。我还试了网上各种用tun/tap上网的教程,也没有成功。昨天在host中开了一个privoxy代理,成功上网了一阵,今天又不行了,怪异。传文件现在只能通过tftp和mount vm disk。SMB服务也没有尝试成功。
Mount virtual disk可以用 (refer to http://blog.loftninjas.org/2008/10/27/mounting-kvm-qcow2-qemu-disk-images/):
sudo modprobe nbd max_part=8
sudo qemu-nbd winxp.qcow2
sudo qemu-nbd --connect=/dev/nbd0 winxp.qcow2
mount /dev/nbd0p1 /mnt/disk_c

TEMU的功能众多,还在研究中。我装了个eclipse,慢慢调试它,逐渐理解它的功能。TEMU的文档不详细,docs中有一个doxygen生成的文档的压缩包,比较有用。
调试的时候遇到一个问题,eclipse老是由于system signal sigusr2而break。如果是用的是gdb的话,可以在从console的下拉中选择gdb console,输入:
handle SIGUSR2 nostop noprint pass

0 意見: