TaintDroid專案筆記

發表於2022-11-27


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 

 

相關文章