iOS平台文件读取保护方法、存储介质、电子设备及系统与流程

文档序号:17049380发布日期:2019-03-05 19:53阅读:271来源:国知局
iOS平台文件读取保护方法、存储介质、电子设备及系统与流程

本发明涉及信息安全领域,具体涉及一种ios平台文件读取保护方法、存储介质、电子设备及系统。



背景技术:

当前,随着移动设备的日益普及,移动应用产业尤其是ios应用随之得到飞速发展,且ios应用的开发模式和代码框架也随之发生了巨大变化。对于ios平台,其应用程序的构成分为主程序和模块文件,模块文件即为dylib文件,dylib文件是ios平台上的动态链接库文件,在ios应用开发的过程中,若需要编写某些功能模块注入到对应的进程中运行,则均是编写一个dylib文件,然后将该dylib文件注入到对应的进程中运行,且对于ios应用中文件数据的获取,也是相应编写一个dylib文件注入到ios应用中来进行文件数据的获取。

但是,在某些ios应用程序中总会有一些较为重要或核心的数据保存于ios应用程序的文件中,例如应用临时存储的中间结果文件等等,此时不法人员能够通过编写dylib文件注入到ios应用程序中来读取ios应用程序中保存的文件,使文件内容被非法读取,造成核心数据的丢失。



技术实现要素:

针对现有技术中存在的缺陷,本发明的目的在于提供一种ios平台文件读取保护方法,能够有效保证文件内容数据的读取安全。

为达到以上目的,本发明采取的技术方案是,包括:

s1:获取ios系统中的所有mach-o文件及每个mach-o文件所对应的内存起始地址,并根据内存起始地址获取mach-o文件在内存中的虚拟内存地址;

s2:根据mach-o文件在内存中的虚拟内存地址,解析mach-o文件,得到每个mach-o文件内每个函数的名称和指针,遍历每个函数的名称,找到每个mach-o文件内的open函数;

s3:编写一hook函数,所述hook函数用于获取open函数的调用堆栈信息;

s4:当使用open函数进行文件内容读取操作时,则使用hook函数获取当前open函数的调用堆栈信息,并将获取的调用堆栈信息上传至后台服务器以对获取的调用堆栈信息的合法性进行判断,若合法,则不做处理,若不合法,则禁止当前open函数的文件读取操作。

在上述技术方案的基础上,

所述后台服务器包括一数据库;

所述数据库中存储有所有open函数的所有合法调用堆栈信息;

判断获取的调用堆栈信息是否存在于数据库中,若存在,则获取的调用堆栈信息合法,若不存在,则获取的调用堆栈信息不合法。

在上述技术方案的基础上,

所述hook函数用于将目标函数的内存地址进行替换成设定地址;

当目标函数执行时,跳转至设定地址以进行调用堆栈信息的获取;

所述目标函数为open函数。

在上述技术方案的基础上,s4中,对于当前open函数的调用堆栈信息的获取,具体为:

s401:根据mach-o文件的虚拟内存地址和指针,获取mach-o文件中open函数的内存地址;

s402:将open函数的内存地址替换成设定地址;

s403:open函数跳转至设定地址,进行open函数的调用堆栈信息的获取。

在上述技术方案的基础上,定义根据mach-o文件的虚拟内存地址和指针获取的open函数的内存地址为原始内存地址;

当判定open函数的调用堆栈信息合法时,则open函数跳回至原始内存地址。

本发明还提供一种存储介质,该存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述所述的方法。

本发明还提供一种电子设备,包括存储器和处理器,存储器上储存有在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述所述的方法。

本发明还提供一种ios平台文件读取保护系统,包括:

获取模块,其用于获取ios系统中的所有mach-o文件及每个mach-o文件所对应的内存起始地址,并根据内存起始地址获取mach-o文件在内存中的虚拟内存地址;

