TaintDroid项目笔记
By: ahaxzh@gmail.com
项目平台基础信息：
系统信息：Ubuntu 12.04 LTS X64 Desktop
硬件信息：Intel Core2 Duo CPU P8400 @ 2.26GHz  2,3G RAM
具体项目实施过程：
1. Ubuntu 系统安装的注意事项及操作系统基础环境 ...
TaintDroid 项目笔记 Ubuntu Android
By: ahaxzh@gmail.com
项目平台基础信息：
系统信息：Ubuntu 12.04 LTS X64 Desktop
硬件信息：Intel Core2 Duo CPU P8400 @ 2.26GHz  2,3G RAM
具体项目实施过程：
1. Ubuntu 系统安装的注意事项及操作系统基础环境 ...



  
By: ahaxzh@gmail.com


项目平台基础信息：
---------


系统信息：Ubuntu 12.04 LTS X64 Desktop


硬件信息：Intel® Core™2 Duo CPU P8400 @ 2.26GHz × 2,3G RAM


具体项目实施过程：
---------


### 1. Ubuntu 系统安装的注意事项及操作系统基础环境配置


系统的安装。在安装Ubuntu系统的时候根据自己计算机情况合理清晰的构建新的系统，不可盲目选择。建议安装的时候选择全新安装或者事先预留空白分区手动分配磁盘。切忌不了解LVM的情况下不使用LVM管理方式安装。  
 在安装完成后首先选择合适的源来更新系统（可使用系统内置的源测速），其实主要更新的内容是系统语言包。在安装完更新以后即可随手安装些常用必备工具：Vim、Gcc、G++、Adobe Flash、Chromium等。


### 2. Android 开发平台的搭建


首先TaintDroid其实是一个自定义的Android ROM,所以必须自己编译Android源码来实“TaintDroid Build Instructions for Android”。那么首先要做的就是下载源码（Android及TaintDroid代码），然后进行编译并嵌入TaintDroid来实现自定义 ROM并刷入设备。


平台基础JDK 的安装：  
 由于Android代码编译使用的是JDK6，所以必须去Oracle上面寻找旧的对应平台的版本，而且需要注册并同意一些协议才会允许你去下载。下载到 的文件大概是类似于：jdk-6u45-linux-i586.bin，具体小版本号Google没有具体要求所以并不需要纠结。然就是安装JDK并配置 环境变量，具体操作如下：



```
ahaxzh@T400:~$ cd /workspace/soft
ahaxzh@T400:~$ chmod 701 jdk-6u45-linux-i586.bin
ahaxzh@T400:~$ sudo ./jdk-6u45-linux-i586.bin
```

（需要注意的是：其会在当前目录下解压JDK，也就是JDK所在的位置，需要记录下来并写在环境变量中）。  
 添加环境变量的方法：  
 编辑/etc/profile文件在文件最后添加内容：



```
#set java environment
JAVA_HOME=/home/ahaxzh/workspace/soft/jdk1.6.0_45
export JRE_HOME=/home/ahaxzh/workspace/soft/jdk1.6.0_45/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
```

然后注销系统并重新登录，在终端使用命令：java -version来查看JDK是否安装完成。 若安装成功则会显示当前JDK版本号：



```
java version "1.6.0_45"
Java(TM) SE RuntimeEnvironment(build 1.6.0_45-b06)
JavaHotSpot(TM)Server VM (build 20.45-b01, mixed mode)
```

Android 源代码的下载：  
 根据官方网址说明需要的是首先需要安装以下工具软件：curl和git-core。在终端输入：



```
ahaxzh@T400:~$ sudo apt-get install curl
ahaxzh@T400:~$ mkdir ~/bin
ahaxzh@T400:~$ PATH=~/bin:$PATH
ahaxzh@T400:~$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
ahaxzh@T400:~$ sudo chmod a+x ~/bin/repo
```

（需要注意的是，首先要在~/home下建立bin目录，并给与repo目录以权限。）


然后就可以新建一个目录用来存放Android源代码，如：workspace/tdroid/ tdroid-4.1.1\_r6）  
 进入到用于存放代码的目录使用repo命令来获取Android源代码：



```
ahaxzh@T400:~/workspace/tdroid$ mkdir -p ~/tdroid/tdroid-4.1.1_r6
ahaxzh@T400:~/workspace/tdroid$ cd ~/tdroid/tdroid-4.1.1_r6
ahaxzh@T400:~/workspace/tdroid$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.1.1_r6
ahaxzh@T400:~/workspace/tdroid$ repo sync
```

然后就进入漫长的等待过程。


