Linux中國

TaintDroid項目筆記

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


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國