执行模块,其用于其用于根据mach-o文件在内存中的虚拟内存地址,同时解析mach-o文件,得到每个mach-o文件内每个函数的名称和指针,遍历每个函数的名称,找到每个mach-o文件内的open函数,同时编写一hook函数,所述hook函数用于获取open函数的调用堆栈信息;

判断模块,其用于当使用open函数进行文件内容读取操作时,则使用hook函数获取当前open函数的调用堆栈信息,并将获取的调用堆栈信息上传至后台服务器以对获取的调用堆栈信息的合法性进行判断,若合法,则不做处理,若不合法,则禁止当前open函数的文件读取操作。

在上述技术方案的基础上,所述后台服务器包括一数据库;所述数据库中存储有所有open函数的所有合法调用堆栈信息;判断获取的调用堆栈信息是否存在于数据库中,若存在,则获取的调用堆栈信息合法,若不存在,则获取的调用堆栈信息不合法。

在上述技术方案的基础上,所述hook函数用于将目标函数的内存地址进行替换成设定地址;当目标函数执行时,跳转至设定地址以进行调用堆栈信息的获取;所述目标函数为open函数。

与现有技术相比,本发明的优点在于:针对进行应用程序中文件内容读取操作时所必须调用的open函数,根据调用堆栈信息即可得到当前具体的文件内容读取操作的相关信息,当使用open函数进行文件内容读取操作时,则使用hook函数获取当前open函数的调用堆栈信息,并将取的调用堆栈信息上传至后台服务器进行判断,后台服务器中存储有所有合法的调用堆栈信息,若合法,则不做处理,open函数继续进行文件内容的读取操作,若不合法,则禁止当前open函数的文件读取操作,有效保证数据的安全。

附图说明

图1为本发明实施例中一种ios平台文件读取保护方法的流程图;

图2为本发明实施例中一种电子设备的结构示意图。

具体实施方式

以下结合附图及实施例对本发明作进一步详细说明。

参见图1所示,本发明实施例提供一种ios平台文件读取保护方法,用于对ios系统中对程序内文件内容读取操作的合法性进行判断,有效保证数据的读取安全。在ios系统中,所有文件内容的读取操作均最终会调用open函数来实现,因此通过监控open函数的逻辑,获得调用open函数时的调用堆栈信息,对调用堆栈信息的合法性进行判断,从而判断当前文件的读取操作是否合法。open函数用于打开或创建文件。对于open函数,其原型如下:

intopen(constchar*,int,...);

其中,参数constchar*标示需要打开的文件名称;参数int标示对文件的操作;返回值int表示其操作是否成功等。

本发明实施例的ios平台文件读取保护方法具体包括:

s1:获取ios系统中的所有mach-o文件及每个mach-o文件所对应的内存起始地址,并根据内存起始地址获取mach-o文件在内存中的虚拟内存地址。open函数位于mach-o文件中,mach-o是ios系统中可执行文件的格式,对于mach-o文件的结构,具体包括headerstructure(头部)、loadcommand(加载命令)和segment(段),一个mach-o文件可以拥有多个段,每个段可以拥有零个或多个区域(section),每一个段都拥有一段虚拟地址映射到进程的地址空间,同时,一个完整的mach-o文件的末端是链接信息,其中包含了动态加载器用来链接可执行文件或者依赖库所需使用的符号表、字符串等等。open函数位于mach-o文件,且一个ios应用程序在运行时会加载多个mach-o文件,且每一个mach-o文件都有可能调用到open函数进行程序中文件内容的读取操作,因此为保证判断的准确性,我们需要获取ios系统中所有的mach-o文件,以便于进行后续的操作。

对于系统中mach-o文件的获取,首先可以通过系统函数获取到系统中mach-o文件的个数以及mach-o文件的内存起始地址,具体实现为:uint32_tc=_dyld_image_count();

通过_dyld_image_count来获取ios系统中所加载的mach-o文件的个数,然后执行

for(uint32_ti=0;i<c;i++)

即通过for循环来遍历mach-o文件,接着

