一种基于apk加壳软件动态行为的查壳方法

文档序号:9453374阅读:532来源:国知局
一种基于apk加壳软件动态行为的查壳方法
【技术领域】
[0001]本发明属于移动客户端App安全技术,涉及安卓应用程序安装包(APK,AndroidPackage)的加壳,尤其涉及一种基于APK加壳软件动态行为的查壳方法。
【背景技术】
[0002]随着移动端技术应用的日益普及,移动软件产业得以飞速发展,与此同时,针对移动端的木马、病毒恶意代码软件也越来越多。猎豹移动安全数据显示,2014年全球感染病毒的安卓手机达2.8亿部,平均每天80万部安卓手机中毒,中国以近1.2亿部手机中毒高居榜首。据360互联网安全中心的报告显示,2014全年仅360互联网安全中心累计截获Android平台新增恶意程序样本326万个,为2013年的近4倍。
[0003]安卓手机的应用采用java开发,恶意代码也不例外。由于java解释语言的特性,在应用程序不加壳的情况下,通过静态分析技术可以较为容易的逆向得出木马和病毒的源码,然后通过分析检测断定是否存在木马病毒的特征,从而对木马病毒进行查杀。壳程序是一种可以对第三方软件进行加密或是变换结构而不影响其运行功能以达到躲避被恶意逆向分析的软件程序。加壳操作基于被保护程序的二进制代码,与被保护程序的逻辑相分离,因而稳定性高,适用度广。壳程序除了可以用于保护软件,在恶意代码反检测领域中也有广泛的应用。在恶意代码反检测领域,为了对加壳的恶意代码进行逆向分析,就必须先进行脱壳,针对不同的壳程序必须使用对应的脱壳程序进行脱壳,所以脱壳的第一步就是对壳进行检测,即查壳。
[0004]现有查壳方法大多基于静态文件特征进行查壳,如查壳工具PEID,是针对壳程序的二进制代码的特征码来进行查壳。这种基于静态文件特征进行查壳的方法存在较大的局限性,其存在的问题是可通过修改二进制文件抹去特征码或修改特征码来混淆查壳的结果,使得查壳结果的准确性低,查壳效率低。

【发明内容】

