一种iOS应用安全分析方法及装置转让专利

申请号 : CN201910398818.6

文献号 : CN110287700A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 徐国爱张淼郭景怡田思

申请人 : 北京邮电大学

摘要 :

本发明公开了一种iOS应用安全分析方法及装置,其中,所述iOS应用安全分析方法包括:S1):对iOS应用进行预处理以获得Mach-O二进制,将所述Mach-O二进制作为符号执行模块的输入;S2):对所述Mach-O二进制进行关键代码定位并从所述关键代码所在的状态开始符号执行;S3):对所述符号执行期间的运行时信息进行分析并记录路径约束;S4):根据预定义规则对获得的路径进行安全分析,以得出安全分析报告。

权利要求 :

1.一种iOS应用安全分析方法,其特征在于,所述iOS应用安全分析方法包括:S1):对iOS应用进行预处理以获得Mach-O二进制,将所述Mach-O二进制作为符号执行模块的输入;

S2):对所述Mach-O二进制进行关键代码定位并从所述关键代码所在的状态开始符号执行;

S3):对所述符号执行期间的运行时信息进行分析并记录路径约束;

S4):根据预定义规则对获得的路径进行安全分析,以得出安全分析报告。

2.根据权利要求1所述的iOS应用安全分析方法,其特征在于,步骤S1)包括:S11):从所述iOS应用中提取出Mach-O格式的可执行文件;

S12):解析所述Mach-O格式的可执行文件的动态链接的库/框架与符号;

S13):根据预定义规则、Mach-O格式的可执行文件以及所述符号得到所述路径生成模块的输入。

3.根据权利要求2所述的iOS应用安全分析方法,其特征在于,在步骤S11中,还包括对所述Mach-O格式的可执行文件进行脱壳处理。

4.根据权利要求2所述的iOS应用安全分析方法,其特征在于,在步骤S2)中,当一段代码包括预定义规则中的符号时,判定该段代码为关键代码;当一段代码不包含预定义规则中的符号时,判定该段代码不是关键代码。

5.根据权利要求1所述的iOS应用安全分析方法,其特征在于,在步骤S3)中,符号执行到一次方法调用时,通过解析该调用发生时的程序状态确定调用所属路径,对调用节点进行标准化表示后添加到执行树,以记录路径约束。

6.根据权利要求1所述的iOS应用安全分析方法,其特征在于,在步骤S4中,所述安全分析报告包括:不安全代码片段、匹配的安全规则、所属路径、路径约束以及能触发该路径的输入集合。

7.一种iOS应用安全分析装置,其特征在于,包括:

预处理模块,用于对iOS应用进行预处理以获得Mach-O二进制,将所述Mach-O二进制作为符号执行模块的输入;

符号执行模块,用于对所述Mach-O二进制进行关键代码定位并从所述关键代码所在的状态开始符号执行;

分析及记录模块,用于对所述符号执行期间的运行时信息进行分析并记录路径约束;

以及

安全分析模块,用于根据预定义规则对获得的路径进行安全分析,以得出安全分析报告。

8.如权利要求1所述的iOS应用安全分析装置,其特征在于,所述安全分析报告分析报告包括:不安全代码片段、匹配的安全规则、所属路径、路径约束以及能触发该路径的输入集合。

9.一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至6任一项所述iOS应用安全分析方法的步骤。

10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述iOS应用安全分析方法的步骤。

说明书 :

一种iOS应用安全分析方法及装置

技术领域

[0001] 本发明涉及一种对iOS应用二进制进行安全性检测的领域,属于信息安全中的软件安全领域,特别是指iOS应用安全分析方法及装置。

背景技术

