将TaintDroid编译进Android 2.3

将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

你可能感兴趣的:(将TaintDroid编译进Android 2.3)