首页> 中国专利> 基于随机性检验的Android软件加固检测方法

基于随机性检验的Android软件加固检测方法

摘要

本发明是关于一种基于随机性检验的Android软件加固检测方法,其特征在于包括以下步骤:步骤S1,将训练样本集进行预处理后,再通过随机性检测计算确定阈值;步骤S2,将待测apk文件进行预处理后,再通过随机性检测计算得到测试数据;步骤S3,将该测试数据与该阈值进行比对,若该测试数据属于该阈值的范围内,则该待测apk文件为加固的文件,若该测试数据不属于该阈值的范围内,则该待测apk文件不是加固的文件。本发明提出的检测方法对于加固软件的检测是有效的并有较高的准确率和较低的误报率,有助于发现潜在的恶意软件。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-01-05

    授权

    授权

  • 2015-12-09

    实质审查的生效 IPC(主分类):G06F21/12 申请日:20150610

    实质审查的生效

  • 2015-11-11

    公开

    公开

说明书

技术领域

本发明有关于一种软件检测方法,尤其是有关于一种基于随机性检验 的Android软件加固检测方法。

背景技术

随着软件的迅速发展和快速传播,软件面临的威胁日益增多,其安全 保护问题受到人们越来越多的关注。目前,针对软件的恶意攻击方法主要 有软件盗版、逆向工程技术和软件代码篡改,软件加固是保护软件抵抗威 胁的重要手段。常见的软件加固手段有代码混淆技术、防调试追踪技术、 完整性校验、软件水印技术、白盒加密技术和软件加壳技术等。但是,相 比于传统的PC平台,Android是开源的系统,开发者可以根据需求定制并 开发各种各样的操作系统;而且比起其他操作系统,Android应用程序使用 的开发语言主要是java,由于其二进制文件中包含了更多的类型信息,使 得编译后的二进制代码classes.dex文件极易被攻击者反编译从而绕开 Android的安全保护机制。总之,由于Android自身的体系结构和安全保护 机制的特性,无法直接将传统PC端的软件保护技术应用到Android平台。

Android平台现有的软件保护技术有代码混淆、软件水印、反跟踪调试、 软件加壳、白盒加密等。其中,软件加壳是防止软件被静态反编译或者非 法篡改的常用手段,壳对可执行文件进行压缩或者加密,先于原始程序获 得控制权,壳在执行过程中对原始程序进行解压缩或者解密,还原后再把 程序控制权交还给原始程序。加壳软件根据加壳目的和作用可以分为两类: 一是压缩壳,二是加密壳。PC平台现已有大量标准的加壳和脱壳工具,但 是目前Android平台市场上针对apk的保护主要是基于dex,公开的加壳工 具有DexGuard、梆梆、爱加密、ApkProtect等。软件加壳效果评估标准之 一是成功效率,即检验待保护软件是否成功被加密。但是当前检验软件是 否加壳一般使用人工分析,并没有有效的大批量自动化检验方法。

对于使用加密算法进行加壳的移动平台,检验当前软件是否加壳,即 检验当前应用软件中是否使用了针对整体文件的加密算法。随机性测试可 以检测密码算法的输出序列是否符合随机性要求,为算法能够安全运行提 供保证。因此,通过随机性测试是保证加密算法安全性的前提和基础。

人们研究了多种随机序列应该满足的性质,并以此为准对所产生的序 列的随机程度进行度量。目前,已公开的随机性测试方法不下数百种。不 同的随机性测试方法针对不同特性的测试序列,原理并没有显著差别。迄 今为止,国内外相关研究人员提出了许多种随机数生成方法,如平方取中 法、同余法、斐波那契数列变形法、混沌序列法、利用系统时间和热噪声 等等,同时对生成的随机数的随机性测试方法也是在不断地发展。 DIEHARD测试方法和美国国家技术标准局提出的密码模块所使用的随机 数发生器性能统计检测方法是比较常用的测试方法。

基于以上的分析,以随机性作为移动软件加固前后的指标是可行的。 但是,以随机性作为检验软件加固的标准目前并没有学者涉及。

