TaintDroid部署过程详解

来源:互联网 发布:淘宝的孕妇装 编辑:程序博客网 时间:2024/06/06 14:22

近期因为课题的需求,需要使用动态污点分析工具TaintDRoid,但是在网上找的教程中发现使用清华镜像时repo的下载模块总是出现问题,经过查找之后发现清华镜像已经关闭了git服务,因此决定重新写一遍部署过程,让后续的读者少走弯路,话不多说,开始部署吧!

注意:配置之前确认一下你的存储空间大小,保证硬盘空间在100G以上,本人因为配置过程中出现空间不足的情况就吃了很多亏!

1、下载Android源码


1.1jdk下载

因为TaintDroid仅支持jdk6及以下的版本,因为在配置前使用“java -version”查看下jdk版本,如果在6以上就需要重新配置一下jdk的版本
jdk6下载地址:http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html

根据系统是32位还是64位下载相应的版本,本人使用的是ubuntu14.04TLs 64位,下载的jdk为图中标注版本

1.2 jdk安装

下载后,安装命令如下:
$ sudo mkdir -p /usr/local/java$ cd /usr/local/java$ sudo cp /home/download/Downloads/jdk-6u45-linux-x64.bin  ./$ sudo chmod +x jdk-6u45-linux-x64.bin$ sudo ./jdk-6u45-linux-x64.bin

配置JAVA_HOME和PATH环境变量:
$ sudo gedit /etc/profile

找空白位置添加如下代码:
JAVA_HOME=/usr/local/java/jdk1.6.0_45  PATH=$PATH:$HOME/bin:$JAVA_HOME/bin  export JAVA_HOME  export PATH

配置JDK和JRE的位置:
$ sudo update-alternatives --install /usr/bin/java java /usr/local/java/jdk1.6.0_45/bin/java 1  $ sudo update-alternatives --install /usr/bin/javac javac /usr/local/java/jdk1.6.0_45/bin/javac 1  $ sudo update-alternatives --install /usr/bin/javaws javaws /usr/local/java/jdk1.6.0_45/bin/javaws 1


配置Oracle为系统默认JDK/JRE:
$ sudo update-alternatives --set java /usr/local/java/jdk1.6.0_45/bin/java  $ sudo update-alternatives --set javac /usr/local/java/jdk1.6.0_45/bin/javac  $ sudo update-alternatives --set javaws /usr/local/java/jdk1.6.0_45/bin/javaws

配置完成后,执行下面的命令:
$. /etc/profile

查看java版本:
$ java -version

若java版本不是所设置的版本,则需要重新下载jdk6并设置jdk6版本的优先级高于其他版本的优先级:
重新配置JAVA_HOME和PATH环境变量:
$ sudo gedit /etc/profile

更改JAVA_HOME及PATH:
JAVA_HOME=<jdk_root>/jdk1.6.0_45  PATH=$PATH:$HOME/bin:$JAVA_HOME/bin

更改优先级命令如下:
$ sudo update-alternatives --install /usr/bin/java java /usr/local/java/jdk1.6.0_45/bin/java 1000  $ sudo update-alternatives --install /usr/bin/javac javac /usr/local/java/jdk1.6.0_45/bin/javac 1000  $ sudo update-alternatives --install /usr/bin/javaws javaws /usr/local/java/jdk1.6.0_45/bin/javaws 1000

1.3安装必要的资源包

$ sudo apt-get install git-core gnupg flex bison gperf build-essential    zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386     lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache    libgl1-mesa-dev libxml2-utils xsltproc unzip libswitch-perl

1.4安装repo

建立放置源码的文件夹
$ mkdir /home/<username>/Android  $ mkdir /home/<username>/Android/repo  $ mkdir /home/<username>/Android/aosp 

获取repo:
$cd /home/<username>/Android/repo$curl https://storage-googleapis.proxy.ustclug.org/git-repo-downloads/repo > repo$chmod a+x repo$cd ..$cd aosp

下载repo工具及初始化repo:
$sudo apt-get install phablet-tools$git config --global user.name "Your Name"  $git config --global user.email "you@example.com"$repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-4.3_r1

同步源码树:
(此过程要等待很长时间,我电脑平均3MiB的下载速度,大概需要2个小时,可以把电脑扔一边去玩耍了睡觉)
$repo sync

1.5编译源码

