CN109815062A - 基于内存分析的安卓App历史屏恢复与取证系统 - Google Patents
基于内存分析的安卓App历史屏恢复与取证系统 Download PDFInfo
- Publication number
- CN109815062A CN109815062A CN201910110229.3A CN201910110229A CN109815062A CN 109815062 A CN109815062 A CN 109815062A CN 201910110229 A CN201910110229 A CN 201910110229A CN 109815062 A CN109815062 A CN 109815062A
- Authority
- CN
- China
- Prior art keywords
- memory
- evidence
- module
- app
- file
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Abstract
基于内存分析的安卓App历史屏恢复与取证系统,本发明涉及安卓App历史屏恢复与取证系统。本发明的目的是为了解决现有安卓手机ROOT权限、取证系统不具有通用性、某些取证系统其内存提取信息较少以及针对特定App的取证方法不具有通用性的问题。系统包括安卓内存提取子系统、内存证据存储子系统和安卓App历史屏恢复与取证子系统;安卓内存提取子系统用于对目标App的内存空间进行完整提取;内存证据存储子系统用于对安卓内存提取子系统提取的文件内存证据进行存储;安卓App历史屏恢复与取证子系统用于利用MVC架构中的模型来实现App历史屏恢复与取证。本发明用于安卓App历史屏恢复与取证领域。
Description
技术领域
本发明涉及安卓App历史屏恢复与取证系统。
背景技术
随着移动互联技术与安卓移动终端的普及,基于手机的计算机犯罪违法行为滋生迅速。相关案件中,某些重要证据遗留在手机或手机应用中:据统计美国70%的犯罪涉及移动数字取证,在英国则高达90%。在这样的背景下,如何有效可靠的进行移动终端取证成为应用安全领域的一个研究热点。
目前安卓系统内存提取,存在诸多弊端:问题1、安卓手机ROOT权限,目前ROOT的手机较少;问题2、取证系统不具有通用性,不能适用于安卓系统的不同版本;问题3、某些取证系统其内存提取信息较少,无法满足特定App取证的要求;问题4、针对特定App的取证方法不具有通用性,大都针对某款特定App开发,无法适用于其它App的取证。
发明内容
本发明的目的是为了解决现有安卓手机ROOT权限、取证系统不具有通用性、某些取证系统其内存提取信息较少以及针对特定App的取证方法不具有通用性的问题,而提出基于内存分析的安卓App历史屏恢复与取证系统。
基于内存分析的安卓App历史屏恢复与取证系统包括安卓内存提取子系统、内存证据存储子系统和安卓App历史屏恢复与取证子系统;
安卓内存提取子系统用于对目标App的内存空间进行完整提取;
内存证据存储子系统用于对安卓内存提取子系统提取的文件内存证据进行存储;
安卓App历史屏恢复与取证子系统用于根据安卓内存提取子系统提取的目标App的内存空间和内存证据存储子系统存储的文件内存证据,利用MVC架构中的模型来实现App历史屏恢复与取证。
本发明的有益效果为:
本发明公布了一种基于内存信息对安卓App进行历史屏恢复的方法,以此为基础提出一种安卓App取证架构。基于内存提取的安卓App历史屏幕取证架构分为三个部分:(一)安卓内存提取子系统,(二)内存证据存储子系统,(三)安卓App历史屏恢复与取证子系统,分别实现安卓内存提取,原始内存证据存储,以及App历史屏恢复与取证功能。该取证方法利用MVC架构中的Model模型来实现,这保证了与安卓App的具体实现无关性,使取证具有通用性。本发明公布的基于内存的安卓App历史屏幕取证方法与架构,对于保证安卓App安全、保证App业务的可审计性,具有重要意义,应用前景广阔。
解决了问题1提出的安卓手机ROOT权限,目前ROOT的手机较少的问题;以及问题2提出的取证系统不具有通用性,不能适用于安卓系统的不同版本的问题;
与传统的内存取证方式不同,本发明的目标不仅是内存取证,而最终需要将内存中保留的特定App相关的数据结构恢复成为历史屏幕图像。这使本发明的内存提取方法具有如下特点:1、不仅需要提取特定App的MEM内存镜像文件,还要对其MAPS内存映射文件进行提取以便内存的分段执行;2、因为历史屏恢复需要对目标App的运行时环境进行最大程度的还原,所以内存提取要完整。3、本发明公布的内存提取方法无论Stack段、Heap段、数据段或是代码段,全部进行提取。
解决了问题3提出的某些取证系统其内存提取信息较少,无法满足特定App取证的要求的问题;
本发明的安卓内存提取系统具有以下特点:
首先,为保证后端取证系统的灵活性,可以利用内存获取配置模块,对历史屏恢复方式进行灵活设置。为支持不同的取证目标,取证配置模块支持两种不通的内存获取策略:策略1:完整内存镜像获取策略,策略2:特定App进程获取策略。
其次,不仅提取内存镜像文件,而且提取了内存映射文件用于后端取证系统进行屏幕恢复。为实现屏幕恢复,内存提取子系统借助PROC虚拟文件模块和基于PTRACE的远程注入模块。
再次,安卓内存提取子系统对安卓内存空间提取完整,包括:Heap堆段、数据段,代码段,以及内存空间中的Stack栈段。通过内存提取与Shell Code注入模块,实现对安卓内存栈空间进行提取。
最后,安卓内存提取子系统提取的内存包括MEM镜像文件和MAPS文件。本发明公布的内存提取方法,保证了内存取证的通用性和兼容性。
解决了问题4提出的针对特定App的取证方法不具有通用性,大都针对某款特定App开发,无法适用于其它App的取证。
附图说明
图1为本发明公布的基于内存的安卓App历史屏恢复与取证系统架构图;
图2为本发明内存提取系统工作流程图。
具体实施方式
具体实施方式一:结合图1说明本实施方式,本实施方式基于内存分析的安卓App历史屏恢复与取证系统包括安卓内存提取子系统、内存证据存储子系统和安卓App历史屏恢复与取证子系统;
安卓内存提取子系统用于对目标App的内存空间进行完整提取;
内存证据存储子系统用于对安卓内存提取子系统提取的文件内存证据进行存储;
安卓App历史屏恢复与取证子系统用于根据安卓内存提取子系统提取的目标App的内存空间和内存证据存储子系统存储的文件内存证据,利用MVC架构中的模型(Model/View/Controller)来实现App历史屏恢复与取证。
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
本发明公布了一种基于内存信息对安卓App进行历史屏恢复的方法,在此基础上提出一种安卓App取证架构。本发明公布的安卓应用历史屏恢复方法利用MVC架构中的Model模型来实现,这保证了与安卓App的具体实现无关。在此基础上,公布了一种基于内存提取的安卓App历史屏幕取证架构,该架构从功能上分为三个部分:(一)安卓内存提取子系统,(二)内存证据存储子系统,(三)安卓App历史屏恢复与取证子系统,这三部分构成了整体取证架构,分别实现安卓MEM内存镜像文件与MAPS内存映射文件的提取,原始内存证据存储,以及App历史屏恢复与取证等功能。
具体实施方式二:本实施方式与具体实施方式一不同的是,所述安卓内存提取子系统包括配置模块、PROC虚拟文件模块、基于PTRACE的远程注入模块和内存提取与线程空间(Shell Code注入)提取模块;
配置模块用于支持完整内存镜像获取策略和App特定进程获取策略;
完整内存镜像获取策略针对目标手机中的所有App进行取证的场景;
App特定进程获取策略针对目标App进行取证的场景;
降低了镜像文件的大小,降低了网络传输代价;
PROC虚拟文件模块是Linux系统中的一个虚拟文件,用于通过使用PROC在Linux内核空间和用户间之间进行通信;
在PROC文件系统中访问Linux内核,也就是说虚拟文件系统在内核空间和用户空间之间打开一个通信窗口。虚拟文件内容动态创建,PROC系统最初为进程信息开发,内核中很多程序和工具也利其它来完成处理信息,PROC的重要功能如表1所示。
表1 PROC文件系统中的部分文件
基于PTRACE的远程注入模块用于实现安卓系统的进程跟踪,监听并控制特定进程的运行;
内存提取与线程空间(Shell Code注入)提取模块用于实现对安卓内存栈空间进行提取,提取的内存包括MEM镜像文件和MAPS映射文件;
MEM镜像文件和MAPS映射文件包括:堆段、数据段,代码段,以及栈段;
所述MAPS内存映射文件可以用于查看进程内存映射,用于查看每一段内存的权限属性,以及文件路径等信息,本发明基于MAPS内存映射文件实现内存提取。
其它步骤及参数与具体实施方式一相同。
具体实施方式三:本实施方式与具体实施方式一或二不同的是,所述内存证据存储子系统包括内存镜像文件模块、内存映射文件模块和内存证据描述信息模块;
内存镜像文件模块用于对MEM镜像文件内存进行分段访问;
内存映射文件模块用于对MAPS映射文件内存进行分段访问;
内存证据描述信息模块用于对访问文件的信息进行存储。
其它步骤及参数与具体实施方式一或二相同。
具体实施方式四:本实施方式与具体实施方式一至三之一不同的是,所述安卓App历史屏恢复与取证子系统包括历史屏幕绘制APP模块、运行时环境生成模块、状态管理引擎模块、视图标记模块和历史屏恢复模块等;
历史屏幕绘制APP模块用于进行历史屏幕的绘制,实现历史屏幕恢复;
在为实现App历史屏幕恢复,历史屏幕绘制APP模块采用一个屏幕绘制App应用程序;
屏幕绘制App应用程序主要目的是进行历史屏幕的绘制。屏幕绘制App只有一个空白主界面和一个主Activity,其主要任务是调用后端的JNI模块实现屏幕绘制,实现历史屏幕恢复的目的。
屏幕绘制App从初始化内存镜像获取第一个顶层视图,之后获取DisplayList对象,开始图像绘制,直到全部顶层视图绘制完毕,屏幕绘制App退出。
运行时环境生成模块用于利用内存提取模块中的MEM镜像文件和MAPS映射文件为屏幕绘制App进程生成执行环境;
在屏幕恢复子系统中,采用一款安卓模拟器来运行屏幕绘制App实现历史屏幕恢复。首先启动屏幕绘制App进程,之后为其生成执行环境。利用(一)内存提取模块,获取到的目标App的镜像文件MEM和MAPS文件,为屏幕绘制App生成执行环境。本发明采用内存注入技术,通过将目标App内存中的各个段注入到屏幕绘制App的内存空间来实现。将目标App的数据段和代码段加载回原始地址,并对其偏移进行修改和操作,使这些段中的指针在共享应用程序的内存空间中也继续保持有效。Android App的运行状态,由Java运行时环境来维护。因此,为实现历史屏幕恢复,仅仅加载目标App的内存段是不够的,还必须恢复目标App的运行时环境。通过对获取到的内存映像的遍历,获取目标App的Java运行时数据结构,包含已加载的Java类,目标App特定定义的类,以及垃圾收集跟踪器等。至此,屏幕绘制App的内存空间包含了完整的目标App的运行时环境。
运行时状态管理引擎模块用于利用内存提取模块获得的目标App的内存空间为屏幕绘制App进程生成执行环境;
状态环境管理引擎利用内存提取模块获得的目标App的内存数据,为屏幕绘制App生成执行环境,这是目标App历史屏恢复的关键。运行时环境管理引擎开始于标记的顶层视图绘制函数,根据当前正在执行的字节码code(new code/old code)和当前的运行环境(new runtime/old runtime),来确定执行环境的运行时状态。
New code:执行的字节码来自于屏幕绘制App;
Old code:执行的字节码来自于目标App顶层视图;
New runtime:屏幕绘制App当前的运行环境;
Old runtime:目标App运行环境,该环境取自获取到的目标App的内存镜像数据;
运行时管径管理引擎根据编译后的字节码指令,为屏幕绘制App逐条指令生成其运行状态,四种运行时状态定义如下:
状态S1:屏幕绘制APP字节码new code,屏幕绘制App当前执行环境new runtime
状态S2:屏幕绘制App字节码new code,目标App的执行环境old runtime
状态S3:目标APP顶层视图字节码old code,屏幕绘制App当前执行环境newruntime状态S4:目标APP顶层视图字节码old code,目标App的执行环境old runtime
此外,运行时状态管理引擎采用堆栈对运行时环境进行管理,并通过数据流分析来实现运行时状态的维护。运行时状态管理引擎针对编译之后的字节码,生成运行时状态并对状态转移进行管理,这对于历史屏恢复至关重要。
视图标记模块用于通过遍历目标App内存空间中加载的所有视图,判断是否为View视图,找到顶层视图类并对顶层View视图进行标记,作为历史屏幕恢复的起点;
为实现历史屏幕恢复,顶层视图的查找至关重要。通过遍历App内存空间中加载的所有类,首先判断是否为View视图类,以此为基础找到顶层视图类并对其进行标记,作为历史屏幕恢复的起点。
历史屏恢复模块用于在确定了所有顶层View视图之后,启动历史屏恢复模块开始屏幕绘制,在完成屏幕绘制后,历史屏幕绘制App模块将当前屏幕缓冲区内容保存到目标文件夹,并对重新绘制的屏幕进行排序恢复时间序列;
在确定了所有顶层View视图之后,启动历史屏恢复模块开始屏幕绘制。前者接受一个DisplayList对象指针,然后在函数内部对这个DL对象进行替换修改,使其最终成为我们要恢复的屏幕DL对象。屏幕绘制App中的主活动通过使当前视图失效,来触发Android系统发布一个重绘命令redraw命令,来启动一次屏幕恢复。通过对安卓系统redraw命令进行拦截,并利用标记过的目标App对应的顶级视图来替换屏幕绘制App当前的顶级视图,从而完成目标App历史屏幕的恢复。
在完成屏幕绘图后,在屏幕绘制App将当前屏幕缓冲区内容保存到目标文件夹,并对重新绘制的屏幕进行排序来恢复时间序列。其方法是通过比较视图ID字段完成。视图的ID是标识视图的整数,因此可以利用其来恢复历史屏幕的时间序列。
本发明公布的安卓App历史屏取证方法,利用MVC架构中的Model模型来实现。安卓App历史屏幕恢复方法与取证系统包括五个模块:历史屏幕绘制APP,运行时环境生成模块,状态管理引擎,视图标记模块,以及历史屏恢复模块等。本发明公布的安卓App历史屏恢复方法,利用MVC架构中的View视图和Model模型数据生命周期的差异性实现,使其与特定App的具体实现无关,保证了取证系统的通用性。
目前基于安卓系统的网络犯罪行为日益猖獗,基于内存的安卓App历史屏幕恢复方法与取证架构,对于保证安卓App的安全,保证业务系统的可审计性与安全性,具有重要意义,应用前景广阔。
其它步骤及参数与具体实施方式一至三之一相同。
具体实施方式五:本实施方式与具体实施方式一至四之一不同的是,所述PROC虚拟文件模块内若要创建一个虚拟文件,开发者可以使用create_PROC_entry函数;
create_PROC_entry函数的参数为:待添加文件的文件名、一个权限对象以及用户要创建的文件位置,返回值是一个PROC_dir_entry指针,当PROC_dir_entr指针为NULL值时,表示在生成文件时发生了错误;
create_PROC_entry函数的原型如下:
其它步骤及参数与具体实施方式一至四之一相同。
具体实施方式六:本实施方式与具体实施方式一至四之一不同的是,所述PROC虚拟文件模块内若要删除一个虚拟文件,可以使用remove_PROC_entry函数;
remove_PROC_entry函数的参数为:待删除文件的文件名(待删除文件名的字符串),以及待删除的文件在/PROC虚拟文件模块中的位置;
位置这一参数在PROC_dir_entry指针中的字段为parent;
remove_PROC_entry函数原型如下:
利用PROC_dir_entry指针就可以来配置生成的虚拟文件中的其它属,PROC_dir_entry结构如下:
PROC_dir_entry结构中parent参数可以为NULL值,即表示PROC根目录,也可以是其他值,这取决于文件放的位置。表2列出了重要位置:
表2 PROC_dir_entry能够取的值及其路径
其它步骤及参数与具体实施方式一至五之一相同。
具体实施方式七:本实施方式与具体实施方式一至六之一不同的是,所述PROC虚拟文件模块内若要写入一项属性数据,可以使用write_PROC函数;
write_PROC函数的原型为:
write_PROC函数的参数为:filp参数、buff参数、len参数和data参数;
filp参数为一个PROC虚拟文件模块结构;buff参数是需要写入的字符串数据;len参数定义了在buff中数据的长度;data参数是一个指向私有数据的指针;
在内存获取模块中,声明这样一种类型的函数用来处理需要写入的数据。
其它步骤及参数与具体实施方式一至六之一相同。
具体实施方式八:本实施方式与具体实施方式一至七四之一不同的是,所述
实际上PROC文件系统属于内核空间的一部分,如果与用户空间进行交互,那么对于内核空间中的write_PROC函数来说,在用户空间通常使用copy_from_user函数来维护数据。当需要对PROC虚拟文件模块中进行读取属性数据时,可以使用read_PROC函数。
read_PROC函数的原型为:
read_PROC函数的参数为:page参数、count参数、start参数和off参数;
page参数是数据写入的位置;count参数定义了可以写入的最大字符数;
在返回多页数据时,需要使用start和off参数;
当所有数据全部写入之后,需要设置eof;与write函数类似,data参数表示的是一个指向私有数据的指针。此处提供的page缓冲区在内核空间中。
本发明专利公布的内存提取系统中,调用的部分Proc函数及其描述如下:
其它步骤及参数与具体实施方式一至七之一相同。
具体实施方式九:本实施方式与具体实施方式一至八之一不同的是,所述基于PTRACE的远程注入模块可以实现Linux系统进程跟踪,PTRACE函数的参数为:request参数、pid参数;
request参数为行为参数,request参数直接决定了PTRACE函数的功能和行为,确定进程的控制与跟踪;pid参数为远程进程的ID;
基于PTRACE的远程注入模块
安卓采用是经过修改的Linux内核,很多Linux注入技术都可以用于安卓。在本发明公布的内存获取系统采用基于PTRACE的远程注入技术。PTRACE可以实现Linux系统进程跟踪,PTRACE函数原型如下:
其中request为行为参数,该参数直接决定了PTRACE函数的功能和行为;pid参数为远程进程的ID,addr参数与data参数则根据不同的request参数有着不同的含义。
PTRACE函数中最关键的参数即为request参数,它的取值影响着对进程的控制与跟踪,request参数所代表的意义见表3。
表3 PTRACE函数中request意义
PTRACE函数提供了一个父进程,作用是监听和控制子进程的运行,并可以检查和改变子进程的一些属性。PTRACE函数也可以用于进程断点调试。一个典型的使用场景中,被跟踪的进程正在运行,利用PTRACE函数发出一个中断信号,则被跟踪的进程被中止且返回给通知监听进程。在这种状态下,子进程的内存空间可以被分析和修改。之后,父进程可以使子进程继续执行,也可以直接杀死进程。
其它步骤及参数与具体实施方式一至八之一相同。
具体实施方式十:结合图2说明本实施方式,本实施方式与具体实施方式一至九之一不同的是,所述内存提取与线程空间提取模块中内存提取模块采用的函数是dump_mem()函数;
dump_mem()函数原型如下:
dump_mem()函数的参数包括:进程ID号,MAPS内存映射文件及MAPS内存映射文件位置,MEM镜像文件及MEM镜像文件位置,进程中线程的数量,最大数量和线程ID等;
安卓内存提取模块总体工作。
内存提取模块具体工作流程如图2所示,过程为:
根据传递进来的参数,内存提取模块首先判断是否能定位到进程中的MAPS内存映射文件;若定位到进程中的MAPS内存映射文件,则对MAPS内存映射文件中的所有项进行遍历;
这里有两种不同的选择,一是只提取部分数据而不是所有的文件,二是提取全部的文件与数据。为保证后端取证系统的通用性、为支持取证系统对不同安卓应用App进行历史屏幕恢复,内存提取系统可以选择对整个内存镜像进行提取。
内存提取系统对MAPS文件所有项进行遍历,首先判断该项是否属于/dev/ashmem,属于说明该项存在于物理内存空间,则调用dump_area_PTrace()函数实现内存提取,在dump_area_PTrace()函数中调用PTRACE(PTRACE_PEEKDATA,tid,addr,data)实现内存数据的读取;
dump_area_PTRACE()的基本功能如下:
如果该项不属于/dev/ashmem,则直接在PROC虚拟文件模块中把这项内存以MEM文件的形式提取出来,这种方式内存提取速度更加迅速。该功能的函数实现原型为dump_area_fd():
若未定位到进程中的MAPS内存映射文件,则无法实现内存提取;
线程栈空间无法通过MEM文件进行提取,本发明采用线程空间(Shell Code注入)提取模块实现栈空间的提取,即利用ldr命令将内存中的数据通过寄存器逐字节提取出来;具体的提取过程如下:
首先保存寄存器的值,并在函数中将r3指向段start起始处,执行ShellCode为“LDR r2,[r3]”,接着利用PTRACE函数逐字节从r2读取数据到outfile。因为涉及到对寄存器的修改,所以需要将程序运行当前的寄存器进行保存与恢复。线程空间(Shell Code注入)提取利用dump_area_inject()函数实现,dump_area_inject()函数原型如下:
在遍历并提取内存结束之后选择恢复寄存器状态和进程现场,进程可以继续运行。内存提取系统实现内存提取之后,在安卓手机的目标文件夹下获得了两个文件,分别是:PID.mem和PID.Maps文件,这就是通过PROC文件系统和PTRACE函数所获的特定进程的镜像文件与内存映射文件。之后可以将其发送到数据服务器进行存储,以便后端历史屏恢复与取证系统进行下一步的内存取证分析。
为实现屏幕恢复,内存提取子系统借助PROC虚拟文件模块和基于Ptrace的远程注入模块进行设计。内存提取子系统对安卓内存空间提取完整,包括:Heap堆段、数据段,代码段,以及内存空间中的Stack栈段。通过内存提取与Shell Code注入模块,实现对安卓内存栈空间进行提取。提取的内存包括MEM镜像文件和MAPS文件。本发明公布的内存提取法具有以下特点:首先,为支持不同的取证目标,配置模块支持两种不同的内存获取策略:策略1、完整内存镜像获取策略;策略2、App特定进程获取策略。策略1适用于对目标手机中的所有App进行取证的场景;策略2适用于针对特定App进行取证的场景。其次,不仅提取内存镜像文件MEM,而且提取了MAPS内存映射文件,用于屏幕恢复。本发明公布的内存提取方法,保证了取证系统的通用性。
与传统的内存取证方式不同,本发明的目标不仅是内存取证,而最终需要将内存中保留的特定App相关的数据结构恢复成为历史屏幕图像。这使本发明的内存提取方法具有如下特点:1、不仅需要提取特定App的MEM内存镜像文件,还要对其MAPS内存映射文件进行提取以便内存的分段执行;2、因为历史屏恢复需要对目标App的运行时环境进行最大程度的还原,所以内存提取要完整。3、本发明公布的内存提取方法无论Stack段、Heap段、数据段或是代码段,全部进行提取。
为适用于不同的取证目标,内存提取子系统支持两种内存获取策略:策略1完整内存镜像获取策略;策略2App特定进程获取策略。策略1适用于对目标手机中的所有App进行取证的场景,策略2适用于针对特定App进行取证的场景。
本发明公布的内存提取方法无论Stack段、Heap段、数据段或是代码段,都进行提取。内存提取子系统,基于PROC虚拟文件模块与PTRACE来实现。线程栈空间无法通过MEM文件进行提取,在本发明设计了基于ShellCode注入的方式,利用ldr指令将内存数据通过寄存器逐个字节实现栈空间的提取。
总之,内存提取子系统借助PROC虚拟文件模块和基于Ptrace的远程注入模块实现。内存提取系统对安卓内存空间提取完整,包括:Heap堆段、数据段,代码段,以及内存空间中的Stack栈段。通过内存提取与Shell Code注入模块,实现对安卓内存栈空间进行提取。内存提取系统提取的内存包括MEM镜像文件和MAPS文件。本发明公布的内存提取方法,保证了内存取证系统的通用性和兼容性。
安卓内存提取系统具有以下特点:
首先,为保证后端取证系统的灵活性,可以利用内存获取配置模块,对历史屏恢复方式进行灵活设置。为支持不同的取证目标,取证配置模块支持两种不通的内存获取策略:策略1完整内存镜像获取策略,策略2特定App进程获取策略。
其次,不仅提取内存镜像文件,而且提取了内存映射文件用于后端取证系统进行屏幕恢复。为实现屏幕恢复,内存提取子系统借助PROC虚拟文件系统和基于Ptrace的远程注入模块设计。
其它步骤及参数与具体实施方式一至九之一相同。
采用以下实施例验证本发明的有益效果:
实施例一:
本实施例具体是按照以下步骤制备的:
图一显示了实现本发明的系统基本结构,其具体实施方式如下:
(一)内存提取系统可以根据取证策略配置模块采取两种不同的取证策略:策略1、完整内存镜像获取策略;策略2、App特定进程获取策略。策略1适用于对目标手机中的所有App进行取证的场景;策略2适用于针对特定App进行取证的场景。
内存提取系统借助PROC虚拟文件系统,和基于Ptrace的远程注入模块,实现安卓内存空间完整的提取。提取的内存包括:Heap堆段、数据段、代码段;通过内存提取与ShellCode注入模块,实现对安卓内存栈空间stack的提取。
(二)原始内存证据存储系统对内存提取系统获取的目标手机的原始内存证据,包括:内存镜像文件和内存映射文件进行存储。此外还包括原始内存证据相关描述信息。
(三)安卓App历史屏恢复方法与取证系统安卓App历史屏取证方法,利用MVC架构中的Model模型来实现。安卓App历史屏幕恢复方法与取证系统包括五个模块:历史屏幕绘制APP,运行时环境生成模块,状态管理引擎,视图标记模块,以及历史屏恢复模块等。本发明公布的安卓App历史屏恢复方法,利用MVC架构中的View视图和Model模型数据生命周期的差异性实现,使其与特定App的具体实现无关,保证了取证系统的通用性。
本发明还可有其它多种实施例,在不背离本发明精神及其实质的情况下,本领域技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
Claims (10)
1.基于内存分析的安卓App历史屏恢复与取证系统,其特征在于:所述系统包括安卓内存提取子系统、内存证据存储子系统和安卓App历史屏恢复与取证子系统;
安卓内存提取子系统用于对目标App的内存空间进行完整提取;
内存证据存储子系统用于对安卓内存提取子系统提取的文件内存证据进行存储;
安卓App历史屏恢复与取证子系统用于根据安卓内存提取子系统提取的目标App的内存空间和内存证据存储子系统存储的文件内存证据,利用MVC架构中的模型来实现App历史屏恢复与取证。
2.根据权利要求1所述基于内存分析的安卓App历史屏恢复与取证系统,其特征在于:所述安卓内存提取子系统包括配置模块、PROC虚拟文件模块、基于PTRACE的远程注入模块和内存提取与线程空间提取模块;
配置模块用于支持完整内存镜像获取策略和App特定进程获取策略;
完整内存镜像获取策略针对目标手机中的所有App进行取证的场景;
App特定进程获取策略针对目标App进行取证的场景;
PROC虚拟文件模块是Linux系统中的一个虚拟文件,用于通过使用PROC在Linux内核空间和用户间之间进行通信;
基于PTRACE的远程注入模块用于实现安卓系统的进程跟踪,监听并控制特定进程的运行;
内存提取与线程空间提取模块用于实现对安卓内存栈空间进行提取,提取的内存包括MEM镜像文件和MAPS映射文件;
MEM镜像文件和MAPS映射文件包括:堆段、数据段,代码段,以及栈段;
MAPS映射文件用于查看进程内存映射,用于查看每一段内存的权限属性,以及文件路径信息,实现内存提取。
3.根据权利要求1或2所述基于内存分析的安卓App历史屏恢复与取证系统,其特征在于:所述内存证据存储子系统包括内存镜像文件模块、内存映射文件模块和内存证据描述信息模块;
内存镜像文件模块用于对MEM镜像文件内存进行分段访问;
内存映射文件模块用于对MAPS映射文件内存进行分段访问;
内存证据相关描述信息模块用于对访问文件的信息进行存储。
4.根据权利要求3所述基于内存分析的安卓App历史屏恢复与取证系统,其特征在于:所述安卓App历史屏恢复与取证子系统包括历史屏幕绘制APP模块、运行时环境生成模块、运行时状态管理引擎模块、视图标记模块和历史屏恢复模块;
历史屏幕绘制APP模块用于进行历史屏幕的绘制,实现历史屏幕恢复;
运行时环境生成模块用于利用内存提取模块中的MEM镜像文件和MAPS映射文件为屏幕绘制App进程生成执行环境;
运行时状态管理引擎模块用于利用内存提取模块获得的目标App的内存空间为屏幕绘制App进程生成执行环境;
视图标记模块用于通过遍历目标App内存空间中加载的所有类,判断是否为视图,找到顶层视图类并对顶层视图进行标记,作为历史屏幕恢复的起点;
历史屏恢复模块用于在确定了所有顶层视图之后,启动历史屏恢复模块开始屏幕绘制,在完成屏幕绘制后,历史屏幕绘制App模块将当前屏幕缓冲区内容保存到目标文件夹,并对重新绘制的屏幕进行排序恢复时间序列。
5.根据权利要求4所述基于内存分析的安卓App历史屏恢复与取证系统,其特征在于:所述PROC虚拟文件模块内若要创建一个虚拟文件,使用create_PROC_entry函数;
create_PROC_entry函数的参数为:待添加文件的文件名、一个权限对象以及用户要创建的文件位置,返回值是一个PROC_dir_entry指针,当PROC_dir_entr指针为NULL值时,表示在生成文件时发生了错误。
6.根据权利要求5所述基于内存分析的安卓App历史屏恢复与取证系统,其特征在于:所述PROC虚拟文件模块内若要删除一个虚拟文件,使用remove_PROC_entry函数;
remove_PROC_entry函数的参数为:待删除文件的文件名,以及待删除的文件在/PROC虚拟文件模块中的位置。
7.根据权利要求6所述基于内存分析的安卓App历史屏恢复与取证系统,其特征在于:所述PROC虚拟文件模块内若要写入一项属性数据,使用write_PROC函数;
write_PROC函数的参数为:filp参数、buff参数、len参数和data参数;
filp参数为一个PROC虚拟文件模块结构;
buff参数是需要写入的字符串数据;
len参数定义了在buff中数据的长度;
data参数是一个指向私有数据的指针。
8.根据权利要求7所述基于内存分析的安卓App历史屏恢复与取证系统,其特征在于:所述PROC虚拟文件模块内若要进行读取属性数据时,使用read_PROC函数;
read_PROC函数的参数为:page参数、count参数、start参数和off参数;
page参数是数据写入的位置;
count参数定义了写入的最大字符数;
在返回数据时,需要使用start和off参数;
当所有数据全部写入之后,设置eof。
9.根据权利要求8所述基于内存分析的安卓App历史屏恢复与取证系统,其特征在于:所述基于PTRACE的远程注入模块实现Linux系统进程跟踪,PTRACE函数的参数为:request参数、pid参数;
request参数为行为参数,确定进程的控制与跟踪;pid参数为远程进程的ID。
10.根据权利要求9所述基于内存分析的安卓App历史屏恢复与取证系统,其特征在于:所述内存提取与线程空间提取模块中内存提取模块采用的函数是dump_mem()函数;
dump_mem()函数的参数为:进程ID号,MAPS内存映射文件及MAPS内存映射文件位置,MEM镜像文件及MEM镜像文件位置,进程中线程的数量和线程ID;
内存提取模块具体工作过程为:
内存提取模块首先判断是否能定位到进程中的MAPS内存映射文件;若定位到进程中的MAPS内存映射文件,则MAPS内存映射文件中的所有项进行遍历;
首先判断该项是否属于/dev/ashmem,如果该项属于说明该项存在于物理内存空间,则调用dump_area_PTrace()函数实现内存提取,在dump_area_PTrace()函数中调用PTRACE实现内存数据的读取;如果该项不属于/dev/ashmem,则直接在PROC虚拟文件模块中把这项内存以MEM镜像文件的形式提取出来;
若未定位到进程中的MAPS内存映射文件,则无法实现内存提取;
所述内存提取与线程空间提取模块中线程空间提取模块用于实现栈空间的提取;
线程空间提取利用dump_area_inject()函数实现。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910110229.3A CN109815062A (zh) | 2019-02-11 | 2019-02-11 | 基于内存分析的安卓App历史屏恢复与取证系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910110229.3A CN109815062A (zh) | 2019-02-11 | 2019-02-11 | 基于内存分析的安卓App历史屏恢复与取证系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109815062A true CN109815062A (zh) | 2019-05-28 |
Family
ID=66606395
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910110229.3A Pending CN109815062A (zh) | 2019-02-11 | 2019-02-11 | 基于内存分析的安卓App历史屏恢复与取证系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109815062A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111159238A (zh) * | 2019-12-26 | 2020-05-15 | 厦门市美亚柏科信息股份有限公司 | 一种基于ios系统缓存文件取证方法、终端设备及存储介质 |
CN114416183A (zh) * | 2020-10-28 | 2022-04-29 | 武汉软艺信息技术有限公司 | 基于iOS系统快速还原App状态的方法和装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103942054A (zh) * | 2014-04-25 | 2014-07-23 | 北京邮电大学 | 一种基于安卓的数据取证系统 |
CN104156430A (zh) * | 2014-08-11 | 2014-11-19 | 四川效率源信息安全技术有限责任公司 | 一种快速提取安卓手机数据的装置和方法 |
CN104951515A (zh) * | 2015-05-29 | 2015-09-30 | 四川效率源信息安全技术有限责任公司 | 一种提取并分析Android手机行踪轨迹的方法 |
CN106874778A (zh) * | 2017-02-24 | 2017-06-20 | 陈晶 | 基于Android系统的智能终端文件获取以及数据恢复系统及方法 |
-
2019
- 2019-02-11 CN CN201910110229.3A patent/CN109815062A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103942054A (zh) * | 2014-04-25 | 2014-07-23 | 北京邮电大学 | 一种基于安卓的数据取证系统 |
CN104156430A (zh) * | 2014-08-11 | 2014-11-19 | 四川效率源信息安全技术有限责任公司 | 一种快速提取安卓手机数据的装置和方法 |
CN104951515A (zh) * | 2015-05-29 | 2015-09-30 | 四川效率源信息安全技术有限责任公司 | 一种提取并分析Android手机行踪轨迹的方法 |
CN106874778A (zh) * | 2017-02-24 | 2017-06-20 | 陈晶 | 基于Android系统的智能终端文件获取以及数据恢复系统及方法 |
Non-Patent Citations (2)
Title |
---|
国与同,: "安卓应用屏幕恢复内存取证技术研究", 《中国优秀硕士学位论文全文数据库信息科技辑(月刊)》 * |
赵斌,等;: "面向安卓移动终端设备数据取证技术", 《济宁学院学报》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111159238A (zh) * | 2019-12-26 | 2020-05-15 | 厦门市美亚柏科信息股份有限公司 | 一种基于ios系统缓存文件取证方法、终端设备及存储介质 |
CN114416183A (zh) * | 2020-10-28 | 2022-04-29 | 武汉软艺信息技术有限公司 | 基于iOS系统快速还原App状态的方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104598809B (zh) | 程序的监控方法及其防御方法以及相关装置 | |
JP4783471B2 (ja) | クラスが有するメソッドを呼出して実行するコンピュータ・システムが行う方法 | |
Flood et al. | Shenandoah: An open-source concurrent compacting garbage collector for openjdk | |
US6701520B1 (en) | Preventing garbage collection of objects in object oriented computer programming languages | |
US11132294B2 (en) | Real-time replicating garbage collection | |
US11620215B2 (en) | Multi-threaded pause-less replicating garbage collection | |
US7036118B1 (en) | System for executing computer programs on a limited-memory computing machine | |
US6584478B1 (en) | Transparent garbage collection of resources | |
EP1735696A1 (en) | System and method for program execution | |
CN101782868A (zh) | 一种用于对本地方法调用进行性能测试的方法和装置 | |
US20020120823A1 (en) | Trace termination for on-the-fly garbage collection for weakly-consistent computer architecture | |
CN109815062A (zh) | 基于内存分析的安卓App历史屏恢复与取证系统 | |
CN110471700A (zh) | 图形处理方法、装置、存储介质及电子设备 | |
Stadler et al. | Lazy continuations for Java virtual machines | |
US7703108B2 (en) | Native code isolation in a multi-tasking Java virtual machine | |
CN101593257A (zh) | 基于.Net虚拟机的软件保护系统和方法 | |
Sparud | Tracing and debugging lazy functional computations | |
US20220308871A1 (en) | Implementing state-based frame barriers to process colorless roots during concurrent execution | |
Schimpf | Garbage collection for Prolog based on twin cells | |
Leiserson | Defining scalable high performance programming with DEF | |
Hartel et al. | A programming and a modelling perspective on the evaluation of Java card implementations | |
Reid | Malloc pointers and stable pointers: Improving Haskell's foreign language interface | |
Brahnmath | Optimizing Orthogonal Persistence for Java (MS Thesis) | |
Reenskaug | A DCI execution model | |
Burdonov et al. | The CLOS project: Towards an object-oriented environment for application development |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190528 |