TaintDroid项目笔记
创始人
2024-03-01 11:54:18
0

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

相关内容

Vmware 安装Ubun...
 目录 一、概述 1.1 CentOS 1.2 Ubuntu 1....
2025-06-01 14:38:47
一起Talk Androi...
文章目录 概念介绍使用方法示例代码 各位看官们大家好,上一回中...
2025-06-01 06:03:54
Ubuntu连不上网,pi...
一、问题 ping: baidu.com: 未知的名称或服务 pi...
2025-06-01 05:13:47
121.Android 简...
             //首页xml布局代码&#x...
2025-06-01 04:29:59
【Android入门到项目...
目录 一、线性布局 1、  android:layout_grav...
2025-05-31 12:52:06
Ubuntu20.4配置a...
Ubuntu20.4配置arm交叉编译环境 我是在虚拟机中配置的&...
2025-05-31 12:39:52

热门资讯

Helix:高级 Linux ... 说到 基于终端的文本编辑器,通常 Vim、Emacs 和 Nano 受到了关注。这并不意味着没有其他...
使用 KRAWL 扫描 Kub... 用 KRAWL 脚本来识别 Kubernetes Pod 和容器中的错误。当你使用 Kubernet...
JStock:Linux 上不... 如果你在股票市场做投资,那么你可能非常清楚投资组合管理计划有多重要。管理投资组合的目标是依据你能承受...
通过 SaltStack 管理... 我在搜索Puppet的替代品时,偶然间碰到了Salt。我喜欢puppet,但是我又爱上Salt了:)...
Epic 游戏商店现在可在 S... 现在可以在 Steam Deck 上运行 Epic 游戏商店了,几乎无懈可击! 但是,它是非官方的。...
《Apex 英雄》正式可在 S... 《Apex 英雄》现已通过 Steam Deck 验证,这使其成为支持 Linux 的顶级多人游戏之...
如何在 Github 上创建一... 学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。你知道如何使用 git 了,你有一个 G...
2024 开年,LLUG 和你... Hi,Linuxer,2024 新年伊始,不知道你是否已经准备好迎接新的一年~ 2024 年,Lin...
什么是 KDE Connect... 什么是 KDE Connect?它的主要特性是什么?它应该如何安装?本文提供了基本的使用指南。科技日...
Opera 浏览器内置的 VP... 昨天我们报道过 Opera 浏览器内置了 VPN 服务,用户打开它可以防止他们的在线活动被窥视。不过...