在执行上面的步骤时需要注意的事项：  
 在使用repo命令时会遇到很多很多的问题下面进行详细说明：  
 关于repo只是google用Python写的一个用来调用git的脚本，主要是用来下载、管理Android项目的软件仓库。  
 官方安装介绍：http://source.android.com/source/downloading.html  
 官方使用说明：http://source.android.com/source/using-repo.html  
 在首次安装完git、curl及repo如果立即执行repo init操作可能会出现各种异常情况，这个主要和地域互联网环境有关。例如：直接链接不了源码服务器、出现读取失败等等。即使你能够链接并读取正常，第一 次还会出现要求你编辑git的配置文件（根据提示输入邮件、用户名字等）。至于出现问题的解决方案可以使用代理服务器、备份服务器及本地安装等。在漫长的 下载Android代码的过程中很容易出现repo sync 中断的现象，不得不重新执行repo sync命令。


关于repo init -u URL , 在当前目录安装 repository ，会在当前目录创建一个目录 “.repo” ， -u 参数指定一个URL， 从这个URL 中取得repository 的 manifest 文件，然后才能够使用repo sync命令根据manifest文件抓取源码。抓取源代码是一个非常非常漫长的过程，我用了将近7小时。直到出现：



```
Fetching projects:100%(294/294),done.
Syncing work tree:100%(294/294),done.
```

算是下载完源代码了。这时候源代码目录（～/workspace/tdroid/tdroid-4.1.1\_r6）中 .reop目录大小为12G，而整个 tdroid-4.1.1\_r6目录将近20G左右。


Android源码的编译：


下载完源代码以后就可以开始着手准备源码编译工作了。官方编译说明：http://source.android.com/source/initializing.html  
 在着手编译的时候你需要再次确认一下问题：  
 首先你的操作系统必须是64位的（前面的几个Android版本貌似可以在32位编译，但是4.x的就没有遇到说可以在32位机器编译运行的 了）Linux发行版本。官方推荐的是Ubuntu 12.04 LTS版本，另外官方要求的编译环境必须是：Python 2.6 — 2.7, GNU Make 3.81 — 3.82,JDK 6,Git 1.7。除了这些以外还需要有的软件包：



```
sudo apt-get install git gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1/usr/lib/i386-linux-gnu/libGL.so
```

这其中会出现的问题：libgl1-mesa-glx:i386 会提示找不到。这时候就陷入了一个痛苦的循环。具体见：http://askubuntu.com/questions/335853/ubuntu- wont-boot-after-initializing-the-build-environment-for-android/335865#335865  
 总之最后的解决方法是一次启动之内完成编译工作，然后重新启动以后需要在非GUI环境下安装xorg。  
 上述基本必须环境搭建完毕就可以开始编译Android源代码了。具体编译流程如下：



```
ahaxzh@T400:~/workspace/tdroid/tdroid-4.1.1_r6$ . build/envsetup.sh
ahaxzh@T400:~/workspace/tdroid/tdroid-4.1.1_r6$ lunch 1
ahaxzh@T400:~/workspace/tdroid/tdroid-4.1.1_r6$ make -j4
```

然后就是漫长的编译等待了。整个过程花费的时间视机器硬件配置不通，我编译完成大概用了一整夜。等待编译完成以后就可以运行emulator命令来 测试原版（没有安装TaintDroid的）的Android原版系统了，这时候在工作目录里面会多一个out文件夹，大小13G。


上面所做的这些其实说白了只是为了测试。如果这些都通不过就没有办法接下来进行下面的事情。在第一次运行模拟器的时候，如果出现找不到emulator命令的话需要进行初始化操作：



```
ahaxzh@T400:~/workspace/tdroid/tdroid-4.1.1_r6$ source build/envsetup.sh
ahaxzh@T400:~/workspace/tdroid/tdroid-4.1.1_r6$ lunch full-eng
ahaxzh@T400:~/workspace/tdroid/tdroid-4.1.1_r6$ emulator
```

### 3. 将TaintDroid定制到Android系统内并重新编译


下载TaintDroid源代码：  
 TaintDroid并不是一个软件，而是嵌入到系统本身的一个服务。所以并不可以直接有Apk文件来安装。需要的是讲其源代码加入到Android系统源代码中编译出来一个含有TaintDroid的定制版系统。  
 根据官方说明，需要：



```
Download the TaintDroid4.1 local_manifest.xml and place it in~/tdroid/tdroid-4.1.1_r6/.repo or copy and paste the following content into.repo/local_manifest.xml
```

其中的XML文件包含了托管在github上的TaintDroid源代码。然后执行如下操作来具体实施下载代码：



```
ahaxzh@T400:~/workspace/tdroid/tdroid-4.1.1_r6$ repo sync
ahaxzh@T400:~/workspace/tdroid/tdroid-4.1.1_r6$ repo forall dalvik libcore frameworks/base frameworks/native system/vold system/core device/samsung/crespo device/samsung/tuna packages/apps/TaintDroidNotify-c 'git checkout -b taintdroid-4.1.1_r6 --track github/taintdroid-4.1.1_r6 && git pull'
```

