android模拟器上安装taintdroid全过程

http://blog.csdn.net/arfee_11/article/details/7268396


最近尝试在android模拟器上安装taintdroid,结果安装的时候才发现网上别人的安装过程存在源代码的链接过时、服务器上的文件被挪动了位置等问题。历尽千辛万苦终于安装成功,下面将自己的安装过程贴上,免得后面有兴趣的童鞋走冤枉路。

        我使用的是32位的Ubuntu10.04,安装taintdroid需要自己编译android2.1的源码,在此之前,需要确保自己的系统环境以及搭建好,注意点如下:

                (1)JDK1.5 :安装了JDK1.6及以上版本的系统可能在编译android源码的时候报错,以及安装JDK时环境变量必须配置好,否则很可能导致失败;

                (2)还有以下包必须安装:git-core  repo gnupg  flex  bison  gperf  libsdl-dev  libesd0-dev  libwxgtk2.6-dev  build-essential  zip  curl  libncurses5-dev  zlib 1g-dev ,这些使用apt-get install 命令即可;

                (3) 如果gcc和g++版本高于4.3,可能也会引起android源码的编译错误,所以如果发现在编译源码时有类型错误则可把gcc和g++版本降低,具体过程不详述。


环境配置好了以后开始安装的整个流程:

Step1.   获取android的源代码:这里下载的是android-2.1_r2.1p分支

   
   
   
   
% mkdir -p ~/tdroid/tdroid-2.1_r2.1p
% cd ~/tdroid/tdroid-2.1_r2.1p
% repo init -u https://android.googlesource.com/platform/manifest -b android-2.1_r2.1p
% repo sync
... wait,等待下载完成,网速可以的话需要大约1个小时

   
   
   
   
% . ./build/envsetup.sh
% lunch 1
% make -j4
... wait
% emulator
 ... 如果该指令有反应,说明编译成功

