官方文档缩略
官方链接:http://code.google.com/p/decaf-platform/wiki/build_conf
类似工作:http://blog.csdn.net/iamnewtocoding/article/details/41987835,不过这篇文章介绍的是离线安装。
主机环境:Ubuntu 12.04 i386
1.QEMU
sudo apt-get install qemu
sudo apt-get build-dep qemu
2.库
sudo apt-get install binutils-dev
sudo apt-get install libboost-all-dev
3.编译
源码下载: https://code.google.com/p/decaf-platform/
目前最新的版本是1.9,源码包里可能有Decaf和DroidScope的源码。进入decaf源码目录,进行二进制分析的话需要添加以下编译选项。
./configure --enable-tcg-taint --enable-tcg-ir-log--enable-vmi
默认打开了vmi,关闭了前两个。
make
4.创建vm
DECAF目前支持x86/ARM平台上的32位win xp,win7,linux,创建qcow格式镜像就行。网上也有qemu创建镜像的教程,按自己的需求创建即可。(对于是否使用virtualbox和vmware格式镜像那段有点无语,看来想用新版就耐心等待安装过程吧。)
然后使用qemu-system-i386安装虚拟机(可以参考教程:http://my.oschina.net/kelvinxupt/blog/265108?utm_source=tuicool&utm_medium=referral)。这里没说使用普通版本的qemu还是DECAF目录下的。
5.Linux虚拟机配置VMI
这一步对guest os为windows的用户可以跳过。
(1)将主机decaf源码目录下shared/kernelinfo/procinfo_generic/中的procinfo.c和Makefile文件拷贝到vm某目录下,然后cd到这个目录。
make
sudo insmod ./procinfo.ko
这一步安装模块时候出了 "Operation not permitted"的问题,但官方教程里说不要紧,这个模块只用来打印一些信息。
(2)更新主机decaf源码目录下shared/kernelinfo/procinfo_generic/中的procinfo.ini文件。
dmesg会打印出如下类似信息,将这些信息前面的[xxxx]去掉,然后复制到procinfo.ini里去。
[20451.579763] strName = 3.2.0-37-generic
[20451.579764] init_task_addr = 3246178336
[20451.579765] init_task_size = 3236
...
[20451.579787] ti_task = 0
将文件最上面的[info]区的total值增1,然后在文件尾端复制新的vm信息,文件格式如下。
[info]
total = 7
...
[7]
strName = 3.2.0-37-generic
init_task_addr = 3246178336
init_task_size = 3236
...
ti_task = 0
;DON'T FORGET TO UPDATE info.total
官方教程里有提到一个可能的错误,我在执行过程中没有遇到:UTS_RELEASE is not defined or utsrelease.h cannot be found. Define UTS_RELEASE as a unique string by yourself.
(3)配置共享库,这个步骤是可选的。
按照官方说法,这一步是为了给库函数下钩子配置偏移量。在主机decaf源码目录下shared/kernelinfo/procinfo_generic/lib_conf目录下存放着guest os的库配置文件,配置文件的名字是dmesg命令中得到的strName.ini(如3.2.0-37-generic.ini)。配置文件中,每个共享库都会占一个区,这个区包含一个域decaf_conf_libpath,域值为不带任何路径的库文件名,如decaf_conf_libpath = libc-2.13.so,然后每个函数都会占一个域,具体信息可以通过如下命令得到,注意库文件路径。
objdump -T [path_of_shared_library_in_guest_OS] | awk '/\.text/ && $6 !~ /\(.*\)/ {printf("%-30s= %d\n",$7,"0x"$1)}'
6.启动vm
进入主机decaf源码目录i386--softmmu,然后用这里的qemu-system-i386程序起虚拟机。
./qemu-system-i386 -monitor stdio -m 512 -netdev user,id=mynet -device rtl8139,netdev=mynet “YOUR_IMAGE”
这里添加-snapshot可以使用快照,在5里面,我自己随意弄了一个配置文件,vm就起不来了,一直在初始状态闪屏,然后把那个文件删掉了再起,进入ubuntu画面的时候出现The disk drive for /tmp is not ready yet or not present,但是过了一会还是正常进去了,但是问题是慢得根本用不了,目前也就到这里了。
——————————————————————————————————————————————————
后来我发现了问题所在,DECAF是不支持KVM加速的,所以无论是安装和启动都无比慢,此外还和虚拟机系统有关,我尝试了ubuntu 12.04和win7慢得难以操作,而xp在可接受的速度范围内,作者说ubuntu9.04还可以,另外配置打开的选项越多会越慢,最初可以先只打开vmi。
这个问题的链接:https://groups.google.com/forum/#!msg/decaf-platform-discuss/tUgnMvOlxvM/xZce-GMDdwAJ
7.编译和安装插件
插件测试用例:http://code.google.com/p/decaf-platform/downloads/detail?name=decaf_plugins.tar.gz#makechanges
新版本的DECAF运行这个插件会出错,新版直接用decaf/plugins目录下的插件就行了。
(1)编译插件
cd ./callbacktests
./configure --decaf-path=root directory of decaf
make
这一步之后可能需要重启主机,不然加载插件的时候会提示load_plugin是未知的命令。
(2)起虚拟机然后加载插件
./qemu-system-i386 -monitor stdio -m 512 -netdev user,id=mynet -device rtl8139,netdev=mynet “YOUR_IMAGE”
help
load_plugin XXX/callbacktests/callbacktests.so
(2)跟踪程序
do_callbacktests calc.exe
然后在虚拟机里运行计算器,可以看到命令行里的结果,然而我在关闭计算器然后再次打开的时候,虚拟机就再没有任何响应了。。。who knows why!
暂时不知道那几个配置选项分别是哪些功能以及如何编写插件,再接再厉!目前安装过程中遇到问题最好的解决办法是google,找到论坛里遇到相同问题的帖子。