一种基于动态获取用户界面的Android重打包应用检测方法与流程

文档序号:22834178发布日期:2020-11-06 16:25阅读:177来源:国知局
一种基于动态获取用户界面的Android重打包应用检测方法与流程

本发明属于可信软件及恶意软件检测领域,具体涉及一种基于动态获取用户界面的android重打包应用检测方法。



背景技术:

android作为一种操作系统平台,攻击者为获取非法利益,将android应用重新打包后发布到市场,这给android系统和用户带来了巨大威胁。过去,大多数研究都集中在代码相似性检测上,这种检测涉及数十亿个操作码,因而会消耗大量时间,此外,重打包应用程序还可以通过对代码进行混淆或加密,以避免被检测到。

基于用户界面(userinterface,ui)特征的重打包检测方法具有抗代码混淆和抗代码加密性能。但是基于静态方法获取布局特征的检测算法虽然检测速度快,但是无法获取足够的有效信息,同时易受噪声文件的影响,检测准确率低。

一些基于动态获取ui特征的方法具有抗噪声性,然而如何获取更多的用户界面同时更加有效的将布局特征进行抽象成为目前着重需要解决的困难。

除了上述重打包检测方法,有学者还提出了基于信息不对称的安卓重打包主动防御技术,该方法会使重打包的应用程序运行异常,导致重打包的失败。但是该方法需要修改底层安卓系统,同时需要用户安装插件,技术难度大同时用户体验较差。



技术实现要素:

发明目的:本发明的目的在于解决现有技术中存在的不足,提供一种基于动态获取用户界面的android重打包应用检测方法。android应用中的界面包含布局结构和填充布局结构的来自服务端推送的内容,界面中变化的是服务端推送的内容,布局结构不会改变,因此本发明通过动态的方式提取android应用运行过程中所有可视化界面的布局作为android应用的特征。一般来说,一个android应用包含多个可视化界面,每一个界面都会对应一个xml布局文件,其中包含了多个控件;为便于布局文件之间的比较,本发明将界面的布局文件抽象成一棵布局树。通过上述方式,可以得到由多个布局树组成的布局树集合来唯一标识一个android应用,这样android应用之间的相似度也就转化为布局树集合之间的相似度计算问题,对于两个布局树集合的相似度计算,对于布局树集合的每一棵布局树间的相似度采用dtw-acs进行计算,进一步对于布局树集合的相似度采用匈牙利算法进行求解。

技术方案:本发明的一种基于动态获取用户界面的android重打包应用检测方法,包括如下步骤:

(1)获取每个应用的所有可视化界面对应的布局文件

使用adb和uiautomator2对待检测应用的界面进行自动深度遍历,得到对应可视化界面的布局文件,同时过滤重复界面和噪声界面;

(2)将每个布局文件抽象成一棵布局树

将布局文件抽象成树形结构,因为这样能够最大程度上代表它的布局层次结构,同时过滤掉无任何信息增益的控件属性,只保留表征其状态和功能的关键属性,得到由布局树组成的特征集合;

(3)计算android应用之间的相似度

利用基于多维序列的树结构相似度比较算法(dtw-acs)计算两个布局树之间的相似度,然后将布局树集合之间的相似度计算转换为二分图的最大匹配问题,使用匈牙利算法计算出布局树集合之间的相似度,所得相似度即是不同android应用间的相似度;

(4)重打包应用判定

通过实验分析,确定相似度的阈值(例如最佳阈值为0.76),将大于该阈值的应用对判定为重打包应用对。

进一步的,所述步骤(1)中获取每个应用的所有可视化界面对应的布局文件的具体方法为:

(1.1)安装应用;当pc端与android设备连接后,通过adb安装待检测的应用,然后启动该应用进入初始界面,即进而待检测应用的首页;

(1.2)捕获界面;通过uiautomator2转储当前界面对应的xml布局文件并提取所有可交互控件的坐标,构造坐标集合,并记录第一个未遍历坐标元素在集合中的位置;

(1.3)元素检查;判断当前坐标集合是否存在未遍历元素,若存在,则执行步骤(1.5);若不存在,则执行步骤(1.4);

(1.4)首页判定;判断当前界面是否是初始界面,若是,则执行步骤(1.7);如果不是则返回上一级界面,并且继续执行步骤(1.3);

(1.5)深度遍历界面;从标记位置开始遍历当前界面对应坐标集合中的元素,点击对应控件坐标跳转下一级页面,同时标记位置加1;

(1.6)界面判重;判断跳转后的界面是否已被遍历过,若遍历过则返回上一级界面,执行步骤(1.3);若没遍历过,则返回步骤(1.2);

(1.7)卸载应用;退出应用并使用adb将应用卸载。