Step2. 为taintdroid做修改:下载local_manifest.xml文件(http://appanalysis.org/files/local_manifest.xml)并放入~/tdroid/tdroid-2.1_r2.1p/.repo文件夹下。

然后确认版本控制是正确的:

% cd ~/tdroid/tdroid-2.1_r2.1p
    
    
    
    
% repo sync
% cd dalvik
% git branch --track taintdroid-2.1_r2.1p github/taintdroid-2.1_r2.1p
% git checkout taintdroid-2.1_r2.1p
% git pull
% cd ..
% cd frameworks/base
% git branch --track taintdroid-2.1_r2.1p github/taintdroid-2.1_r2.1p
% git checkout taintdroid-2.1_r2.1p
% git pull

Step3.添加ext2 SDcard支持:需要修改两个文件/vold/volmgr.c和/vold/volmgr_ext3.c,该文件在system/core文件夹下,要修改的部分如下(红色部分,减号表示去掉,加号表示添加):

   
   
   
   
diff --git a/vold/volmgr.c b/vold/volmgr.c
index deb680e..a5f5789 100644
--- a/vold/volmgr.c
+++ b/vold/volmgr.c
@@ -43,7 +43,7 @@ static volume_t *vol_root = NULL;
static boolean safe_mode = true;
static struct volmgr_fstable_entry fs_table[] = {
-// { "ext3", ext_identify, ext_check, ext_mount , true },
+ { "ext3", ext_identify, ext_check, ext_mount , true },
    { "vfat", vfat_identify, vfat_check, vfat_mount , false },
    { NULL, NULL, NULL, NULL , false}
};
diff --git a/vold/volmgr_ext3.c b/vold/volmgr_ext3.c
index fe3b2bb..8979c70 100644
--- a/vold/volmgr_ext3.c
+++ b/vold/volmgr_ext3.c
@@ -157,7 +157,8 @@ int ext_mount(blkdev_t *dev, volume_t *vol, boolean safe_mode)
    char **f;
    for (f = fs; *f != NULL; f++) {
- rc = mount(devpath, vol->mount_point, *f, flags, NULL);
+ //rc = mount(devpath, vol->mount_point, *f, flags, NULL);
+ rc = mount(devpath, vol->mount_point, *f, flags, "user_xattr");
        if (rc && errno == EROFS) {
            LOGE("ext_mount(%s, %s): Read only filesystem - retrying mount RO",
    devpath, vol->mount_point);


Step4.打补丁并配置内核并重新编译

   
   
   
   
% cd ~
% wget http://www.appanalysis.org/files/yaffs_xattr.patch
...
% cd ~/tdroid/tdroid-2.1_r2.1p
% git clone https://android.googlesource.com/kernel/goldfish.git
% cd goldfish
% git branch --track android-gldfish-2.6.29 origin/android-gldfish-2.6.29
% git checkout android-gldfish-2.6.29
% git pull
% patch -p1 < ~/yaffs_xattr.patch

需要重新配置下:

   
   
   
   
% cd ~/tdroid/tdroid-2.1_r2.1p
% . ./build/envsetup.sh
% lunch 1
   
   
   
   
...wait
% cd goldfish
% export ARCH=arm
% export SUBARCH=arm
% export CROSS_COMPILE=arm-eabi-
% make goldfish_defconfig
% make oldconfig
% make menuconfig
         在弹出的内核配置中分别为EXT2和YAFFS选择XATTR和SECURITY选项,保存并退出

   
   
   
   
% make -j4
% cp arch/arm/boot/zImage ~/

Step5.

   
   
   
   
% cd ~/tdroid/tdroid-2.1_r2.1p
#在当前文件夹下新建buildspec.mk文件,并把以下内容拷贝进去,然后保存并退出:
# Enable core taint tracking logic (always add this)
WITH_TAINT_TRACKING := true
# Enable taint tracking for ODEX files (always add this)
WITH_TAINT_ODEX := true
# Enable taint tracking in the "fast" (aka ASM) interpreter (recommended)
WITH_TAINT_FAST := true
# Enable addition output for tracking JNI usage (not recommended)
#TAINT_JNI_LOG := true
再进行最后一次编译:
    
    
    
    
% . ./build/envsetup.sh
% lunch 1
% make clean
% make -j4


Step6.    安装了taintdroid的镜像就编译好了,下面只要再安装一个Android SDK,配置好ANDROID_SDK_HOME变量(为Android SDK的根目录路径),并使用其新建一个2.1版本的虚拟机。一般而言,新建的虚拟机放在$ANDROID_SDK_HOME/.android/avd文件下。

       做好以上工作后,运行下列指令:

% emulator -avd *** -kernel ~/zImage -ramdisk ~/tdroid/tdroid-2.1_r2.1p/out/target/product/generic/ramdisk.img -system ~/tdroid/tdroid-2.1_r2.1p/out/target/product/generic/system.img
       注:***为虚拟机名称,该命令运行后,会开启一个android模拟器。在该模拟器加载的时候需要配置模式,可以新开另一个命令行终端,运行下列指令:

% adb shell setprop dalvik.vm.execution-mode int:portable
       注:该命令可能会报错:device offline!此时可以重复运行该指令直到成功为止。如果一直不成功,到系统监视器中关闭adb进程,并重新运行上述两条指令即可。

      

      下面只要等待emulator启动完毕即可。不过android模拟器不是一般的慢,首次启动要等挺久的。

      进入android系统界面后,需要先给taintdroid安装图形界面:

   
   
   
   
% wget http://www.appanalysis.org/files/TaintDroidNotify.apk
% adb install TaintDroidNotify.apk

       安装成功后菜单中就有TaintDroid了。

       至于TaintDroid的使用教程,就不多说了,见下面链接:http://appanalysis.org/demo/index.html


祝各位好运~



你可能感兴趣的:(android模拟器上安装taintdroid全过程)