一种移动客户端的应用程序分析方法及分析系统与流程

文档序号:12467756阅读:379来源:国知局
一种移动客户端的应用程序分析方法及分析系统与流程

本发明涉及应用程序安全技术领域,特别是涉及一种移动客户端的应用程序分析方法及分析系统。



背景技术:

目前,智能手机、平板电脑等移动终端都具备视频观看、语音通话、搜索等多种多样的功能,而这些功能的实现则主要依赖于在移动终端上所安装的应用程序;在当前的手机操作平台中,往往会出现恶意代码样本数量频发的问题,常规的使用人工逆向分析来判断样本是否存在威胁的方法已经不能胜任数量庞大的应用程序样本群。针对数量庞大、特征繁多的样本群,样本分析工程师缺少一种高效的辅助分析手段,以尽可能全面地触发且监控样本潜在的行为,并了解自身安装的应用是否存在不安全行为。



技术实现要素:

本发明所要解决的技术问题是:提供一种移动客户端的应用程序分析方法及分析系统,以在不影响程序分析准确性的情况下,提高应用程序分析的效率。

本发明解决上述技术问题所采用的技术方案是:

本发明提供了一种移动客户端的应用程序分析方法,包括:选定运行应用程序所调用的操作系统中的关键API;获取移动客户端的操作系统的源码,对关键API进行插桩;在操作系统中运行应用程序,记录应用程序的程序行为;根据程序行为,生成分析结果。

进一步的,选定运行应用程序所调用的操作系统中的关键API的过程包括:确定应用程序在操作系统中所要实现的程序功能;获取实现程序功能所要调用的所有API函数,建立API函数的调用顺序;根据调用顺序,选定关键API。

进一步的,根据调用顺序,选定关键API的过程包括:根据调用顺序,确定所有API函数的调用层级以及每一调用层级中的API函数的数量;将每一调用层级中,与前一调用层级中的至少两个API函数相关联的API函数,作为关键API。

进一步的,根据调用顺序,选定关键API的过程包括:根据调用顺序,确定操作系统中的framework层的所有API的调用层级;以调用层级的最下级的API函数作为关键API。

进一步的,获取移动客户端的操作系统的源码,对关键API进行插桩的过程包括:在关键API的入口处或返回处增加打印log的代码,用于执行应用程序时输出log信息;其中,log信息至少包括:log标识、关键API的名称或标识、进程ID、关键API的传入参数和返回参数。

进一步的,获取移动客户端的操作系统的源码,对关键API进行插桩的过程还包括:重新编译源码,得到操作系统的镜像。

进一步的,在操作系统中运行应用程序,记录应用程序的程序行为的过程包括:在模拟器中运行操作系统,在操作系统中安装应用程序;利用代码调度调试工具控制应用程序执行其程序功能;记录执行程序功能的过程中所输出的log信息,并获取应用程序的程序包名。

进一步的,根据程序行为,生成分析结果的过程包括:筛选输出的所有log信息,确定对应关键API的log信息;根据关键API的log信息,按照预设规则匹配关键威胁特征,生成匹配结果报告。

进一步的,筛选输出的所有log信息,确定对应关键API的log信息的过程包括:查找所有log信息的log标识,筛选具有log标识的log信息;获取所有log信息的进程ID,通过查找进程ID与对应程序包名进行过滤,确定对应关键API的log信息。

本发明还提供了一种应用程序分析系统,包括:选定单元,用于选定运行应用程序所调用的操作系统中的关键API;插桩单元,用于获取移动客户端的操作系统的源码,对关键API进行插桩;记录单元,用于在操作系统中运行应用程序,记录应用程序的程序行为;分析单元,用于根据程序行为,生成分析结果。

进一步的,选定单元还用于:确定应用程序在操作系统中所要实现的程序功能;获取实现程序功能所要调用的所有API函数,建立API函数的调用顺序;根据调用顺序,选定关键API。

进一步的,选定单元还用于:根据调用顺序,确定所有API函数的调用层级以及每一调用层级中的API函数的数量;将每一调用层级中,与前一调用层级中的至少两个API函数相关联的API函数,作为关键API。

进一步的,选定单元还用于:根据调用顺序,确定操作系统中的framework层的所有API的调用层级;以调用层级的最下级的API函数作为关键API。

进一步的,插桩单元还用于:在关键API的入口处或返回处增加打印log的代码,用于执行应用程序时输出log信息;其中,log信息至少包括:log标识、关键API的名称或标识、进程ID、关键API的传入参数和返回参数。

进一步的,插桩单元还用于:重新编译源码,得到操作系统的镜像。

进一步的,记录单元还用于:在模拟器中运行操作系统,在操作系统中安装应用程序;利用代码调度调试工具控制应用程序执行其程序功能;记录执行程序功能的过程中所输出的log信息,并获取应用程序的程序包名。

进一步的,分析单元还用于:筛选输出的所有log信息,确定对应关键API的log信息;根据关键API的log信息,按照预设规则匹配关键威胁特征,生成匹配结果报告。

