現在的位置: 首頁 > 移動開發 > 正文

將TaintDroid編譯進Android 2.3

2019年07月28日 移動開發 ⁄ 共 5185字 ⁄ 字型大小 評論關閉

將TaintDroid編譯進Android 2.3

本文編譯環境:
Ubuntu10.04,32-bit
JDK SE 6
Bash Shell

在32-bit系統上編譯Android時需要修改以下幾個文件:

build/core/main.mk     
change     
ifneq (64,$(findstring 64,$(build_arch)))     
to     
ifneq (i686,$(findstring i686,$(build_arch)))     
$(warning ************************************************************)     
$(warning You are attempting to build on a 32-bit system.)     
$(warning Only 64-bit build environments are supported beyond froyo/2.2.)     
$(warning ************************************************************)     
$(error stop)     
endif


external/clearsilver/cgi/Android.mk,     
external/clearsilver/java-jni/Android.mk,     
external/clearsilver/util/Android.mk,     
external/clearsilver/cs/Android.mk

change    
LOCAL_CFLAGS += -m64     
LOCAL_LDFLAGS += -m64     
to     
LOCAL_CFLAGS += -m32     
LOCAL_LDFLAGS += -m32

 

step 1: 獲取Android源代碼
$ mkdir ~/tdroid-2.3.4
$ cd ~/tdroid-2.3.4
$ repo init -u https://android.googlesource.com/platform/manifest -b android-2.3.4_r1
$ repo sync
(根據網速不同,需要等待一段時間)
先嘗試編譯以下內核,防止當加入TaintDroid代碼時出現問題。詳細編譯Android教程見Android源碼發布網站,狂點這裡
$ . ./build/envsetup.sh
$ lunch 1
$ make -j4
等待。。。
$ emulator
如果編譯正常會出現Android模擬器界面。
編譯過程已經將一些環境變數加入到bash中,因此當重新啟動一個shell時,將無法重現,此時需要將前一個bash shell中的環境變數提取出來。
我的做法是,在編譯的shell中,使用env命令將所有環境變數導入到一個文本文件中,然後再將普通shell的環境變數導入到一個文本文件中,然後對比差異即可得出所需環境變數,然後將差異加入到普通shell中,即可正常啟動emulator。

最近發現可以直接通過命令運行emulator:

進入主目錄:

$ . build/envsetup.sh

$ lunch 1

$ emulator 

這樣也可以直接運行emulator,而且比我以前的方法方便許多。同時可以啟用其他一些工具,例如adb等這些工具。

step 2: 獲取TaintDroid源碼
將以下內容複製粘貼到~/tdroid-2.3.4/.repo中,文件名為:local_manifest.xml。
<manifest>
  <remote name="github" fetch="git://github.com" />
  <remove-project name="platform/dalvik"/>
  <project path="dalvik" remote="github" name="dbaeumges/android_platform_dalvik" revision="taintdroid-2.3_emulator" />
  <remove-project name="platform/libcore"/>
  <project path="libcore" remote="github" name="TaintDroid/android_platform_libcore" revision="taintdroid-2.3.4_r1" />
  <remove-project name="platform/frameworks/base"/>
  <project path="frameworks/base" remote="github" name="TaintDroid/android_platform_frameworks_base" revision="taintdroid-2.3.4_r1" />
  <remove-project name="platform/system/vold"/>
  <project path="system/vold" remote="github" name="TaintDroid/android_platform_system_vold" revision="taintdroid-2.3.4_r1" />
</manifest>

然後,執行以下命令:
$ cd ~/tdroid-2.3.4
$ repo sync
$ cd dalvik
$ git branch --track tdroid-2.3.4 github/taintdroid-2.3_emulator
$ git checkout tdroid-2.3.4
$ git pull
$ cd ../libcore
$ git branch --track tdroid-2.3.4 github/taintdorid-2.3.4_r1
$ git checkout tdroid-2.3.4
$ git pull
$ cd ../frameworks/base
$ git branch --track tdroid-2.3.4 github/taintdorid-2.3.4_r1
$ git checkout tdroid-2.3.4
$ git pull
$ cd ../..
$ cd system/vold
$ git branch --track tdroid-2.3.4 github/taintdorid-2.3.4_r1
$ git checkout tdroid-2.3.4
$ git pull

