TaintDroid 項目筆記

TaintDroid項目筆記

By: ahaxzh@gmail.comhtml

項目平臺基礎信息:

系統信息:Ubuntu 12.04 LTS X64 Desktopjava

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

具體項目實施過程:

1. Ubuntu 系統安裝的注意事項及操做系統基礎環境配置

系統的安裝。在安裝Ubuntu系統的時候根據本身計算機狀況合理清晰的構建新的系統,不可盲目選擇。建議安裝的時候選擇全新安裝或者事先預留空白分區手動分配磁盤。切忌不瞭解LVM的狀況下不使用LVM管理方式安裝。
在安裝完成後首先選擇合適的源來更新系統(可以使用系統內置的源測速),其實主要更新的內容是系統語言包。在安裝完更新之後便可隨手安裝些經常使用必備工具:Vim、Gcc、G++、Adobe Flash、Chromium等。linux

2. Android 開發平臺的搭建

首先TaintDroid實際上是一個自定義的Android ROM,因此必須本身編譯Android源碼來實「TaintDroid Build Instructions for Android」。那麼首先要作的就是下載源碼(Android及TaintDroid代碼),而後進行編譯並嵌入TaintDroid來實現自定義 ROM並刷入設備。android

平臺基礎JDK 的安裝:
因爲Android代碼編譯使用的是JDK6,因此必須去Oracle上面尋找舊的對應平臺的版本,並且須要註冊並贊成一些協議纔會容許你去下載。下載到 的文件大概是相似於:jdk-6u45-linux-i586.bin,具體小版本號Google沒有具體要求因此並不須要糾結。然就是安裝JDK並配置 環境變量,具體操做以下:git

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文件在文件最後添加內容:github

#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版本號:ubuntu

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目錄以權限。)markdown

而後就能夠新建一個目錄用來存放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

相關文章
相關標籤/搜索