由此可见,上述现有的软件加固的检测方法在使用上,显然仍存在有 不便与缺陷,而亟待加以进一步改进。为了解决上述存在的问题,相关厂 商莫不费尽心思来谋求解决之道,但长久以来一直未见适用的设计被发展 完成,而一般产品又没有适切结构能够解决上述问题,此显然是相关业者 急欲解决的问题。

发明内容

本发明的目的在于克服现有的软件加固检测方法存在的不足,而提供 一种基于随机性检验的Android软件加固检测方法。

本发明的目的是采用以下技术方案来实现的。本发明提出一种基于随 机性检验的Android软件加固检测方法,其包括以下步骤:步骤S1,将训 练样本集进行预处理后,再通过随机性检测计算确定阈值;步骤S2,将待 测apk文件进行预处理后,再通过随机性检测计算得到测试数据;步骤S3, 将该测试数据与该阈值进行比对,若该测试数据属于该阈值的范围内,则 该待测apk文件为加固的文件,若该测试数据不属于该阈值的范围内,则 该待测apk文件不是加固的文件。

本发明的目的还可采用以下技术措施进一步实现。

较佳的,前述的基于随机性检验的Android软件加固检测方法,其中所 述步骤S1中的训练样本集包括:未加固的apk文件和加固过的同样的apk 文件。

较佳的,前述的基于随机性检验的Android软件加固检测方法,其中所 述步骤S1中的将训练样本集进行预处理包括:步骤S11,将训练样本集中 的各个apk文件解压,提取apk序列的classes.dex文件;步骤S12,将所述 的classes.dex文件输入随机性测试工具,进行二进制分块。

较佳的,前述的基于随机性检验的Android软件加固检测方法,其中所 述步骤S1包括:将通过二进制分块所得的各个模块进行随机性检测计算, 从而确定阈值。

较佳的,前述的基于随机性检验的Android软件加固检测方法,其中所 述步骤S2中的将待测apk文件进行预处理包括:步骤S21,将待测apk文 件解压,提取apk序列的classes.dex文件;步骤S22,将所述的classes.dex 文件输入随机性测试工具,进行二进制分块。

较佳的,前述的基于随机性检验的Android软件加固检测方法,其中所 述步骤S2包括:将通过二进制分块所得的各个模块进行随机性检测计算, 从而得到测试数据。

较佳的,前述的基于随机性检验的Android软件加固检测方法,其中所 述步骤S1中的随机性检测计算包括:频率检验、块内频数检验、游程检验、 块内最长游程检验、二元矩阵秩检验、离散傅里叶变换检验、非重叠模块 匹配检验、重叠模块匹配检验、Maurer的通用统计检验、Lempel-Ziv压缩 检验、线性复杂度检验、序列检验、近似熵检验、累加和检验、随机游动 检验、随机游动状态频数检验中的至少一种。

较佳的,前述的基于随机性检验的Android软件加固检测方法,其中所 述步骤S2中的随机性检测计算包括:频率检验、块内频数检验、游程检验、 块内最长游程检验、二元矩阵秩检验、离散傅里叶变换检验、非重叠模块 匹配检验、重叠模块匹配检验、Maurer的通用统计检验、Lempel-Ziv压缩 检验、线性复杂度检验、序列检验、近似熵检验、累加和检验、随机游动 检验、随机游动状态频数检验中的至少一种。

借由上述技术方案,本发明基于随机性检验的Android软件加固检测方 法至少具有下列优点及有益效果:本发明提出的检验方法对于加固软件的 检测是有效的并有较高的准确率和较低的误报率,有助于发现潜在的恶意 软件。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的 技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和 其他目的、特征和优点能够更明显易懂,以下特举较佳实施例,并配合附 图,详细说明如下。

附图说明

图1是本发明的Android加固软件检测方法的示意图。

图2是样本集B的线性复杂度检验的结果示意图。

图3是样本集B的非重叠模块匹配检验的结果示意图。

图4是样本集B的重叠模块匹配检验的结果示意图。

【主要元件符号说明】

A、B、Q:样本集

TPR:准确率

TP:成功被检测出的软件个数

FN:被误检测为未加固软件的加固软件个数

FPR:误报率

