1.Native方法的污点传播 在前两篇文章中我们详细分析了TaintDroid对DVM栈帧的修改,以及它是如何在修改之后的栈帧中实现DVM变量级污点跟踪的.现在我们继续分析其第二个粒度的污点跟踪——Native方法级跟踪. 回顾前文,我们知道Native方法执行在Native栈帧中,且Native栈帧由dvmPushJNIFrame函数分配栈空间,再由dvmCallMethodV/A或者dvmInvokeMethod对栈帧进行初始化,所以我们也按照之前的方式进行Native方法级跟踪机制分析.…
TaintDroid剖析之DVM变量级污点跟踪(下篇)作者:简行.走位@阿里聚安全 ​ 1 回顾 在上一章节中我们详细分析了TaintDroid对DVM方法参数和方法变量的变量级污点跟踪机制,现在我们将继续分析TaintDroid对类的静态域.实例域以及数组的污点跟踪. 2 了解DVM中类的数据结构 由于DVM师从JVM,所以DVM中所有类的祖先也是Object类,该类定义在dalvik/vm/oo/Object.h中.其实不仅仅是Object类,DVM所有的基本类都定义在Object.h文件中…
赵化冰,腾讯云高级工程师,Istio Member,ServiceMesher 管理委员,Istio 项目贡献者,热衷于开源.网络和云计算.目前主要从事服务网格的开源和研发工作. 引言 TCM(Tencent Cloud Mesh)是腾讯云上提供的基于Istio 进行增强,和 Istio API 完全兼容的 Service Mesh 托管服务,可以帮助用户以较小的迁移成本和维护代价快速利用到 Service Mesh 提供的流量管理和服务治理能力.本系列文章将介绍 TCM 上的最佳实践,本文将介…
TaintDroid剖析之File & Memiry & Socket级污点传播 作者:简行.走位@阿里聚安全 1.涉及到的代码文件 TaintDroid在File, Memory以及Socket三方面的污点传播主要涉及到如下一些文件: /libcore/luni/src/main/java/libcore/io/Posix.java  /libcore/luni/src/main/native/libcore_io_Posix.cpp  /libcore/luni/src/main/ja…
TaintDroid剖析之IPC级污点传播 作者:简行.走位@阿里聚安全 前言 在前三篇文章中我们详细分析了TaintDroid对DVM栈帧的修改,以及它是如何在修改之后的栈帧中实现DVM变量级污点跟踪.Native方法级跟踪.本篇文章我们来分析下IPC级污点传播. TaintDroid深入剖析系列目录: TaintDroid深入剖析之启动篇 TaintDroid剖析之DVM变量级污点跟踪(下篇) TaintDroid剖析之Native方法级污点跟踪分析 具体实现 这里我以情景为上下进行跟进,每…
/*********************************************************************************** * Linux driver 板级文件跟踪一般方法 * 声明: * 1. 这是本人使用vim+ctags最常用的跟踪方法,也是唯一的方法: :) * 2. 本人已经在跟踪线上标注了跟踪序号,也就是先后循序: * 3. 就目前而言,这种方法貌似是通用的: * 4. 这个例子仅仅是简单的演示,并没有全部展开,如果想要进一步跟踪, *…
1.1     摘要 现今,智能手机操作系统不能有效的提供给用户足够的控制权并且很清楚的了解到第三方的应用程序是如何使用其的隐私数据.我们使用了TaintDroid来阐明这个缺点,其是一个高效的,全系统动态污点跟踪和分析系统可以同时跟踪对个敏感数据来源.TaintDroid利用了Android虚拟机的执行环境提供了一个实时的分析.TaintDroid仅需消耗绑定的CPU为基准14%的性能开销对于第三方的应用程序的开销完全可以忽略不计.通过使用TaintDroid监控了Android第三方比较流行…
4.3   原生代码标记传播 Native 代码是不受TaintDroid监控的.理想情况下,我们获得了相同的传播语义当使用相同的解释副本时.因此,为了精确的在Java层进行污点监控,我们定义了两个必要的前提条件:1)所有被访问的外部变量(对于其他方法的类字段引用)根据数据流都被标记上了相应的污点.2)根据成数据流所有返回值都被分配了一个污点标记.TaintDroid完成这些的前提条件是通过各种人工方式,推断,方法概要,取决于环境要求. 内部虚拟机方法:内部虚拟机的方法又叫做直接译码法,传递一个…
对于Java中的native方法来说,实际上调用的是C/C++实现的本地函数,由于可能会在Java解释执行过程中调用native方法,或在本地函数的实现过程中调用Java方法,所以当两者相互调用时,必须要遵守调用约定,同时要保证在被调用方法执行完成后,调用者的方法能继续向下执行. 在HotSpot VM中,Java方法调用native方法会有2个入口例程,一个为解释执行的入口例程,一个为"编译"执行的入口例程.所谓"编译"执行其实是如果一个native方法在解释模式…
在之前介绍为native方法设置解释执行的入口时讲到过Method实例的内存布局,如下: 对于第1个slot来说,如果是native方法,其对应的本地函数的实现会放到Method实例的native_function这个slot中,将本地函数放到这个slot就是registerNative()函数要完成的. 在前面介绍为native方法生成解释执行入口时介绍过,当判断出Method::native_function还没有值时,会调用InterpreterRuntime::prepare_nativ…