onststructmach_header*header=_dyld_get_image_header(i)

即通过函数_dyld_get_image_header来获取mach-o文件的内存起始地址,接着

intptr_tslide=_dyld_get_image_vmaddr_slide(i);

即通过函数_dyld_get_image_vmaddr_slide来获取mach-o文件在内存中的虚拟内存地址。

s2:根据mach-o文件在内存中的虚拟内存地址,解析mach-o文件,得到每个mach-o文件内每个函数的名称和指针,遍历每个函数的名称,找到每个mach-o文件内的open函数。本步骤是为了找出mach-o文件中的目标函数,目标函数即为open函数。具体的:

对mach-o文件进行解析,在loadcommand(加载命令)内找到linkedit_segment、symtab_cmd、dysymtab_cmd,通过linkedit_segment则可以找到symtab_cmd中的symtab和strtab,其中,strtab内存储着mach-o文件内每个函数的名称,strtab内存储着mach-o文件内每个函数的索引,而mach-o文件内每个函数的函数指针着存储在section中,因此需要进一步地从mach-o文件中解析出section,其过程为:在mach-o文件中获取到对应的cmd,因为mach-o文件的解析是开源的,故可以按照开源的代码来解析需要查找的inkedit_segment、symtab_cmd、dysymtab_cmd等cmd地址,故遍历mach-o文件的loadcommand来查找,最终可以查找到section、symtab、strtab、indirect_symtab。得到每个mach-o文件内每个函数的名称和指针后,便可遍历每个函数的名称,找到每个mach-o文件内的open函数。

s3:编写一hook(钩子)函数,所述hook函数用于获取open函数的调用堆栈信息;即hook函数用于将目标函数的内存地址进行替换成设定地址,当目标函数执行时,跳转至设定地址以进行调用堆栈信息的获取,其中目标函数为open函数。其中,设定地址即为人为编写的函数地址,用于open函数跳转后执行,进而进行调用堆栈信息的获取。

本发明实施例中,hook函数的原型如下:

hook_function(char*pfuncname,void*pnew,void**psaveorg);

其中,hook_function为hook函数的名称;

参数char*pfuncname标示需要hook的函数名称,这里需要hook的函数名称为open;

参数void*pnew标示替换的函数的内存地址;

参数void**psaveorg标示存储系统原本的函数的内存地址。

s4:当使用open函数进行文件内容读取操作时,则使用hook函数获取当前open函数的调用堆栈信息,并将获取的调用堆栈信息上传至后台服务器以对获取的调用堆栈信息的合法性进行判断,若合法,则不做处理,若不合法,则禁止当前open函数的文件读取操作。

对于当前open函数的调用堆栈信息的获取,具体为:

s401:根据mach-o文件的虚拟内存地址和指针,获取mach-o文件中open函数的内存地址。

s402:将open函数的内存地址替换成设定地址。实现函数为psaveorg=setion_indirect_symbol_bindings[i]。

s403:open函数跳转至设定地址,进行open函数的调用堆栈信息的获取。

即每当有open函数进行文件内容的读取操作时,则采用hook的方式,替换open函数原本的内存地址,使open函数跳转到我们自己设定的内存地址中,同时定义一个函数指针staticint(*orig_open)(constchar*,int,...);用来存储open函数原先的内存地址,因此整个open函数执行时便会跳转至设定地址,执行我们相关调用堆栈信息的函数,进而方便调用堆栈信息的获取,调用堆栈信息的获取的函数为:

intmy_open(constchar*,int,...)

