核心原理及源码下载
TaintDroid 系统定制 源码下载编译
模拟镜像相关内容
repo链接代码库,指定分支,下载
清华下载镜像https://www.cnblogs.com/wxishang1991/p/5649517.html
网页:https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
$ repo init -u git://aosp.tuna.tsinghua.edu.cn/android/platform/manifest
如果需要设置版本,加入参数-b 安卓源码版本号即可。
$ repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-4.0.1_r1
repo sync [-j4]
清华镜像链接git下载不了,不知为啥 能下是能下但不知为啥android4.3_r1代码有20多G,repo下了更是翻了几倍。
百度网盘上下了一份
配置make3.8.2
java 1.6环境变量更换 1.8注释在~/.bashrc文件中
中文ubuntu貌似不好用,换一个英文的
tain的资料写的都比较复杂
为了解决自己定制系统的需求,这里要解决两个问题
1.原始系统栈的大致实现流程
2.修改后,系统栈的操作多了那些逻辑。
3.如果要定制,我们对新的系统需要修改那些内容。
问题2修改点好像在解释器的汇编代码中,这下麻烦了,编这个代码会不会很麻烦。调试也是一个问题。
TaintDroid深入剖析之启动篇
http://www.freebuf.com/articles/system/108276.html
TaintDroid剖析之Native方法级污点跟踪分析
https://jaq.alibaba.com/community/art/show?articleid=430
TaintDroid剖析之DVM变量级污点跟踪(下篇)
https://jaq.alibaba.com/community/art/show?spm=a313e.7916648.0.0.941e4de0mcb3a3&articleid=420
TaintDroid剖析之File & Memiry & Socket级污点传播
https://jaq.alibaba.com/community/art/show?articleid=494
TaintDroid剖析之DVM变量级污点跟踪(下篇)这边文章详细介绍了栈是如何被扩充的细节。
这里需要整理的是扩充对象和对其操作的一系列更改。
直接看系统源码,怕是也看不出个啥。
看下污点代码应该先。
编译过程问题
ubuntu 10 源更新上有各种错误
ubuntu 12 重装实验编译源码 失败。安装的版本不知出现了什么问题
ubuntu 14 安装编译环境,貌似成功。等待出现结果。
个人总结,编译源码一定要选合适的ubuntu.
ubuntu-10.04-desktop-amd64
ubuntu-12.04.5-alternate-amd64
ubuntu-14.04.5-desktop-amd64
ubuntu-16-04-64-bit
ubuntu-17.04-desktop-amd64
ubuntukylin-16.04-desktop-amd64
以上版本中,ubuntu-14.04.5-desktop-amd64报错最少,这里关键有一些
sudo apt-get install gnupg
sudo apt-get install flex
sudo apt-get install bison
sudo apt-get install gperf
sudo apt-get install zip
sudo apt-get install curl
sudo apt-get install build-essential
sudo apt-get install libesd0-dev
sudo apt-get install libwxgtk2.6-dev
sudo apt-get install libsdl-dev
sudo apt-get install lsb-core
sudo apt-get install lib32z1-dev
sudo apt-get install gcc-4.4
sudo apt-get install g++-4.4
sudo apt-get install g++-4.4-multilib
sudo apt-get install lib32ncurses5-dev
依赖库,如果大部分可以装。应该就没什么问题。当然其实我这还做了一点修改,我利用的jdk-6u38-linux-x64.bin来安装java,之前那几次都是jdk-6u45-linux-x64.
个人感觉应该系统要求比较高,太新或太久都会产生问题,jdk也是关键,然后就是各种编译库。
emulator执行不了,找了半天也没找到位置最后执行以下命令
sourcebuild/envsetup.sh
s
o
u
r
c
e
b
u
i
l
d
/
e
n
v
s
e
t
u
p
.
s
h
lunch sdk-eng
$ emulator
启动了虚拟机,运行看起来正常。
整个环境并没有安装android sdk。
编译时间不到两小时,make -j4。
研究调用栈在调用前后的初始化等过程。
dvmMterpStd
dvmInterptStd
修改repo
$vi /git-repo.git/repo
google的地址
REPO_URL = ‘https://gerrit.googlesource.com/git-repo’
改为清华大学的地址
REPO_URL = ‘git://aosp.tuna.tsinghua.edu.cn/android/git-repo’
清华这个repo好怪,要修改~/.bashrc 。网站上有说明
git://github.com/TaintDroid/android_platform_dalvik
taintdroid系统相关
Taint官方设计文档阅读
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-4.3_r1
REPO_URL = ‘https://gerrit-google.tuna.tsinghua.edu.cn/git-repo’
Dalvik虚拟机的启动过程分析 源码分析 https://blog.csdn.net/Luoshengyang/article/details/8914953
Dalvik虚拟机JNI方法的注册过程分析 源码分析 https://blog.csdn.net/Luoshengyang/article/details/8923483
现在有了三张图,我们的工作基本清楚了,就是要在dvmCallMethodV中的栈分配和初始化的过程中,把污点传递的过程修改完成。
这里难点就是很多指令会涉及到汇编代码,修改起来不方便。并且有可能要进行大量的汇编改造。
如果把模拟器的执行模式限定在通用平台的解释器上,这里的执行效率不知道会有多大的损耗。
1.又有个问题,栈扩充后,污点是怎么传递的?
2.还有,既然可以直接操控栈,那我们添加一些方法名称和参数的传递通信接口,不一样能够实现系统监控么,为什么要实现栈倍增。
3.增加的Taint标志里面到底写的是什么东西, 为什么每个变量后面都要增加一个Tainttag。
问题一:这个标志为的是标记信息传递的过程。至于怎么标记的,还有待研究
问题二:直接吞吐日志参数,并没有解决数据如何处理的问题,这个污点传递设计巧妙在直接标记了数据处理传输的过程。如果是直接突出参数的,也可以实现数据流的监控,不过可能这个设计就会有重合的部分。
问题三:标志里写的是啥,猜测应该是应用相关的,数据流传输过程相关的标号。具体怎么实现的,同问题一。
repo这个工具真是个坑,android-4.3_r1下了一天,下载了50G,简直了,想骂人。目前我情况我要手动在,4.3_r1版本的百度云盘下载到android进行repo化处理,希望不要把原工程给搞奔了。
cd /Android
c
d
/
A
n
d
r
o
i
d
repo sync
$ repo forall dalvik libcore frameworks/base frameworks/native frameworks/opt/telephony system/vold system/core device/samsung/manta device/samsung/tuna \
packages/apps/TaintDroidNotify -c ‘git checkout -b taintdroid-4.3_r1 –track github/taintdroid-4.3_r1 && git pull’
完了,搞不清这个工具的文件结构是怎么遍历的,根本修改不了项目。
git clone -b taintdroid-4.3_r1 git://github.com/TaintDroid/android_platform_dalvik
git clone -b taintdroid-4.3_r1 git://github.com/TaintDroid/android_platform_libcore
git clone -b taintdroid-4.3_r1 git://github.com/TaintDroid/android_platform_frameworks_base
git clone -b taintdroid-4.3_r1 git://github.com/TaintDroid/android_platform_frameworks_native
git clone -b taintdroid-4.3_r1 git://github.com/TaintDroid/android_platform_frameworks_opt_telephony
git clone -b taintdroid-4.3_r1 git://github.com/TaintDroid/android_platform_system_vold
git clone -b taintdroid-4.3_r1 git://github.com/TaintDroid/android_platform_system_core
git clone -b taintdroid-4.3_r1 git://github.com/TaintDroid/android_platform_packages_apps_TaintDroidNotify
git clone -b v2.8.1 https://git.oschina.net/oschina/android-app.git
全部手动下载,复制进去吧。超过60G了,不知还有没。结论,repo不能轻易用。
源码下载问题
先把taint 4.3编译完成
期间可以随便jni和其他栈污点跟踪原理解读一下。
编译系统就不要用管理员权限了吧,啥习惯。
中文那几篇看来看去就是跟栈代码和对象的操作相关的代码,差不多理解了。
接下来需要看下那个英文关于详细的污点处理的问题。
之前下载那个android4.3_r1.7在某个文件里居然少个;,吓得我以为怎么了。
添加上后果断可以编译,taint系统编译中。
系统编译中断,目测这个系统不能用换一个。
git clone https://aosp.tuna.tsinghua.edu.cn/platform/manifest.git
输入命令,切换到manifest目录
cd manifest
Git tag 列出android各个分支版本
下载android-7.0系统源码,输入下面命令,如果要下载其他版本源码,checkout git tag列出的版本号即可
git checkout android-7.0.0_r6
下载脚本E:\BaiduNetdiskDownload\gitdownload\manifest gitpdl.py
http://www.voidcn.com/article/p-zwkblepn-do.html
这篇文章本身价值不大,不过有好多引用,可以看一下。
寻找污点标志的实现方法,确定污点意义。
这个标志应该是在初始化后的相应的赋值。
这个污点有点懂了,是在相应的功能点实现污染的。初始化过程dvmCallMethod只是进行了简单的赋零操作。数据在每经过一个污染点就会被按位或执行一个相应标志位(遇一得一),我们通过对污染数据的标志进行判断,就可以知道我们的数据的传递过程。我们只需要按位与,就可以确定数据是否有相应的污染信息。
如果我们单纯利用hook,我们这就会需要独立设计一个数据传递过程的标志方式。而且,有些数据的跟踪单纯对方法名和参数的监控,很难确保数据流的传递链的完整保存。也就是说,我们的数据很难具体的获得传递过程的信息。
而Taint的这个设计,巧妙就在对于数据流整个信息链的跟踪。我们可以清晰的了解数据的污染过程。
还有个问题,如果函数没进行一次调用就会进行栈分配和调整。那么,数据在函数间传递,就会在成多次参数标记。那么这样,原始参数就会变得不成样子。
我们需要解决在下次调用过程中,原始污染点和现有污染点的合并。
所以我们分配参数是根据原始参数分配,而不是根据污染后的参数进行分配。分配完成后,进行污染标志传递。
接下来的问题,新版本的污染系统到底和之前的系统会有那些不同。
我们定制的系统,都需要做哪些工作。
直接对比4.4源码和 ,和taint系统中相应部分差异即可。
目测这里更改的关键点在于,敏感函数的污染机制的设计和实现。基本上,要对所有的敏感函数进行修正。
也就是说,新版本如果对函数进行了哪怕一点的更改,我们也要从头把整个污染系统重新定制一遍。
整个研究下来,收获还是很大的。第一,网上查了很多资料。基本上权威的就那几篇。
最权威的算是开发者提供的英文文档。有些晦涩。
好在国内某些大牛翻译了下,虽然不完美。但核心原理说的很明白,而且对相应的实现细节进行了分析。代码的关键部分被理清了。
不过这里由于开始没懂什么污点设计的初衷,没明白。通过反复研读那几篇文章,确定基本思路。把框架出来后,还有没明白的就尽量从源码中寻找答案。其实本来整个实现细节都应该读源码理解的,不过水平有限。
思路
一、研究taintdroid的核心原理和实现方式。
1.Android系统源码下载编译,和编译环境的搭建。这里主要是针对android4.3和4.4两个版本。
2.著名沙箱系统Taintdroid原理深入研究。主要是针对污染传播机制的研究。
3.Android调用栈分配初始化过程还原,和代码研读,理清污染传播控制的核心位置。
4.Android系统代码仓库控制、修改、编译、调试细节的研究。
5.旧版的Taintdroid系统编译实现
6.Taintdroid研究原理报告,沙箱建设方案。
二、通读taintdroid源码,对比系统源码进行实现细节上彻底把控。
三、修改Android4.4版本的系统源码,实现模型的初步建设。
四、droidbox系统搭建,实现沙箱自动化控制和日志吞吐。
五、完善需求、根据实际市场和企业要求不断更新系统。
六、cuckoo-droid系统搭建,对比两个开源沙箱性能。
原理图