此过程可以忽略,但为了确保当前环境没有问题,最好还是编译一下比较保险,命令如下:
$cd /aosp/build$./envsetup.sh$lunch#根据具体要求选择参数, 模拟器为1$sudo make -j4
$emulator #确保编译没问题
可能出现的问题:
1.如果./envsetup.sh 命令无法执行,是因为此文件的权限未设置,可以使用chmod +x envsetup.sh修改权限,然后再运行该文件
2.编译的时候可能会出现lunch未安装的错误,原因是"./envsetup.sh"未执行成功,可以使用“source build/envsetup.sh”,然后再使用lunch命令就可以了
(又是很长时间,等待ing睡觉)

2、下载TaintDroid源码


直接将下面的代码复制到Android/.repo/local_manifests/local_manifest.xml中:
<manifest>  <remote name="github" fetch="git://github.com"/>  <remove-project name="platform/dalvik"/>  <project path="dalvik" remote="github" name="TaintDroid/android_platform_dalvik" revision="taintdroid-4.3_r1"/>  <remove-project name="platform/libcore"/>  <project path="libcore" remote="github" name="TaintDroid/android_platform_libcore" revision="taintdroid-4.3_r1"/>  <remove-project name="platform/frameworks/base"/>  <project path="frameworks/base" remote="github" name="TaintDroid/android_platform_frameworks_base" revision="taintdroid-4.3_r1"/>  <remove-project name="platform/frameworks/native"/>  <project path="frameworks/native" remote="github" name="TaintDroid/android_platform_frameworks_native" revision="taintdroid-4.3_r1"/>  <remove-project name="platform/frameworks/opt/telephony"/>  <project path="frameworks/opt/telephony" remote="github" name="TaintDroid/android_platform_frameworks_opt_telephony" revision="taintdroid-4.3_r1"/>  <remove-project name="platform/system/vold"/>  <project path="system/vold" remote="github" name="TaintDroid/android_platform_system_vold" revision="taintdroid-4.3_r1"/>  <remove-project name="platform/system/core"/>  <project path="system/core" remote="github" name="TaintDroid/android_platform_system_core" revision="taintdroid-4.3_r1"/>  <remove-project name="device/samsung/manta"/>  <project path="device/samsung/manta" remote="github" name="TaintDroid/device_samsung_manta" revision="taintdroid-4.3_r1"/>  <remove-project name="device/samsung/tuna"/>  <project path="device/samsung/tuna" remote="github" name="TaintDroid/android_device_samsung_tuna" revision="taintdroid-4.3_r1"/>  <project path="packages/apps/TaintDroidNotify" remote="github" name="TaintDroid/android_platform_packages_apps_TaintDroidNotify"      revision="taintdroid-4.3_r1"/></manifest>

注意:因为本人使用模拟器运行环境,因此没有涉及真机部分,若读者需要真机测试请参照http://www.appanalysis.org/download.html中的step3.

下载TaintDroid源码并替换掉Android源码的相应目录:
$cd aosp$repo sync --force-sync  #此过程又是很长时间$repo forall dalvik libcore frameworks/base frameworks/native frameworks/opt/telephony system/vold system/core device/samsung/manta device/samsung/tuna \       packages/apps/TaintDroidNotify -c 'git checkout -b taintdroid-4.3_r1 --track github/taintdroid-4.3_r1 && git pull'
(注:"repo foral ...." 这条命令凭运气执行吧,经常会显示连接超时,看你所在环境连接github的情况了,我这环境时好时坏,也是够了,必须所有的taintdroid-4.3_r1都显示“already up-to-date”才可以;最后没办法又配置的代理,详细方法见http://www.freebuf.com/sectool/123931.html)

3、编译TaintDroid

在TaintDroid根目录下新建一个buildspec.mk文件,写入编译TaintDroid所需要的参数,命令如下:
$ cd ~/Android/aosp  $ sudo 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 
打开~/Android/aosp/build/target/product/core.mk文件并且把TaintDroidNotify添加到PRODUCT_PACKAGES中(注意添加到第一个出现的PRODUCT_PACKAGES中,对比以下代码添加):
$RODUCT_PACKAGES += \                      BasicDreams \                      ...                      voip-common \                      TaintDroidNotify 
下面就可以开始编译Taintdroid了:
$ . build/envsetup.sh  $ lunch 1  # 选择自己对应的设备  $ make clean  $ sudo make -j4

4、Taintdroid应用于Emulator

其实这一步很简单,在~/Android/aosp/out/target/product/generic中找到system.img镜像文件,将其复制出来,并用此镜像文件替换掉sdk中的镜像文件,sdk镜像文件路径大概是sdk/system-images/android-18/armeabi-v7a/,替换掉此路径下的system.img文件,启动AVD后就可以使用Taintdroid了!
注意:api一定要调用18的,因为我们编译生成的system.image的接口是18的。
0 0