step 3: 編譯Linux內核支持xattr SDcard
$ cd ~/tdroid-2.3.4
$ git clone http://android.googlesource.com/kernel/goldfish.git
$ cd goldfish
$ git branch --track android-goldfish-2.6.29 origin/android-goldfish-2.6.29

$ git checkout android-2.6.29
$ git pull

由於此時下載的內核無法支持yaffs文件格式,因此需要使用補丁文件,狂點這裡下載。
$ cd ~/tdroid-2.3.4/goldfish
$ patch -p1 < ~/yaffs_xattr.patch

編譯內核:
$ cd ~/tdroid-2.3.4
$ . ./build/envsetup.sh
$ lunch 1
$ cd goldfish
$ export ARCH=arm
$ export SUBARCH=arm
$ export CROSS_COMPILE=arm-eabi-
$ make goldfish_defconfig
$ make oldconfig
$ make menuconfig
(保證YAFFS和EXT2支持XATTR和SECURITY選項)
$ make -j4
$ cp arch/arm/boot/zImage ~/

打開.config文件檢查是否以配置好:
...
#
# File systems
#
CONFIG_EXT2_FS=y
CONFIG_EXT2_FS_XATTR=y
CONFIG_EXT2_FS_POSIX_ACL=y
CONFIG_EXT2_FS_SECURITY=y
CONFIG_EXT2_FS_XIP=y
...
CONFIG_YAFFS_FS=y
CONFIG_YAFFS_YAFFS1=y
CONFIG_YAFFS_XATTR=y
CONFIG_YAFFS_SECURITY=y
# CONFIG_YAFFS_9BYTE_TAGS is not set
# CONFIG_YAFFS_DOES_ECC is not set
CONFIG_YAFFS_YAFFS2=y
CONFIG_YAFFS_AUTO_YAFFS2=y
# CONFIG_YAFFS_DISABLE_LAZY_LOAD is not set
# CONFIG_YAFFS_DISABLE_WIDE_TNODES is not set
# CONFIG_YAFFS_ALWAYS_CHECK_CHUNK_ERASED is not set
CONFIG_YAFFS_SHORT_NAMES_IN_RAM=y
...


step 4:編譯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 addition output for tracking JNI usage (not recommended)
#TAINT_JNI_LOG := true

然後編譯TaintDroid:
$ . ./build/envsetup.sh
$ lunch 1
$ make clean
$ make -j4

step 5: 設置SD card
$ mksdcard 1024M sdcard.img
$ sudo mke2fs sdcard.img

step 6: 使用TaintDroid
$ emulator -kernel ~/zImage -sysdir ~/Desktop/samples/ -sdcard ~/Desktop/samples/sdcard.img -memory 512 -skindir ~/Desktop/samples/skins/ -skin HVGA -data ~/Desktop/samples/userdata-qemu.img -partition-size 1024 -qemu -android-hw ~/Desktop/samples/hardware-qemu.ini &
(sample目錄為我將所有的img文件都放於一處的目錄,此外&符號意為後台執行,輸入上述命令後,還有輸入以下命令改變執行模式)
$ adb shell setprop dalvik.vm.execution-mode int:portable

當模擬器啟動後,可以安裝TaintDroidNotify軟體,測試TaintDroid是否已經安裝。也可通過查看編譯產生的目錄out/target/product/generic/中文件install-files.txt來查找是否還有ftaint來判斷是否安裝成功。

TaintDroidNotify軟體可以狂點這裡下載。

Reference:

https://sites.google.com/site/taintdroid23/source

http://appanalysis.org/download.html

http://blog.csdn.net/zhenyongyuan123/article/details/6079717

抱歉!評論已關閉.