在重新repo的时候会看到：



```
“warning: local_manifest.xml is deprecated; put local manifests in`/home/ahaxzh/workspace/tdroid/tdroid-4.1.1_r6/.repo/local_manifests` instead”
```

这样也就知道了local\_manifest.xml文件是什么用的了。等待repo完成以后就完成了TaintDroid的下载。就可以准备重新编译了。是的又要花将近一夜的时间来重新编译。


重新编译定制版Android系统：  
 首先要自己在工作目录写一个makefile，内容如下：



```
ahaxzh@T400:~/workspace/tdroid/tdroid-4.1.1_r6$ gedit 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 additional output for tracking JNI usage (not recommended)#TAINT_JNI_LOG := true# Enable byte-granularity tracking for IPC parcels#WITH_TAINT_BYTE_PARCEL := true
```

然后执行下面的命令来重新编译定制版ROM（定制TaintDroid的Android系统）：



```
ahaxzh@T400:~/workspace/tdroid/tdroid-4.1.1_r6$ . build/envsetup.sh
ahaxzh@T400:~/workspace/tdroid/tdroid-4.1.1_r6$ lunch full-eng
ahaxzh@T400:~/workspace/tdroid/tdroid-4.1.1_r6$ make clean
ahaxzh@T400:~/workspace/tdroid/tdroid-4.1.1_r6$ make -j4
```

有了原版系统的编译通过，这次编译基本不会有什么问题，注意到编译的时候会出现一些警告，但是没有给编译造成什么困难。编译的时间同样很久，编译完 成了以后会在工作目录生成新的out文件夹make clear命令会删除原先的原版系统。有一点需要注意的是如果你不缺定是否在系统内嵌入了TaintDroid，你可以通过查看out/target /product/generic 目录下面的install-files.txt来查看是否含有tdroid。到这里一个定制版的ROM就已经生成了，同样可以通过emulator命令来 运行模拟器（可能需要初始化）。


### 4. 测试并统计TaintDroid实际效果


获取Android SDK及Eclipse  
 关于AVD（Android模拟器）的创建，Google提供了简单方便的可视化工具来创建。首先需要用到的是Android SDK。可以在：http://developer.android.com/sdk/index.html#download  
 找到与自己系统相对应的版本。下载并解压后会发现其包含了Android SDK和集成了众多Android应用调试插件的Eclipse IDE。由于SDK 中只含有最新版的SDK，所以需要对SDK 进行更新以便获取需要的版本(Android 4.1)。更新SDK 简单的方法是从Eclipse 重直接点击Android SDK Manager来启动SDK内容管理工具，选择需要的内容打勾安装（需要同意许可）即可。


创建一个TaintDroid定制版ROM的AVD  
 然后在Eclipse中使用Android Virtual Device Manager来创建一个AVD模拟器，如果直接选择的话，其实选择的是原版的ROM，而我们需要的是嵌入了TaintDroid的ROM，所以这里可以取巧，方法如下：  
 由于AVD需要的核心内容是**system.img**（系统镜像）这个系统文件，所以可以使用我们编译完成的Rom来替换掉原生SDK里面的 systen.img。我的自定义ROM的system.img文件在/out/target/product/generic目录里面，而SDK 的system.img文件在sdk/system-images/android-16中，操作时注意备份好原生系统镜像。上面的步骤昨晚了以后就可以 使用AVDM来创建一个我们需要的ADV了，内存、屏幕分辨率根据实际情况进行相应的调整。SDCard是必须的，大多数软件需要。


运行TaintDroid定制版ROM的AVD及测试统计  
 上面创建完成AVD以后就可以运行了，在AVDM界面点击Start来运行我们的模拟器初次运行会很慢，因为会创建sdcard.img、 userdata.img、userdata-qemu.img、等等一些列的相关镜像文件（放在~/.android/avd目录中）。  
 进入Android系统后，在系统设置界面里可以更改系统语言，非必要。打开TaintDroidNotify并开启监控。TaintDroid服务就会 在后台运行，这时候如果有程序出现违规操作，就会在系统通知处显示Notify，滑动即可查看具体违规的详细情况，会显示应用名称、违规操作内容、目标 IP地址、时间等。  
 在网易移动应用商城随机选择好评100W以上的几个应用进行测试结果统计：


酷狗音乐 发送IMEI 42.62.20.242


天天静听 发送IMEI到多个IP地 址202.75.220.21


酷我音乐盒 发送IMEI 221.238.18.38


辣妈帮 发送IMEI到多个IP地址 202.75.220.15等


 


++++++++++++++++++++++++++++++++++++++


BOSS啊，这什么编辑器嘛。。代码成这样了，我也不知道怎么弄了。就这么着吧。。


<http://www.cnblogs.com/ahaxzh/archive/2013/12/02/3454540.html> 


 