[0002] 对iOS应用的安全性分析根据分析手段可以分为动态分析和静态分析。有经验的测试人员通常在拿到应用后从目标功能点切入,使用已有的测试框架进行针对性的测试。动态测试框架以调试、fuzz、注入为主,二进制自动化静态分析则大多落在字符检查以及二进制的保护措施上,例如对二进制的标识位、硬编码字符串、符号表、动态链接库、头文件信息进行安全检测。安全人员通常先对二进制进行信息提取,随后借助类IDA反编译工具识别关键代码,再使用动态测试框架进一步分析。以下分别对上述步骤进行解释说明。
[0003] 1.1静态分析
[0004] 1.1.1.二进制文件安全性检测
[0005] 对二进制文件的检查主要包括:共享库获取,保护检查,字符串获取,硬编码检查,段信息检查。
[0006] 1)共享库获取。测试人员可以使用otool工具获得当前二进制动态链接的库文件,通过应用所使用的库可以推测应用的功能,为动态测试提供切入点。
[0007] 2)保护检查。保护检查主要针对应用的若干安全特征进行查看。查看cryptid的值来判定应用的可执行文件是否被加密;检查PIE标识位来判定应用是否使用了内存地址随机化;检查应用是否使用了ARC,ARC的目的是代替用户来进行更为安全合理的内存管理;栈金丝雀保护是已知的放置在缓冲器和控制数据之间的一个随机值,当缓冲器溢出时,最先被破坏通常是金丝雀值,因此当金丝雀的数据的验证失败的时候,就表示出现了缓冲区溢出,从而触发保护机制,并使程序停止运行,此处通过检查___stack_chk_标识位来检查是否使用该机制。
[0008] 3)硬编码字符。在硬编码检查中,遍历二进制文件的所有字符串,查看是否有邮件地址,IP地址,号码,以及URL被硬编码。
[0009] 1.1.2.导入库分析
[0010] 在iOS上,不管是动态链接库、守护进程,还是App Store中应用软件,或多或少都会用到iOS系统提供的库。分析人员可以通过解析Mach-O文件,从中提取出库路径,名字等信息,例如利用otool工具的-L命令可方便的从Mach-O文件中提取出导入库信息。一旦从可执行文件中提取出Apple官方公开库的名字,我们就可以从Apple开发者官网上査找并收集该库的作用和功能。在掌握了这些库提供的功能和作用之后逆向分析人员就可以初步得出程序可能要实现的功能或者系统服务。这将有助于掌握软件背景,及快速定位逆向关键代码位置,为后续漏洞分析提供思路及线索。
[0011] 除导入库信息之外,还可以进一步分析应用具体使用的还存储有导入函数表及引用的库函数信息,这些信息包括库函数的虚拟地址及名字。通过导入库分析人员只能粗略得到软件的功能信息,而通过导入函数分析就能细粒度的得到软件的大致功能。利用IDA工具,可很方便的在IDA的Imports窗口中查看一个程序的导入函数情况。
[0012] 一个应用程序的导入函数数目从几个到几百个不等,这取决于应用软件的功能和大小。面对如此多的导入函数,在进行静态分析时,如何从中提取出有用信息,是一个亟待解决的问题。为此提出了通过分类整理方法来分析导入函数的分析方案。该方案按照导入函数的功能来对导入函数进行分类,从而从整体上把握程序的大致功能。下面列出几种常见的分类方法:
[0013] 1)文件操作
[0014] 文件操作主要有文件的打开,读写,创建等操作。能执行这些功能的常见函数有:fopen、open、fwrite、fread、fseek等。这些函数的综合运用就能实现操作文件的功能。所以—旦在导入函数中发现这些函数就可以把它归为一类。
[0015] 2)网络通信
[0016] 网络通信主要是实现应用程序的通信操作。在iOS平台下实现网络通信功能主要是通过CFnetwork框架提供的库函数来实现的,常用的函数有CFHostCreateWithName、CFHostGetAddressing、CFHostSetClient、CFHostScheduleWithRunloop等。另外也可通过使用更底层的函数例如像:socket、bind、listen、send、recv等函数来实现网络通信。所以可以将导入函数中的这类函数归为网络通信类函数。
[0017] 3)系统状态
[0018] 在iOS系统下可通过UIKit框架的UIDevice类提供的方法获取设备的名字、系统名字、系统版本等信息。利用SystemConfiguration框架提供的库函数可以测试与目标主机的联通性。所以在导入函数中发现这类函数可以将其归为一类。
[0019] 1.1.3.Objective-C头文件信息提取
[0020] 虽然使用otool工具能够分析查看到类名、方法类型、成员变量等信息,但是不便于阅读理解。为此可以利用class-dump-z、商业版的IDApro或者使用IDA插件objc-helper-plugin-ida对Mach-O文件进行自动解析,从而还原出和源码几乎一样的头文件结构和类定义信息。对于由Objectiva-C编写的应用程序,分析还原出来的头文件是静态分析中相当重要的一步。因为目前在iOS平台下还没有比较成熟的商业化的混淆工具,所大多数情况下从目标软件中提取出来的头文件,可以直接从其名字就可料大致推测出其方法的作用和功能。
[0021] 1.1.4.硬编码字符串分析
[0022] 硬编码字符串是指程序员在编写代码时,直接嵌入到代码中的一种字符串。这种字符串会由编译器在生成可执行文件时,直接嵌入可执行文件当中。硬编码字符串中包含了大量的信息,通过分析这些字符串往往都能给逆向分析人员制定动态分析方案提供很多思路。iOS程序中常见的硬编码字符串有:输入错误提示信息、登陆失败及成功提示信息、文件名、文件路径、域名、IP地址、密文字符串等。分析人员可以借助于IDA工具的Strings窗口来对一个iOS程序中的硬编码字符串加分析。
[0023] 1.1.5.基于汇编的静态分析
[0024] 测试人员可以将Mach-O可执行文件反编译后查看其汇编代码,在上述静态分析技巧所得结果的基础之上,例如基于导入的符号、导入的函数、头文件信息、硬编码字符串等定位到关键代码,对关键代码所处的上下文进行语义分析,以确定一个合适的分析入口用于动态分析。
[0025] 1.2.动态分析
[0026] 通常情况下,测试人员通过上述静态分析来确定关键函数,利用动态调试工具在该点设置断点并单步追踪程序,调试时记录每个输入和代码路径,并基于运行时数据对程序的逻辑进行分析。
[0027] 1.3.现有方法的不足
[0028] 1)使用IDA等反汇编工具对二进制反汇编后获得汇编指令后,需要由测试人员进行阅读整理才能获得其语义。随着二进制逻辑复杂度提升,该方法的效率过低。
[0029] 2)动态测试时无法确保断点的触发。虽然测试人员在关键代码处下断点,却无法得知应用需要以怎样的方式运行才会到达该断点处。
[0030] 为解决现用技术问题的上述缺陷,有必要提出一种iOS应用安全分析方法。