FP:被误报为加固软件的未加固软件个数

TN:正确分类的未加固软件个数

R:判断结果

P-value:随机概率/通过数

具体实施方式

为更进一步阐述本发明为达成预定发明目的所采取的技术手段及功效, 以下结合附图及较佳实施例,对依据本发明提出的一种基于随机性检验的 Android软件加固检测方法的具体实施方式、结构、特征及其功效,详细说 明如后。

申请人通过对移动平台上的加固方法进行深入分析,发现由于移动平 台架构和硬件等的局限,目前移动平台上的加固方法以加密壳为主。序列 经过加密算法处理前后的随机性会有明显变化,根据这种变化的随机性分 布图,可以判断当前检测序列是否进行过加固。

在美国国家标准技术研究院(NIST)制定的16种测试方法中,本发明既 考虑到测试序列随机特性测试的全面性,又兼顾测试效率,最终选定非重 叠模块匹配检验、重叠模块匹配检测和线性复杂度检验三种测试方法作为 示例,但是,不同的随机性测试方法针对不同特性的测试序列,原理并没 有显著差别,因此,本发明并不限制随机性测试方法的类型,也可采用频 率检验、块内频数检验、游程检验、块内最长游程检验、二元矩阵秩检验、 离散傅里叶变换检验、Maurer的通用统计检验、Lempel-Ziv压缩检验、序 列检验、近似熵检验、累加和检验、随机游动检验、随机游动状态频数检 验中的任意一种或多种。

非重叠模板匹配测试是用于检测待检测序列中,子序列是否与许多非 周期模板相匹配,如果匹配较多,则该序列是非随机的。重叠模板匹配测 试是用于统计待检测序列中,设定长度的连续“I”的数目,是否与真随机序 列的情况偏离太大,如果偏离太大,则该序列是非随机的。线性复杂度测 试是用于确定待检测序列是否足够复杂,如果是,则该序列是随机的。这 三种常用的随机性测试方法,从不同的角度出发考量测试序列的随机特性, 理论和实际意义明显。

请参阅图1,是本发明的Android加固软件检测的示意图,包括以下步 骤:

步骤S1,将训练样本集进行预处理后,再通过随机性检测计算确定阈 值;

其中,训练样本集包括:未加固的apk文件和利用梆梆等加固平台加 固过的同样的apk文件。更加具体的,步骤S1是按照以下步骤实现的:首 先,将训练样本集进行预处理:将训练样本集中的各个apk文件(包括未 加固的apk文件和加固过的apk文件)解压,提取解压后得到的各apk序列 的classes.dex文件;将该classes.dex文件输入随机性测试工具,进行二进 制分块。然后,将通过二进制分块所得的各个模块进行随机性检测计算, 从而确定阈值。其中,步骤S1中的随机性检测计算包括:频率检验、块内频 数检验、游程检验、块内最长游程检验、二元矩阵秩检验、离散傅里叶变 换检验、非重叠模块匹配检验、重叠模块匹配检验、Maurer的通用统计检 验、Lempel-Ziv压缩检验、线性复杂度检验、序列检验、近似熵检验、累 加和检验、随机游动检验、随机游动状态频数检验中的至少一种。

步骤S2,将待测apk文件进行预处理后,再通过随机性检测计算得到 测试数据;

更加具体的,步骤S2是按照以下步骤实现的:首先,将待测apk文件 进行预处理:将待测apk文件解压,提取解压后得到的apk序列的classes.dex 文件;将该classes.dex文件输入随机性测试工具,进行二进制分块。然后, 将通过二进制分块所得的各个模块进行随机性检测计算,从而得到测试数 据。其中,步骤S2中的随机性检测计算包括:频率检验、块内频数检验、 游程检验、块内最长游程检验、二元矩阵秩检验、离散傅里叶变换检验、 非重叠模块匹配检验、重叠模块匹配检验、Maurer的通用统计检验、 Lempel-Ziv压缩检验、线性复杂度检验、序列检验、近似熵检验、累加和 检验、随机游动检验、随机游动状态频数检验中的至少一种。

