taintdroid研究

核心原理及源码下载

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]

http://www.appanalysis.org/

清华镜像链接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系统搭建,对比两个开源沙箱性能。

原理图

这里写图片描述
这里写图片描述
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值