发明内容

[0031] 有鉴于此,本发明的目的在于提出一种iOS应用安全分析方法及装置。
[0032] 基于上述目的本发明提供的iOS应用安全分析方法,其中,所述iOS应用安全分析方法包括:
[0033] S1):对iOS应用进行预处理以获得Mach-O二进制,将所述Mach-O二进制作为符号执行模块的输入;
[0034] S2):对所述Mach-O二进制进行关键代码定位并从所述关键代码所在的状态开始符号执行;
[0035] S3):对所述符号执行期间的运行时信息进行分析并记录路径约束;
[0036] S4):根据预定义规则对获得的路径进行安全分析,以得出安全分析报告。
[0037] 如上所述的iOS应用安全分析方法,其中,步骤S1)包括:
[0038] S11):从所述iOS应用中提取出Mach-O格式的可执行文件;
[0039] S12):解析所述Mach-O格式的可执行文件的动态链接的库/框架与符号;
[0040] S13):根据预定义规则、Mach-O格式的可执行文件以及所述符号得到所述路径生成模块的输入。
[0041] 如上所述的iOS应用安全分析方法,其中,在步骤S11中,还包括对所述Mach-O格式的可执行文件进行脱壳处理。
[0042] 如上所述的iOS应用安全分析方法,其中,在步骤S2)中,当一段代码包括预定义规则中的符号时,判定该段代码为关键代码;当一段代码不包含预定义规则中的符号时,判定该段代码不是关键代码。
[0043] 如上所述的iOS应用安全分析方法,其中,在步骤S3)中,符号执行到一次方法调用时,通过解析该调用发生时的程序状态确定调用所属路径,对调用节点进行标准化表示后添加到执行树,以记录路径约束。
[0044] 如上所述的iOS应用安全分析方法,其中,在步骤S4中,所述安全分析报告包括:不安全代码片段、匹配的安全规则、所属路径、路径约束以及能触发该路径的输入集合。
[0045] 本发明还提出了一种iOS应用安全分析装置,其中,所述iOS应用安全分析装置包括:
[0046] 预处理模块,用于对iOS应用进行预处理以获得Mach-O二进制,将所述Mach-O二进制作为符号执行模块的输入;
[0047] 符号执行模块,用于对所述Mach-O二进制进行关键代码定位并从所述关键代码所在的状态开始符号执行;
[0048] 分析及记录模块,用于对所述符号执行期间的运行时信息进行分析并记录路径约束;以及
[0049] 安全分析模块,用于根据预定义规则对获得的路径进行安全分析,以得出安全分析报告。
[0050] 如上所述的iOS应用安全分析装置,其中,所述安全分析报告包括:不安全代码片段、匹配的安全规则、所属路径、路径约束以及能触发该路径的输入集合。
[0051] 本发明还提出了一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时实现如上所述iOS应用安全分析方法的步骤。
[0052] 本发明还提出了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其中,所述计算机程序被处理器执行时实现如上所述iOS应用安全分析方法的步骤。
[0053] 目前已有的Mach-O二进制分析工具分为两类:
[0054] 1)基于字符串匹配技术的自动化分析工具,预定义敏感字符串,提取Mach-O二进制中字符串集合,并进行敏感字符匹配。缺点在于,由于不知道符号的具体存在位置以及存在方式,有很高的误报率。
[0055] 2)基于IDA类似的反汇编工具。基于IDA工具对Mach-O二进制进行反汇编,测试人员利用IDA中的搜索、定位、引用分析等功能,自主对二进制进行细粒度分析。缺点在于,由于Mach-O开发语言的动态特性,IDA的伪码功能也无法还原符合易于理解的调用信息,仍需要测试人员进行数据流分析来实现理解。
[0056] 从上面所述可以看出,本发明提供的iOS应用安全分析方法相对于上述已有技术的优点即:支持自动化的定位关键代码,通过符号执行技术还原运行时信息,识别安全/敏感特征。与第一类方法相比,检测结果有更高的准确性与有效率;与第二类方法相比,自动化分析极大提高了安全分析的效率。