步骤S3,将该测试数据与该阈值进行比对,若该测试数据属于该阈值 的范围内,则该待测apk文件为加固的文件,若该测试数据不属于该阈值 的范围内,则该待测apk文件不是加固的文件。

需要说明的是,本发明的步骤S1和步骤S2并没有先后顺序,可以如 前面列举的先确定阈值,再计算测试数据,也可以先计算测试数据,再确 定阈值。

以下,采用非重叠模块匹配检验、重叠模块匹配检测以及线性复杂度 检验三种随机性测试方法对本发明Android软件加固检测进行具体说明。

一、针对待测apk文件,得到测试数据。

1、得到待测apk文件。将待测apk文件进行解压,分析apk序列M={m1, m2,m3,……mn}中可能进行加密的文件,此处多为classes.dex。

2、提取待测序列。提取apk序列M={m1,m2,m3,……mn}的classes.dex 文件N={n1,n2,n3,……nn}。

3、进行文件分块。将classes.dex文件N={n1,n2,n3,……nn}输入随 机性测试工具,由工具自动对文件中的二进制分块ε={ε12,...εp}。

4、进行随机性检验。

(41)非重叠模块匹配检验。将ε={ε12,...εp}输入到非重叠模块匹配检 验:

利用公式计算均值:μ=(M-m+1)/2m,其中,μ表示均值,M表示待 检验数据串的子块的长度,m表示每个模块的长度;

利用公式计算方差:其中,σ2表示方差;

利用公式计算被检测到的模块数与预期的模块数之间的匹配程度: 其中,χ2(obs)表示被检测到的模块数与预期的模块数 之间的匹配程度,Wj(j=1,...,N)表示在第j个子块中目标模块出现的次数。

(42)进行重叠模块匹配检验。将ε={ε12,...εp}输入到重叠模块匹配检验:

利用公式计算均值:μ=(M-m+1)/2m

利用公式计算方差:χ2(obs)=Σi=15(vi-Nπi)2Nπi

其中,Vi(wherei=0,...,5)表示计算每个字块中目标模块发生次数,πi为定 值。

(43)进行线性复杂度检验。将ε={ε12,...εp}输入到线性复杂度检验:

利用公式计算均值:μ=M2+(9+(-1)M+1)36-(M/3+2/9)2M;

利用公式计算每个子块的线性距离:Ti=(-1)M·(Li-μ)+2/9,其中,Ti表示每个子块的线性距离,Li表示每个子块的线性复杂度;

利用公式计算方差:其中vi表示子块频数,K表 示自由度,N表示长度,πi为定值。

5、计算利用P-value公式。P-value公式分别算得各检验方法所得 P-value:

P-value=igamc(p/2,χ2(obs)/2),其中,p表示决策值。

二、针对训练样本集,确定阈值。

在本步骤中,确定阈值的方法与上一步骤的方法类似,在此不再赘述。 不同的是,训练样本集包括若干个apk文件,需要对训练样本集中的每一 个apk文件进行随机性检验,这样,通过随机性检验训练样本集中的多个 apk文件而得到检验结果的一个阈值范围。

以下,选取确定未进行过加固的应用软件和利用梆梆加固平台加固过 的同样的应用软件组成训练样本集Q,进行线性复杂度检验、非重叠模块 匹配检验以及重叠模块匹配检测得到各结果。

1、进行线性复杂度检验(P-value平均值)的结果如下:

表1线性复杂度检验结果

由上面的表1可知,未加固应用软件的P-value平均值主要集中在0.3 到0.6,而经过加固的应用软件的P-value平均值主要集中在0.4到0.8,加 固前后的有一些重叠的地方,但是两者主要集中的地方是不同的。

2、相同的训练样本集Q进行非重叠模块匹配检验(在总数为1480中 的通过数,此处,通过数即为P-value)的结果如下:

表2非重叠模块匹配检验结果

由上面的表2可知,未加固应用通过数集中在900到1100,而经过加 固的应用软件的通过数集中在1200到1480。加固前后差别较大,表明非重 叠模块匹配检验方法针对是否加固的随机性检验结果分层比较明显。

3、相同的训练样本集Q进行重叠模块匹配检测(P-value平均值)的 结果如下:

表3重叠模块匹配检测结果

由表3可知,未加固应用软件的P-value平均值主要集中在0到0.3, 而经过加固的应用软件的P-value平均值主要集中在0到0.1和0.3到0.7。 加固前后随机性变化较为明显。

4、综上,可以得到阈值列表如下:

表4三种检验方法阈值表

测试项目 加固应用 未加固应用 线性复杂度检验(P-value) 0.4~0.8 0.3~0.6 非重叠模块匹配检验(通过数) 1200~1480 900~1100 重叠模块匹配检验(P-value) 0~0.1&0.3~0.7 0~0.3

通过以上三种随机性检验方法的计算,可发现应用软件加固前后的随 机性分布有着显著区别。

三、将以上的测试数据与阈值对比,判断当前待测应用软件是否进行 过加固。

将待测应用程序输入模型中进行三种随机性检验计算,得到当前待测 应用程序的随机性结果向量λn={λ1′,λ2′,λ3′},将结果与表4的阈值表进行比对, 得到判断结果R(TRUE表示检测结果为加固)如下:

四、热门软件检测结果分析

以下,选取近年热门应用软件438个组成样本集A,其中20个为已被 加固软件。样本集来源为Googleplay应用软件商店和官方网页。样本集A 的时间分布如表5,各年软件分布基本持平。

表5样本集A软件分布

年份 2011 2012 2013 2014 未加固 85 109 101 123 已加固 4 5 5 6

通过对样本集A中的软件进行随机性检验后,三种检测方法和最终的 检验结果如下:

表6样本集A检测结果

表6为对样本集A的具体检测结果及相关软件加固结果的判定,可以 看到,在418个未加固应用中,本方法检测结果为未加固的软件个数为398 个,有22个为误报;在20个已加固应用中,本方法检测结果为已加固的 软件个数为18个,有2个软件被漏报。

本文定义准确率(TPR)为成功检测出的加固软件的个数和加固软件总 数之比,公式如下:

TPR=TPTP+FN

公式中TP表示成功被检测出的软件个数,FN表示被误检测为未加固 软件的加固软件个数。

本文同样定义误报率(FPR)为被误报为加固软件的未加固软件的个数 和未加固软件总数之比,公式如下:

FPR=FPFP+TN

公式中FP表示被误报为加固软件的未加固软件个数,TN表示正确分 类的未加固软件个数。

综上所述,A样本集检测效果如下表所示:

表7样本集A准确率和误报率

FP TN FPR TP FN TPR 检测系统 22 396 5.3% 18 2 90%

由表7可知,本文提出的检测方法的准确率为90%,误报率为5.3%。 表明本文提出的方法具有较高的准确率和较低的误报率。

五、金融类软件检测结果分析

以下,选取金融类移动应用软件61个组成测试样本集B,样本集来源 为Googleplay应用软件商店和官方网页,其中2011年13个,2012、2013 和2014年出品软件都为16个。测试样本集B的测试结果如图2、图3、图 4,根据图2、图3和图4,可以得到本系统测验结果如下:

表8样本集B检验结果

年份 2011/13 2012/16 2013/16 2014/16 检测加固个数 3 1 0 1

由表8可知,本方法共发现5个应用软件符合加固特征,后经人工确 认,本次检测的全部样本应用程序都没有进行过加固处理。所以,在对金 融类软件的检测中,本文提出的检测方法的误报率为8.2%。这表明本文提 出的检测方法是有一定的效果。通过人工分析确定,此类软件普遍使用混 淆技术进行了保护。混淆技术无法避免信息等的泄露,表明这些软件保护 力度还是存在欠缺,容易被攻击者窃取关键代码逻辑,被用于网络钓鱼、 窃取用户信息等恶意行为。

本文提出的检测方法不仅仅是针对特定类别软件(例如金融类)有效, 而且适用于整体的Android检验,并且能够有效的判断当前应用软件是否经 过加固。

以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式 上的限制,虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发 明,任何熟悉本专业的技术人员,在不脱离本发明技术方案范围内,当可利 用上述揭示的技术内容作出些许更动或修饰为等同变化的等效实施例,但凡 是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所 作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号