进一步的,分析单元还用于:查找所有log信息的log标识,筛选具有log标识的log信息;获取所有log信息的进程ID,通过查找进程ID与对应程序包名进行过滤,确定对应关键API的log信息。

本发明采用上述技术方案所具有的有益效果是:

本发明的分析方法通过记录应用程序运行时,应用程序调用操作系统中关键API时所执行的程序行为,并将所记录的程序行为作为分析应用程序是否安全的参考依据,可以极大的减少对数据庞大的样本进行分析的任务量,提高了应用程序分析的效率。

附图说明

图1为本发明一实施例中分析方法的整体流程图;

图2为本发明一实施例中调用顺序及调用层级的示意图。

具体实施方式

为清楚的说明本发明中的方案,下面给出优选的实施例并结合附图详细说明。以下的说明本质上仅仅是示例性的而并不是为了限制本公开的应用或用途。应当理解的是,在全部的附图中,对应的附图标记表示相同或对应的部件和特征。

如图1所示,本发明提供了一种移动客户端的应用程序分析方法,其步骤包括:

S101、选定运行应用程序所调用的操作系统中的关键API;其中,关键API为对应用程序进行分析后,用于后续插桩的系统AI;

S102、获取移动客户端的操作系统的源码,对关键API进行插桩;该步骤中,可以采用常规的插桩技术对关键API进行插桩,例如,在应用程序中插入一些“探针”,通过探针来获取程序运行的特征数据;

S103、在操作系统中运行应用程序,记录应用程序的程序行为;

S104、根据程序行为,生成分析结果。

不同于常规分析方法针对大量程序样本进行分析的流程,本发明分析方法通过监测及分析应用程序运行所调用的关键API的程序行为,可以有效降低样本分析数量,并能提高应用程序分析的准确性。

在本发明的一个实施例中,上述步骤101中,选定运行应用程序所调用的操作系统中的关键API的过程包括:

确定应用程序在操作系统中所要实现的程序功能;例如,对于优酷、爱奇艺等应用程序,其程序功能就为在线视频播放、本地视频播放等,而对于qq音乐、酷狗音乐等应用程序,其所要实现的程序功能则为音乐播放;需要说明的是,随着应用程序自身附加的程序功能的增多,单一应用程序可以实现多种不同的程序功能,因此我们所选定的关键API则要跟预期分析的程序功能相适配,例如,对于上述的优酷、爱奇艺等应用程序,可以选定在线视频播放功能或者本地视频播放功能的其中一个作为预期分析的程序功能;由于同一应用程序所能实现的不同程序功能之间可能存在关联,因此本发明在分析过程中所选定的关键API的类型及数量需要根据实际分析需要确定,本发明对此不作限制;

获取实现程序功能所要调用的所有API函数,建立API函数的调用顺序;图2所示的是一实施例中某个应用程序实现的程序功能所调用的API函数的顺序,首先在framework层调用相关的API函数,在执行完成framework层的API函数后,调用libraries层的相关API函数,同时,framework层和libraries层也包含有多个API函数,通过设定的API函数调用顺序,共同实现预期的程序功能;

本领域技术人员可以根据调用顺序,选定用于插桩的关键API。

在本发明的一个实施例中,根据调用顺序,选定关键API的过程包括:

根据调用顺序,确定所有API函数的调用层级以及每一调用层级中的API函数的数量;例如,图2的实施例中,API A、API B和API D处于同一层级,可以将该层级命名为最上级或第一层级,而与API A和API B相关联的API C、以及与API D相关联的API E则处于后一层级,也可以将该层级命名为第二层级;同理,可对framework层和libraries层的其它API函数建立调用层级;

将每一调用层级中,与前一调用层级中的至少两个API函数相关联的API函数,作为关键API;例如,图2的实施例中,处于第三层级的API F关联有前一层级的API C和API E两个函数,则可以选定该API F为关键API。

在本发明的另一个实施例中,根据调用顺序,选定关键API的过程包括:

根据调用顺序,确定操作系统中的framework层的所有API的调用层级;

以调用层级的最下级的API函数作为关键API,该步骤中,所选定的最下级的API为直接关联libraries层的函数,即图2的实施例中的API X。

在本发明的一个实施例中,获取移动客户端的操作系统的源码,对关键API进行插桩的过程包括:

在关键API的入口处或返回处增加打印log的代码,用于执行应用程序时输出log信息;其中,log信息至少包括:log标识、关键API的名称或标识、进程ID、关键API的传入参数和返回参数。

例如:选中的关键API在源代码目为:

修改时,在return native_get(key);前插入如下3行代码:

其中,定义GUID是log标识,定义msg是需要打印的log信息,由Log函数执行打印log信息的功能。

由于移动客户端的操作系统所安装的应用程序都会打印log信息,为了使插桩后的应用程序所输出的log信息与其它应用程序的log区分开,因此需要用log标识加以标记。

分析人员通过关键API名称或标识,可以知道被分析的应用程序直接或间接使用该API的途径,以及其执行的操作内容,例如写文件、发送网络数据、读取通讯录等。