附图说明

[0057] 图1为本发明实施例的iOS应用安全分析方法的流程图;
[0058] 图2为本发明的一具体实施例的iOS应用安全分析方法的流程图;
[0059] 图3为本发明实施例的iOS应用安全分析装置的结构示意图;
[0060] 图4为本发明实施例提供的终端设备的结构示意图。

具体实施方式

[0061] 为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。
[0062] 需要说明的是,本发明实施例中所有使用“第一”和“第二”的表述均是为了区分两个相同名称非相同的实体或者非相同的参量,可见“第一”“第二”仅为了表述的方便,不应理解为对本发明实施例的限定,后续实施例对此不再一一说明。
[0063] 如图1所示,本发明的提出的iOS应用安全分析方法包括如下步骤:S1):对iOS应用进行预处理以获得Mach-O二进制,将所述Mach-O二进制作为符号执行模块的输入;S2):对所述Mach-O二进制进行关键代码定位并从所述关键代码所在的状态开始符号执行;S3):对所述符号执行期间的运行时信息进行分析并记录路径约束;S4):根据预定义规则对获得的路径进行安全分析,以得出安全分析报告。
[0064] 目前在iOS应用分析领域,通常需要通过人工分析来识别关键行为,确定测试的目标和内容,再通过动态测试来进一步验证。然而随着代码量增大、应用行为愈发复杂,通过人工来进行分析是极具挑战的任务,这便带来了自动化程序分析的需求。
[0065] 通过本发明的iOS应用安全分析方法可以实现本发明的目标,具体地,本发明的主要目标是开发一个iOS应用静态分析引擎,该引擎以Mach-O二进制作为输入,根据预定义的特征实现关键代码定位;对关键代码所在状态进行初始化后开始符号执行,对符号执行期间的运行时信息进行分析,记录路径约束;最后,可以对出现预定义特征的路径进行约束求解,获得可以触发该特征的输入集合,该输入集合可以用作动态测试方案的参考信息。
[0066] 进一步地,在本发明的iOS应用安全分析方法的具体实施例中,如上所述的,步骤S1)包括如下步骤:
[0067] S11):从所述iOS应用中提取出Mach-O格式的可执行文件,优选地,还可以对所述Mach-O格式的可执行文件进行脱壳处理;
[0068] S12):解析所述Mach-O格式的可执行文件的动态链接的库/框架与符号;
[0069] S13):根据预定义规则、Mach-O格式的可执行文件以及所述符号得到所述路径生成模块的输入。
[0070] 在具体实施例中,在步骤S2)中,当一段代码包括预定义规则中的符号时,判定该段代码为关键代码;当一段代码不包含预定义规则中的符号时,判定该段代码不是关键代码,从而可以高效且准确地对关键代码进行定位。
[0071] 具体地,在步骤S3)中,符号执行到一次方法调用时,通过解析该调用发生时的程序状态确定调用所属路径,对调用节点进行标准化表示后添加到执行树,以记录路径约束。优选地,在步骤S4中,所述安全分析报告包括:不安全代码片段、匹配的安全规则、所属路径、路径约束以及能触发该路径的输入集合。
[0072] 现结合图2对本发明的iOS应用安全分析的一具体实施例进行详细地说明,在此需要说明地是该实施例的目的在于使本发明清楚,并不旨于对本发明进行限制。
[0073] 本发明的主要目标是开发一个iOS应用静态安全分析引擎,该引擎以Mach-O二进制作为输入,根据预定义规则实现关键代码定位并从关键代码所在状态开始符号执行;对符号执行期间的运行时信息进行分析,记录路径约束;最后,根据规则对获得的路径进行安全分析,通过求解路径约束可以获得该规则所述漏洞的触发条件,并将以上结果输出为报告。检测模型如图2所示。
[0074] (1)应用预处理
[0075] 对一个给定的iOS应用,首先判断该应用是否调用了预定义规则中的API(应用程序编程接口)或使用了预定义的ADT(抽象数据类型)数据。如是,则表明该应用可能触发预定义的规则;否则略过。预处理流程主要包括以下步骤:
[0076] 1)从iOS应用文件中提取出Mach-O格式的可执行文件,必要时进行脱壳处理。若该Mach-O文件支持多种架构平台运行,使用lipo工具从中提取出支持ARMv8架构的可执行文件用作分析。
[0077] 2)使用objdump类似工具解析Mach-O文件动态链接的库/框架与符号,并对符号的绑定信息进行分析。
[0078] 3)识别Mach-O文件是否引用了预定义规则中的符号,如是输出作为路径生成模块的输入,否则略过。
[0079] (2)关键代码定位分析
[0080] 对于给定的Mach-O文件,我们基于预定义的安全规则定位分析入口点后开始符号执行,而不是采用一般二进制分析思路——从程序入口点开始。主要考虑到以下几个原因:
[0081] 1)作为移动端应用,iOS应用是事件驱动的。从Mach-O文件的代码入口进行分析并不能抵达大部分的事件处理逻辑。
[0082] 2)iOS应用功能复杂,一个6.5M的轻量级Mach-O二进制可能存在数十万个方法。考虑到符号执行本身的限制,以及我们此时实验对上下文敏感度的需求,对全部方法进行分析也是不可行的。通过识别关键代码区域避免执行无关代码,减少符号执行的负荷。
[0083] 3)当一段代码不包含规则中的符号时,相关路径并不会触发安全规则,对该段代码的分析是无意义的。于是我们考虑在符号执行阶段对执行的目标代码进行限制,仅执行可能包含规则的路径。
[0084] (3)符号执行
[0085] 每当符号执行到一次方法调用时,通过解析该调用发生时的程序状态确定所属路径,对其进行标准化表示后添加到执行树中。我们对每一次调用做以下处理(以Objective-C方法为例):
[0086] 1)解析当前程序状态信息,主要对涉及调用解析的寄存器或者堆栈的数据进行解析,例如作为receiver的X0寄存器,作为selector的X1寄存器,用于存放调用参数的寄存器或栈地址。
[0087] 2)确认当前调用的具体信息后,判断是否需要模拟调用对当前程序状态进行修改,例如当调用具有返回值时修改X0寄存器为“返回值”(根据特定格式生成的符号),当调用没有返回值时也将X0中存放对象的状态修改为经过此次调用。以上状态修改需要进行指向分析。
[0088] 3)解析当前路径的历史信息,查找当前路径中的上一个调用节点(由于没有进行状态合并,当前调用节点的前向节点也是唯一的)。
[0089] 4)将当前节点添加到执行树中其所属路径中,作为上一个调用的子节点,节点属性定义如下表所示。
[0090] 表1调用节点属性
[0091]des 调用的描述
depth 节点在路径中的深度,唯一标识
context 调用发生的上下文
addr 调用发生的具体地址
rec 消息的接收者
sel 消息标识符
args 调用的参数;
pnode 当前调用的前向调用节点
label 当前路径的约束
[0092] (4)安全分析
[0093] 符号执行模块获得从关键代码处开始的所有可能执行路径,即以关键代码所在方法为起点的一棵执行树。树中每一个节点都为表1所示格式的调用节点。假设该段关键代码所匹配的规则为Ra,那么对该执行树进行Ra规则分析:遍历执行树获得每条执行路径;
[0094] 2)对每条执行路径,遍历调用节点,匹配是否存在Ra规则中所描述的调用特征;若存在特征,表示该路径可能触发规则Ra,继续第三步;否则丢弃该路径;
[0095] 3)对匹配该规则的路径进行约束求解,获得可以触发该路径的输入集合;
[0096] 4)生成安全检测报告,报告内容包括:规则内容,匹配该项规则的路径(包括路径上所有节点的信息),该路径的约束,以及可以触发该路径的输入集合。
[0097] 需要说明地是上述预定义规则可以为本领域技术人员所熟知的处理规则,在此不再进行详细地赘述。
[0098] 实施例:
[0099] (一)安全测试
[0100] 目前的iOS安全分析仍然主要由测试人主导手动完成,因为缺少一款细粒度的自动化Mach-O二进制分析工具,因此测试人员需要通过阅读汇编代码来识别二进制逻辑并进行安全分析。借助符号执行技术,本方案可以自动化恢复运行时信息并根据预定义的特征进行安全分析;同时,除了确认安全特征是否存在以外,还可以作为动态测试的参考。
[0101] (二)准入评估
[0102] 作为测评机构以及最终部署软件产品的单位,由于并不了解软件开发的流程,只能对软件进行黑盒检测,若软件中存在的安全隐患不能及时发现,对这些单位的安全运营将造成极大的威胁。本方案可以有效的解决这一问题,可以清楚的发现iOS应用中存在的风险,保证软件的安全与稳定。
[0103] 现对本发明的具体实施例的技术进行详细地说明,以使本发明更加清楚。
[0104] (一)基于符号的关键代码定位
[0105] 通过对二进制引用的符号以及该符号的绑定信息,判断符号的具体用途。根据预定义安全规则与前述获得的符号信息,通过引用分析技术来判断规则中特征可能出现的代码片段,将该代码片段作为本文所述安全分析引擎的入口,靶向性的进行符号执行,可以大大提高安全检测的效率。
[0106] (二)基于符号执行的运行时信息恢复
[0107] iOS应用在运行时会依赖一个运行时系统,静态分析二进制时无法依赖该运行时系统会加大通过静态手段来进行二进制分析的难度。因此,通过符号执行技术将二进制符号执行起来,在符号执行的过程中,对状态信息进行解析,通过解析状态信息来还原二进制的运行时信息,可以提高分析的准确度。
[0108] (三)基于路径约束的测试样例生成
[0109] 本方案在符号执行后,对触发规则的路径进行约束求解,所得解可以用于动态测试样例的生成。在动态测试时,将该测试样例用作输入可以用于验证该应用是否触发该规则。
[0110] 如图3所示,本发明还提出了一种iOS应用安全分析装置,其中,所述iOS应用安全分析装置包括:预处理模块10、符号执行模块20、分析及记录模块30以及安全分析模块40,其中,预处理模块10用于对iOS应用进行预处理以获得Mach-O二进制,将所述Mach-O二进制作为到路径生成模块的输入;符号执行模块20,用于对所述Mach-O二进制进行关键代码定位并从所述关键代码所在的状态开始符号执行;分析及记录模块30用于对符号执行期间的运行时信息进行分析并记录路径约束;以及安全分析模块40用于根据预定义规则对获得的路径进行安全分析,以得出安全分析报告。
[0111] 图4是本发明一实施例提供的一种终端设备的示意图。如图4所示,该实施例的终端设备6包括:处理器60、存储器61以及存储在存储器61中并可在处理器60上运行的计算机程序62,例如iOS应用安全分析程序。处理器60执行计算机程序62时实现上述各个iOS应用安全分析方法实施例中的步骤,例如上述所示的步骤S1至步骤S4。或者,处理器60执行计算机程序62时实现上述各装置实施例中各模块/单元的功能,例如图3所示模块10至40的功能。
[0112] 示例性的,计算机程序62可以被分割成一个或多个模块/单元,一个或者多个模块/单元被存储在存储器61中,并由处理器60执行,以完成本发明。一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述计算机程序62在终端设备6中的执行过程。
[0113] 终端设备6可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。终端设备6可包括,但不仅限于,处理器60、存储器61。本领域技术人员可以理解,图4仅仅终端设备6的示例,并不构成对终端设备6的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述终端设备还可以包括输入输出设备、网络接入设备、总线等。
[0114] 所称处理器60可以是中央处理单元(Central Processing Unit,CPU),还可以是其它通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其它可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
[0115] 存储器61可以是终端设备6的内部存储单元,例如终端设备6的硬盘或内存。存储器61也可以是终端设备6的外部存储设备,例如终端设备6上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,存储器61还可以既包括终端设备6的内部存储单元也包括外部存储设备。存储器
61用于存储计算机程序以及终端设备6所需的其它程序和数据。存储器61还可以用于暂时地存储已经输出或者将要输出的数据。
[0116] 所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0117] 在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
[0118] 本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
[0119] 在本发明所提供的实施例中,应该理解到,所揭露的装置/终端设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/终端设备实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
[0120] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0121] 另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0122] 所述集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
[0123] 所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本公开的范围(包括权利要求)被限于这些例子;在本发明的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本发明的不同方面的许多其它变化,为了简明它们没有在细节中提供。
[0124] 另外,为简化说明和讨论,并且为了不会使本发明难以理解,在所提供的附图中可以示出或可以不示出与集成电路(IC)芯片和其它部件的公知的电源/接地连接。此外,可以以框图的形式示出装置,以便避免使本发明难以理解,并且这也考虑了以下事实,即关于这些框图装置的实施方式的细节是高度取决于将要实施本发明的平台的(即,这些细节应当完全处于本领域技术人员的理解范围内)。在阐述了具体细节(例如,电路)以描述本发明的示例性实施例的情况下,对本领域技术人员来说显而易见的是,可以在没有这些具体细节的情况下或者这些具体细节有变化的情况下实施本发明。因此,这些描述应被认为是说明性的而不是限制性的。
[0125] 尽管已经结合了本发明的具体实施例对本发明进行了描述,但是根据前面的描述,这些实施例的很多替换、修改和变型对本领域普通技术人员来说将是显而易见的。例如,其它存储器架构(例如,动态RAM(DRAM))可以使用所讨论的实施例。
[0126] 本发明的实施例旨在涵盖落入所附权利要求的宽泛范围之内的所有这样的替换、修改和变型。因此,凡在本发明的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本发明的保护范围之内。