一. 创建ubuntu虚拟机
因为本人的电脑都是windows系统,但是windows上似乎没办法编译Android源码,所以只能创建虚拟机,这里我使用VMware创建虚拟机,虚拟机版本是Ubuntu14.04,分配的磁盘空间最好不少于150G,内存最好不少于4G。
二. 在虚拟机上安装JDK
TaintDroid是一个非常老的工具了,如果不是最近项目需求我也不会去用它,它只支持到Android4.3及以下版本,所以安装的JDK版本必须是小于等于6的,这里我安装JDK SE6。
Oracle 各版本JDK下载页面(需要注册登录下载):https://www.oracle.com/java/technologies/oracle-java-archive-downloads.html
安装以及配置环境的参考博客:https://jingyan.baidu.com/article/d621e8dae805272865913fa7.html
从上面的网站下载对应版本的JDK后(我下载的是jdk-6u45-linux-x64.bin),在虚拟机里创建/usr/java
文件夹并把它放进去,进入此目录并输入以下两个命令(root环境下)进行安装:
chmod 755 jdk-6u11-linux-i586.bin./jdk-6u11-linux-i586.bin
安装完毕后需要配置环境,在/etc/profile文件的末尾加入以下信息:
export JAVA_HOME=/usr/java/jdk1.6.0_45
export JAVA_BIN=/usr/java/jdk1.6.0_45/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
注意 1:这个文件是需要root权限才能进行更改的,所以需要在终端进入root后通过gedit /etc/profile
打开此文件来进行修改。
注意 2:加入的几行里的jdk1.6.0_45是安装JDK后在/usr/java
下新出现的文件夹名字。
注意 3:修改完毕后通过. /etc/profile
使配置立即生效。
配置完毕后,新建终端并输入java -version
可以查看当前的java版本:
以上是在root下配置java环境的,如果想要普通用户也能用java可以参考这篇博客:
https://blog.csdn.net/u012454773/article/details/108884858
三. 下载必要的库以及Android源码编译
1. 代理源和镜像的配置
这里需要在ubuntu中使用中国的镜像源,有两个地方需要配置。
apt-get的源:进入/etc/apt
目录可以看到一个sources.list文件,直接双击打开,在download from选项选择other,在China的源里找到一个靠谱的,我这里选的是阿里的源。
配置完这个之后就可以使用apt-get命令安装一些必要的库:
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
AOSP的国内镜像(用于下载android源码):这里参考的下面的这篇博客,它使用的是中科大的镜像。
参考的博客:https://blog.csdn.net/ly890700/article/details/54645196/?utm_medium=distribute.pc_relevant.none-task-blog-title-2&spm=1001.2101.3001.4242
中科大AOSP镜像文档:https://mirrors.ustc.edu.cn/help/aosp.html
首先需要下载repo,可以看做是一个用python写的android源码包管理脚本,有了这个才能下载源码,用如下几条命令获取repo:
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
curl -sSL 'https://gerrit-googlesource.proxy.ustclug.org/git-repo/+/master/repo?format=TEXT' |base64 -d > ~/bin/repo
chmod a+x ~/bin/repo
命令执行成功后,在home目录下应该多出一个bin文件夹,里面有一个repo文件如下:
有了repo后还需要修改一下里面的REPO_URL常量的值,具体参考我上面放的中科大AOSP文档。然后开始下载源码,首先新建一个目录用来保存源码,在这里下载的是android-4.3_r1版本的源码,于是进入新建目录并输入以下命令:
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-4.3_r1
2. 同步源码时可能出现的错误以及解决办法
我运行repo init
命令时报错如下,fatal:error unknown url type: https
:
在这个问题上卡了好几天,一开始以为是网上大家常见的网络连不上的问题,所以在中科大和清华的镜像源之间切换了好几次还设置了代理服务器都没办法解决,后来在StackOverflow上找到一个类似的问题,发现这个问题的原因是python环境没装好!因为ubuntu14默认的是python2.7,然后我后来自己装了python3.7但是可能装的过程中出了一些问题,导致ssl相关的库安装失败,因此才报了上图中的错误。
解决办法:把我之前自己下载的python3.x卸载干净,只留下系统自带的python2.7之后,使用wget下载并安装python3.6(我不知道其他的python3版本可不可以,但是python3.6我实验成功了),至于安装python3.6的过程网上有很多教程,这里我就不多说了。
解决此问题后,再次运行repo init
命令就成功了,然后会提示你输入邮箱和用户名等一系列操作,这里我用的我github上的邮箱和用户名:
到这里就初始化成功了。接下来就可以运行repo sync
开始同步下载源代码,这个过程我用了大半天大概8个小时的时间,它首先会把下载的源码保存在[你指定的源码目录]/.repo/project-objects/platform
文件夹中,等全部下载完毕后进行一次校验,然后将其移至你指定的源码目录下。
这里我在下载的时候它卡在最后99%进度的platform/prebuilt/sdk下卡了很久,这应该是正常现象,因为我下载完成之后查看包发现这个文件夹占了差不多60G,所以下载得比较慢。
下面是下载完成后的源码目录:
3. 编译源码
源码编译参考下面这篇博客,写得很详细,我这里就说一下流程以及我遇到的问题和解决办法:
https://www.jianshu.com/p/367f0886e62b
在源码目录下依次下面的命令初始化编译环境:
. build/envsetup.py
然后执行输入lunch
,如果上面一条命令执行成功,则这时会有一个设备列表让你选择编译的目标设备,选择完毕之后会输出一些基本的信息。
然后执行下面的make命令开始编译,后面参数表示编译时使用的线程数量,一般依据用于编译设备的cpu核数调整,是它的1倍或2倍:
make -j2
然后就是等待编译完成,我这里用了大概5个小时。
- 出现的错误一:
Can't locate Switch.pm in @INC (you may need to install the Switch module)
,解决这个问题只需要安装提到的库就可以了:sudo apt-get install libswitch-perl
- 出现的错误二:准确的说这应该不算是一个错误,因为在编译时没有报任何的error只有一些警告,但是就是没有在
out/target/product/generic/
中生成img文件,这可能是因为内存不足导致的。我的解决办法是把虚拟机的内存从2GB调整到4GB后再编译就可以了,不行就再往大了调。
编译完成后,输入以下命令打开模拟器,如果成功就说明编译成功了!
emulator
四. TaintDroid编译
到android源码编译,前置工作终于全部做完了,开始进入正题——TaintDroid的部署。
taintdroid的官网:http://www.appanalysis.org/download.html
参考的博客:https://blog.csdn.net/rained_99/article/details/54090529
1. taintdroid源码同步
taintdroid的github是增量存储的,只保存了与对应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>
然后进入到主目录,输入以下命令进行同步下载并替换taintdroid与andrdoid源码中有区别的代码:
repo sync --force-sync
这个过程漫长到我怀疑是不是哪里配置错了,这里断断续续下载大概用了20个小时的时间。同步完毕后会提示repo sync has finished successfully.
然后输入以下命令开始配置相应的环境,此条命令成功的话会显示Already up-to-date.:
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'
2. taintdroid编译
在编译之前需要配置一些信息,首先在源码主目录下创建一个 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
然后在 build/target/product/core.mk中PRODUCT_PACKAGES字段的最后加入TaintDroidNotify:
PRODUCT_PACKAGES += \BasicDreams \...voip-common \TaintDroidNotify
之后的步骤与android源码编译类似,在源码主目录下执行以下命令:
. build/envsetup.sh
lunch <target> # (replace <target> with correct value for your device)
make clean
make -j2
接下来又是等待编译时间,大概需要编译4~5个小时,编译完成后依旧是在out/target/product/generic/
里面生成了相应的镜像文件。
四. TaintDroid部署与测试
本来是想部署到真机上测试,但taintdroid支持的机器型号为: Galaxy Nexus (GSM/HSPA+), Galaxy Nexus (Verizon), Nexus 4, Nexus 7 (2012)(Mobile), Nexus 7 2012, Nexus 10。都是比较老的机器了,实验室没有相应型号的测试机,所以只能在模拟器上进行实验。本来在编译完成后直接输入emulator就可以在linux中打开的,但是我的ubuntu是虚拟机 ,测试的时候会特别卡,所以我把生成的镜像文件复制到windows上来部署,使用的是AVD模拟器。
1. 安装JDK,AndroidSDK tools等工具
JDK不用多说,很多地方都可以找到,对版本似乎也没有太大要求,不过尽量安装低一点的版本可能比较好(我的是1.6)。
AndroidSDK tools比较麻烦,因为现在google似乎没有把sdk的包单独放出来了,必须要安装一个AndroidStudio然后在里面下载,而且还会遇到因为国内被墙访问不了google导致资源下载失败的问题,这太为难人了。我这里推荐下面这个国内可以访问的网站,里面资源很齐。
资源网站:https://www.androiddevtools.cn/
部署参考的博客:https://blog.csdn.net/liyongqiang2420/article/details/51029841?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control
首先下载SDK Tools以及对应taintdroid版本的SDK、SDK System images并按照说明解压至对应目录下。
然后将上一步编译生成的system.img拷贝至..\android-sdk\system-images\android-18\default\armeabi-v7a
目录下,打开AVD manager创建模拟器即可。
在模拟器中已经自动安装好了TaintDroidNotify应用,在此应用中点击start就开始监控了。