[0005]为了克服上述现有技术的不足,本发明提供一种基于APK加壳软件动态行为的查壳方法,通过安卓系统的Hook函数针对壳程序对系统函数和特征函数的调用进行监控,使加壳的程序运行在部署了监控程序的环境中,一旦被监控的函数被调用,则跳转到Hook函数中进行记录,从而获得加壳软件对系统函数和特征函数的调用特征,作为检测特征;再通过特征比对,得到加壳的程序相应的壳程序的类型;本发明可有效地对主流APK壳的类型进行检测,提尚分析加壳恶意代码的准确性和效率。
[0006]本发明提供的技术方案是:
[0007]—种基于APK加壳软件动态行为的查壳方法,所述查壳方法通过安卓系统的Hook函数,针对壳程序对系统函数和特征函数的调用进行动态行为监控,一旦被监控的函数被调用,则跳转到Hook函数中进行记录,再通过特征比对,得到加壳的程序相应的壳程序的类型;具体包括如下步骤:
[0008]I)通过Hook函数对加壳软件的函数调用进行动态行为监控,分别检测APK加壳软件对通用系统函数和特征函数的调用行为,构造得到所述APK加壳软件的加壳函数调用特征,包括加壳调用通用系统函数特征和加壳调用特征函数特征;
[0009]2)启动某一加壳的程序;
[0010]3)针对步骤2)所述加壳的程序,通过Hook函数对加壳程序的函数调用进行动态行为监控,判断加壳程序调用的函数是否是特征函数;
[0011]4)如果加壳程序调用的函数是特征函数,则将所述特征函数的名称与特征函数特征库中的加壳调用特征函数特征进行匹配,若找到特征匹配项,则输出相应的壳类型,结束操作;若未找到特征匹配项,则返回步骤3),通过Hook函数继续监控被调用的函数;
[0012]5)如果加壳程序调用的函数不是特征函数,记录所述被调用函数的函数调用序列和函数调用参数;返回步骤3),通过Hook函数继续监控被调用的函数;
[0013]6)所述APK加壳的程序(原程序)成功启动后,将步骤5)记录的函数调用序列和函数调用参数与步骤I)中的通用系统函数特征库中的加壳调用通用系统函数特征进行匹配,匹配成功则得出加壳软件的类型;匹配不成功则输出未知壳。
[0014]针对上述基于APK加壳软件动态行为的查壳方法,进一步地,步骤I)所述检测APK加壳软件对通用系统函数的调用行为,构造通用系统函数特征库包括如下步骤:
[0015]1A)壳程序一启动即进入Hook函数,记录即将加载壳程序的动态链接库a.so ;
[0016]IB)加载壳程序的动态链接库a.so ;
[0017]1C)进入Hook函数,记录即将加载壳程序的动态链接库b.so ;
[0018]1D)加载壳程序的动态链接库b.so ;
[0019]1E)原程序正常启动;
[0020]1F)得到函数调用序列,作为加壳调用通用系统函数特征;
[0021]1G)将1F)所述函数调用序列加入到通用系统函数特征库。
[0022]步骤I)所述检测加壳软件对特征函数的调用行为,具体为:使用IDA逆向工具对加壳软件的主程序或动态链接程序进行逆向,通过人工分析汇编代码逻辑,定位涉及核心算法的函数,得到加壳软件在解密原程序前调用的特征函数,将所述特征函数的名称作为加壳调用特征函数特征。
[0023]步骤I)所述检测APK加壳软件具体为通过分别检测多种类型的加壳软件,得到所述多种类型加壳软件的加壳调用通用系统函数特征和加壳调用特征函数特征,建立多种类型加壳软件的加壳调用通用系统函数特征和加壳调用特征函数特征数据库。
[0024]与现有技术相比,本发明的有益效果是:
[0025]现有查壳方法大多基于静态文件特征进行查壳,基于静态文件特征进行查壳的方法存在较大的局限性,可通过修改二进制文件抹去特征码或修改特征码来混淆查壳的结果,使得查壳结果的准确性低,查壳效率低。本发明提供一种基于APK加壳软件动态行为的查壳方法,使加壳的程序运行在部署了监控程序的环境中,通过安卓系统的Hook函数针对壳程序对系统函数和特征函数调用的动态行为进行监控,一旦被监控的函数被调用,则跳转到Hook函数中进行记录,从而获得加壳软件对系统函数和特征函数的调用特征,作为检测特征;再通过特征比对,得到加壳的程序相应的壳程序的类型。利用本发明提供的技术方案,可提高混淆壳类型的难度,由于为了绕过本发明的查壳方法,需要在获得壳程序源码的基础对原有壳程序的调用流程进行修改,因此,本发明可以有效地对主流APK壳的类型进行检测,提高分析加壳恶意代码的准确性和效率。
【附图说明】
[0026]图1是加壳的程序正常启动的流程框图。
[0027]图2是本发明实施例使用通用系统函数特征库和特征函数特征库进行查壳的流程框图。
[0028]图3是本发明实施例构造通用系统函数特征库的流程框图。
[0029]图4是本发明实施例构造特征函数特征库的流程框图。
[0030]图5是使用本发明提供的查壳方法部署查壳环境后,加壳的程序启动的流程框图。
【具体实施方式】
[0031]下面结合附图,通过实施例进一步描述本发明,但不以任何方式限制本发明的范围。
[0032]本发明提供一种基于APK加壳软件动态行为的查壳方法,主要针对市场主流加固软件如梆梆加固、爱加密加固、娜迦加固、通付盾、腾讯加固、360加固等,通过安卓系统的Hook函数针对壳程序对系统函数和特征函数的调用进行监控,使加壳的程序运行在部署了监控程序的环境中,一旦被监控的函数被调用,则跳转到Hook函数中进行记录,从而获得加壳软件对系统函数和特征函数的调用特征,作为检测特征;再通过特征比对,得到加壳的程序相应的壳程序的类型;本发明可有效地对主流APK壳的类型进行检测,提高分析加壳恶意代码的准确性和效率。
[0033]图1是加壳的程序正常启动的流程框图。一般地,加壳程序的正常启动流程包括步骤11)和12):
[0034]11)运行壳程序(代码),包括:
[0035]加载壳程序的动态链接库a.so,运行a.so中的代码对加密后的原程序源码进行解密;
[0036]加载壳程序的动态链接库b.so,运行b.so中的代码对解密后的原程序源码进行内存布局;
[0037]加载壳程序的动态链接库c.so,运行c.so中的代码对布局好的源程序源码进行重定向,并跳转到原程序的启动代码处;
[0038]12)原程序正常启动。
[0039]在安卓系统中,Hook函数即钩子函数,是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子函数(程序)就先捕获该消息,亦即钩子函数先得到控制权,这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。本发明提供的查壳方法通过使用Hook函数针对壳程序对系统函数和特征函数的调用进行监控,让加壳的程序运行在部署了监控程序的环境中,一旦被监控的函数被调用,则跳转到hook函数中进行记录,从而获得加壳软件对系统函数和特征函数的调用特征,作为检测特征;再通过特征比对,得到加壳的程序相应的壳程序的类型。
[0040]图2是本实施例基于APK加壳软件动态行为使用通用系统函数特征库和特征函数特征库进行查壳的流程框图。本发明提供的基于APK加壳软件动态行为的查壳方法包括如下步骤:
[0041]I)分别检测APK加壳软件对通用系统函数和特征函数的调用行为,构造得到所述APK加壳软件的加壳函数调用特征,包括加壳调用通用系统函数特征和加壳调用特征函数特征;
[0042]步骤I)所述检测APK加壳软件具体为通过分别检测多种类型的加壳软件,得到所述多种类型APK加壳软件的加壳调用通用系统函数特征和加壳调用特征函数特征,建立多种类型加壳软件的加壳调用通用系统函数特征和加壳调用特征函数特征数据库。
[0043]图3是本发明实施例构造通用系统函数特征库的流程框图;步骤I)所述检测APK加壳软件对通用系统函数的调用行为,具体为:Hook函数加载动态链接库函数,通过Hook函数按顺序输出所加载的动态链接库序列,该序列的库名、顺序和数量即加壳调用通用系统函数特征。本实施例中,具体地,检测APK加壳软件对通用系统函数的调用
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1