进一步的,所述步骤(3)中将每一个待检测应用采用由有多个布局树构成的特征集合表示,不同应用之间的相似度对应于各自布局树集合之间的相似度。

其中两个布局树s和t之间相似度simt的计算公式为:

其中dadis为通过dtw-acs求出来的两个树之间的距离,|s|,|t|分别为两个布局树s和t对应的多维序列集合的长度,max(|s|,|t|)为较大的多维序列集合的长度;

则布局树集合sa和sb的相似度即两个android应用间的相似度为:

其中sa∩sb为通过匈牙利算法求出的两个集合的最大匹配数,|sa|,|sb|分别为两个集合的长度。

有益效果:本发明通过动态执行android应用提取运行过程中的用户可视化界面对应的布局文件作为检测特征,相对于静态获取布局特征的方法具有更好抗噪声性能,同时特征指纹的构造完全不依赖于分析代码,具有良好的抗代码加密和抗代码混淆性能。

附图说明

图1为本发明的框架图;

图2为本发明中自动深度遍历界面的流程示意图;

图3为本发明dtw-acs伪代码流程;

图4为本发明使用的匈牙利算法的流程图;

图5为实施例中从安卓应用提取的部分布局文件;

图6为实施例中“办信用卡”应用中的一个界面及其对应布局树;

图7为实施例中“信用卡办卡”应用中的一个界面及其对应布局树;

图8为实施例中“办信用卡”应用中的另一个界面及其对应布局树;

图9为实施例中“信用卡办卡”应用中的另一个界面及其对应布局树。

具体实施方式

下面对本发明技术方案进行详细说明,但是本发明的保护范围不局限于所述实施例。

如图1所示,本发明的一种基于动态获取用户界面的android重打包应用检测方法,将应用界面的布局抽象成为能够表征其内容和空间层次结构的布局树,同时通过过滤器保留布局控件的关键属性;然后对布局树的相似性比较使用基于多维序列的树相似性比较方法,综合考虑顺序维度和空间维度,这比tree-edit算法、路径集合算法、层序遍历序列等现有技术更有效。其中,通过基于交互控件的用户界面深度自动化遍历方法,能够尽可能多的遍历到应用的界面。

本发明的具体流程如下:

步骤一、捕获安卓应用中尽可能多的运行界面。本实施例使用基于交互控件的用户界面深度遍历方法来捕获android应用运行过程中的可视化界面,具体实现流程如图2所示。详细步骤如下:

a)安装应用。当pc端与android设备连接后,通过adb安装应用,然后启动该应用进入初始界面即该应用的首页;

b)捕获界面。通过uiautomator2转储当前界面对应的xml布局文件并提取所有可交互控件的坐标,构造坐标集合,并记录第一个未遍历坐标元素在集合中的位置;

c)元素检查。判断当前坐标集合是否存在未遍历元素,若存在,执行步骤e);若不存在,执行步骤d);

d)首页判定。判断当前界面是否是初始界面,若是,则执行步骤g);否则返回上一级界面,继续执行步骤c);

e)深度遍历界面。从标记位置开始遍历当前界面对应坐标集合中的元素,点击对应控件坐标跳转下一级界面,同时标记位置加1;

f)界面判重。判断跳转后的界面是否已被遍历过,若遍历过则返回上一级界面,执行步骤c);若没遍历过,则返回步骤b)继续执行;

g)卸载应用。退出应用并使用adb将应用卸载。

上述过程中,在执行步骤(b)和步骤(f)时,通过以下步骤对引入的噪声界面进行过滤:

1)系统界面过滤:过滤掉属于android的系统弹框界面和系统的状态显示栏。

2)过滤已遍历界面:通过判断当面界面对应的activity和布局树在页面集合中是否存在。

3)其他应用界面过滤:判断当前界面的应用package名称与被测试应用是否相同。

4)webview控件过滤:对webview控件只保留其中原生控件的信息,同时直接过滤webviewactivity对应界面。

5)广告界面的过滤:一般应用中的广告界面都会有“广告”、“跳过”、“关闭”、“跳过广告”、“关闭广告”等字符描述,因此在应用自动化执行过程中可根据该特征跳过该部分页面的遍历和布局内容的提取。

步骤二、计算两个界面之间的相似度。利用基于多维序列的树结构相似度比较算法(dtw-acs)来计算界面之间的相似度,算法的伪代码如图3所示,过程如下:

2.1生成布局树。用户可视化界面对应的布局文件中的每个节点存在层次结构和18个关键属性,分别为class、index、text、resource-id、package、content-desc、checkable、checked、clickable、enabled、focusable、focused、scrollable、long-clickable、password、selected、visible-to-user、bounds。