同时,分析人员也可以通过关键API的传入参数和返回参数,了解API的操作内容及操作结果,例如,应用程序所读取的短信的具体内容,执行某条sql语句是否成功。

在本发明的一个实施例中,获取移动客户端的操作系统的源码,对关键API进行插桩的过程还包括:

重新编译源码,得到操作系统的镜像;重新编译源码可以得到涉及操作系统镜像的数据文件,如system.img文件;在得到相关数据文件后,技术人员可以使用操作系统模拟器加载执行该应用程序,从而可以实现对应用程序样本的监控,并将其操作行为记录在每条log信息中。

在本发明的一个实施例中,在操作系统中运行应用程序,记录应用程序的程序行为的过程包括:

在模拟器中运行操作系统,在操作系统中安装应用程序;

利用代码调度调试工具控制应用程序执行其程序功能;代码调度调试工具可以模拟对应用程序的“全面触发”操作,“全面触发”是指通过代码工具模拟人对app进行操作,例如滑动、点击等,使应用程序的各个程序功能模块都尽可能执行;特别是待分析的应用程序中有一些行为需要执行特定操作后才能发生,因此为避免遗漏,需要利用代码调度调试工具进行模拟操作;例如,在对android系统的应用程序进行分析时,使用android系统自带的调试方案搭建分析环境,并使用Android emulator命令,Android adb命令,avd telnet命令,Android Monkey等实现代码调度调试工具自动化分析。

记录执行程序功能的过程中所输出的log信息,并获取应用程序的程序包名。

在本发明的一个实施例中,根据程序行为,生成分析结果的过程包括:

筛选输出的所有log信息,确定对应关键API的log信息;实施例中,将未标注有log标识的log信息删除,将带有log标识的log信息作为对应关键API的log信息;

根据关键API的log信息,按照预设规则匹配关键威胁特征,生成匹配结果报告;关键威胁特征是指记录的行为中出现破坏手机安全,威胁用户隐私等恶意操作的行为,例如:SQL注入,短信发送敏感信息,设备管理器漏洞;此步骤的目的是给分析人员判定被分析的应用是否属于恶意代码提供依据。

每个具体的关键威胁特征对应特定的规则,例如:匹配提取短信中内容,发现包含本机系统版本等信息,即作为一条威胁特征。

实施例中,所记录的程序行为包括但不限于发起网络连接、网络发送信息、网络接收信息、打开文件、读取文件、写文件、发送短信、读取本地短信、获取本机号码、读取通讯录、拨打电话、获取地理位置信息、录音、开启广播监听、开启Activity、开启Service,数据库相关操作、密码学相关操作。

在本发明的一个实施例中,筛选输出的所有log信息,确定对应关键API的log信息的过程包括:

查找所有log信息的log标识,筛选具有log标识的log信息;

获取所有log信息的进程ID,通过查找进程ID与对应程序包名进行过滤,确定对应关键API的log信息。

本发明还提供了一种应用程序分析系统,该分析系统采用上述实施例中所公开的分析方法对移动客户端的应用程序进行分析,分析系统包括:

选定单元,用于选定运行应用程序所调用的操作系统中的关键API;

插桩单元,用于获取移动客户端的操作系统的源码,对关键API进行插桩;

记录单元,用于在操作系统中运行应用程序,记录应用程序的程序行为;

分析单元,用于根据程序行为,生成分析结果。

在本发明的一个实施例中,选定单元还用于:确定应用程序在操作系统中所要实现的程序功能;获取实现程序功能所要调用的所有API函数,建立API函数的调用顺序;根据调用顺序,选定关键API。

在本发明的一个实施例中,选定单元还用于:根据调用顺序,确定所有API函数的调用层级以及每一调用层级中的API函数的数量;将每一调用层级中,与前一调用层级中的至少两个API函数相关联的API函数,作为关键API。

在本发明的一个实施例中,选定单元还用于:根据调用顺序,确定操作系统中的framework层的所有API的调用层级;以调用层级的最下级的API函数作为关键API。

在本发明的一个实施例中,插桩单元还用于:在关键API的入口处或返回处增加打印log的代码,用于执行应用程序时输出log信息;其中,log信息至少包括:log标识、关键API的名称或标识、进程ID、关键API的传入参数和返回参数。

在本发明的一个实施例中,插桩单元还用于:重新编译源码,得到操作系统的镜像。

在本发明的一个实施例中,记录单元还用于:在模拟器中运行操作系统,在操作系统中安装应用程序;利用代码调度调试工具控制应用程序执行其程序功能;记录执行程序功能的过程中所输出的log信息,并获取应用程序的程序包名。

在本发明的一个实施例中,分析单元还用于:筛选输出的所有log信息,确定对应关键API的log信息;根据关键API的log信息,按照预设规则匹配关键威胁特征,生成匹配结果报告。

在本发明的一个实施例中,分析单元还用于:查找所有log信息的log标识,筛选具有log标识的log信息;获取所有log信息的进程ID,通过查找进程ID与对应程序包名进行过滤,确定对应关键API的log信息。

综上所述,以上所述内容仅为本发明的实施例,仅用于说明本发明的原理,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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