{

intnframecount=backtrace(paddr,10);

char**pframestrings=backtrace_symbols(paddr,nframecount);

后台服务器包括一数据库;数据库中存储有所有open函数的所有合法调用堆栈信息;判断获取的调用堆栈信息是否存在于数据库中,若存在,则获取的调用堆栈信息合法,若不存在,则获取的调用堆栈信息不合法,open函数在进行文件内容读取操作时,均对应有调用堆栈信息,正常的文件内容读取操作,其open函数所对应的调用堆栈信息为合法。同时,定义根据mach-o文件的虚拟内存地址和指针获取的open函数的内存地址为原始内存地址;当判定open函数的调用堆栈信息合法时,则open函数跳回至原始内存地址。

本发明实施例的ios平台文件读取保护方法的原理在于,针对进行应用程序中文件内容读取操作时所必须调用的open函数,且调用open函数在进行某个文件的内容读取时,open函数对应的调用堆栈信息均不相同,根据调用堆栈信息即可得到当前具体的文件内容读取操作的相关信息,如文件内容读取操作发起者等等,获取ios系统中的所有mach-o文件内的open函数,通过hook函数的手段,当使用open函数进行文件内容读取操作时,则使用hook函数获取当前open函数的调用堆栈信息,并将取的调用堆栈信息上传至后台服务器进行判断,后台服务器中存储有所有合法的调用堆栈信息,若合法,则不做处理,open函数继续进行文件内容的读取操作,若不合法,则禁止当前open函数的文件读取操作,有效保证数据的安全。

另外,对应上述ios平台文件读取保护方法,本发明还提供一种存储介质,存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述各实施例所述的ios平台文件读取保护方法的步骤。需要说明的是,所述存储介质包括u盘、移动硬盘、rom(read-onlymemory,只读存储器)、ram(randomaccessmemory,随机存取存储器)、磁碟或者光盘等各种可以存储程序代码的介质。

参见图2所示,对应上述ios平台文件读取保护方法,本发明还提供一种电子设备,包括存储器和处理器,存储器上储存有在处理器上运行的计算机程序,处理器执行计算机程序时实现上述各实施例的ios平台文件读取保护方法。

本发明实施例还提供一种基于上述ios平台文件读取保护方法的ios平台文件读取保护系统,包括获取模块、执行模块和判断模块。

获取模块用于获取ios系统中的所有mach-o文件及每个mach-o文件所对应的内存起始地址,并根据内存起始地址获取mach-o文件在内存中的虚拟内存地址;执行模块用于解析mach-o文件,得到每个mach-o文件内每个函数的名称和指针,遍历每个函数的名称,找到每个mach-o文件内的open函数,同时编写一hook函数,所述hook函数用于获取open函数的调用堆栈信息;判断模块用于当使用open函数进行文件内容读取操作时,则使用hook函数获取当前open函数的调用堆栈信息,并将获取的调用堆栈信息上传至后台服务器以对获取的调用堆栈信息的合法性进行判断,若合法,则不做处理,若不合法,则禁止当前open函数的文件读取操作。

后台服务器包括一数据库;数据库中存储有所有open函数的所有合法调用堆栈信息;判断获取的调用堆栈信息是否存在于数据库中,若存在,则获取的调用堆栈信息合法,若不存在,则获取的调用堆栈信息不合法。hook函数用于将目标函数的内存地址进行替换成设定地址;当目标函数执行时,跳转至设定地址以进行调用堆栈信息的获取;目标函数为open函数。

本发明实施例的ios平台文件读取保护系统的原理在于,针对进行应用程序中文件内容读取操作时所必须调用的open函数,且调用open函数在进行某个文件的内容读取时,open函数对应的调用堆栈信息均不相同,根据调用堆栈信息即可得到当前具体的文件内容读取操作的相关信息,如文件内容读取操作发起者等等,通过获取模块获取ios系统中的所有mach-o文件内的open函数,通过hook函数的手段,当使用open函数进行文件内容读取操作时,则使用hook函数获取当前open函数的调用堆栈信息,通过判断模块将取的调用堆栈信息上传至后台服务器进行判断,后台服务器中存储有所有合法的调用堆栈信息,若合法,则不做处理,open函数继续进行文件内容的读取操作,若不合法,则禁止当前open函数的文件读取操作,有效保证数据的安全。

本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1