从布局文件中提取布局树,布局树中的节点包括一个元素和几个属性。其中“class”属性的值表示布局视图类型,例如“button”,“textview”等,然后将其视为最重要的属性,作为树节点中的元素。

关于元素的属性,为了减少计算量,同时提高检测的准确性,本实施例通过过滤器过滤掉可能引入噪声的属性,该过滤器的具体过程为:

1)过滤器1:对visible-to-user属性进行过滤。visible-to-user属性表示该布局控件对用户是否可见,当其值为false时,标识为隐藏控件,在用户可视化界面不显示。因此对于该属性为false的布局控件直接过滤,不作为布局树的节点。

2)过滤器2:布局控件的有些属性不能够为重打包的检测提供准确的信息。相反,这些属性会在布局树的相似度比较过程中引入噪声,导致重打包检测出现错误。因此我们将这些属性排除,包括“index”,“text”,“resource-id”,“package”,“content-desc”,“bounds”,“password”属性。

过滤后只保留最关键的属性,包括表示视图控件状态的属性:“checked”、“enabled”、“focused”和“selected”,表示功能的属性:“clickable”、“checkable”、“focusable”、“long-clickable”和“scrollable”。在步骤2.2中进行树的节点比较时当两个节点的元素与属性均相等时才认为是相同的节点。

2.2布局树之间的相似度比较。对于树的相似度比较,本实施例采用基于多维序列的树结构相似度比较算法(dtw-acs)来完成,将树结构看做一种具有顺序维度和空间维度的多维数据结构,顺序维度是垂直方向上的,空间维度是水平方向上的。同时一棵树可以被抽象成为具有公共前缀的多个序列。

其中,dtw-acs算法的具体过程为:

则其中两个布局树s和t之间相似度simt的计算公式为:

其中dadis为通过dtw-acs求出来的两个树之间的距离,|s|,|t|分别为两个布局树s和t对应的多维序列集合的长度,max(|s|,|t|)为较大的多维序列集合的长度。

步骤三、计算不同应用之间的相似度。每个应用可以用一个包含多个布局树的布局树集合来表示,我们将不同应用之间的相似度计算转换为求解二分图的最大匹配问题,然后使用匈牙利算法进行求解,具体流程如图4所示,通过两个布局树集合求出的应用的相似度为:

其中sa∩sb为通过匈牙利算法求出的两个集合的最大匹配数,|sa|,|sb|分别为两个集合的长度。

实施例:

以豌豆荚市场中下载的两个金融类应用:“办信用卡”和“信用卡办卡”为例。

步骤一:通过自动化测试工具捕获两个应用运行过程中所有可视化界面对应的布局文件,由于布局文件数量较多,此处给出部分布局文件如图5所示。

步骤二:计算两个布局树之间的相似度

对于其中可视化界面抽象成为的布局树,以其中两个界面为例,如图6和图7所示。

“办信用卡”应用中的一个界面及其对应布局树(该界面对应的xml布局文件为com.youyuwo.creditcard.view.activity.mainactivity_0_1.xml);

“信用卡办卡”应用中的一个界面及其对应布局树(该界面对应的xml布局文件为com.youyuwo.creditcard.view.activity.mainactivity_0_1.xml)。

通过dtw-acs计算出的上述两个界面对应的布局树的相似度为1.0。从图中的界面的外观可以看出,“信用卡办卡”的这一界面的外观和“办信用卡”应用界面的外观非常相似,只是改变了某些布局控件的颜色,但是界面的整体的布局结构没有改变,所以提取出的布局树也是完全相同的。因此通过dtw-acs计算出相似度也为1.0。

下面再来计算另外两个界面之间的相似度。“办信用卡”应用中的另一个界面及其对应布局树(该界面对应的xml布局文件为com.youyuwo.creditcard.view.activity.mainactivity_2_1.xml),“信用卡办卡”应用中的另一个界面及其对应布局树(该界面对应的xml布局文件为com.youyuwo.creditcard.view.activity.mainactivity_4_1.xml)。

如图8和图9所示,通过dtw-acs计算出的上述两个界面对应的布局树的相似度为0.85。从图中的界面的外观可以看出,“信用卡办卡”的这一界面的外观和“办信用卡”应用界面的外观非常相似,只是改变了某些布局控件位置,但是界面的整体的布局结构没有改变,所以提取出的布局树也是非常相似的。

步骤三:计算一对应用的相似度

最终对于“办信用卡”和“信用卡办卡”两个应用的特征集合,通过匈牙利算法求得相似度为0.97,大于相似度判别阈值0.76。因此该组应用为重打包应用对。其实从外观、布局和activity组件的名称都能辅助验证该组应用为重打包应用。

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