Android应用程序的一致性检查
摘要:
越来越多的手机应用让用户应接不暇,不知道它们互相之间有什么区别。用户通常从应用的口碑(当决定要不要安装的时候)、应用的用户界面(当探索界面的时候)、应用的实际表现(当使用应用的时候)了解关于应用的东西。如果应用的口碑和应用界面以及实际表现之间有偏差,用户可能会产生困惑。举个例子,当没有按钮说明“照相”时,打开照相机(实际表现)就可能是一个让人困惑的表里不一表现。相对于权限和相似性而言,我们用正在工作中表自动检测安卓应用程序的表里不一。现在我们报告我们基于178765个应用程序研究的初级结果。
关键词:用户界面;数据;手机;安卓;权限
引言:
在不同的应用市场上有超过100万个安卓应用程序。官方最大的市场——谷歌应用商店就有一百万个应用程序。安卓采用一种权限系统来保护设备的资源和用户的数据。有很多应用程序请求不确定的权限。为什么一个应用程序请求了相机权限但是从来没有涉及到关于相机的东西?为什么一个应用程序请求了相机权限但从来没有执行任何操作相机的应用程序接口方法?这是个缺陷?恶意?还是个特性?有很多潜在的表里不一经常困扰着用户。
在一组应用程序当中,可能会存在一些程序和其他大不一样。举个例子,一些应用因为他们都请求相机权限而被当做是一类应用。在分析了大量的这类应用程序以后,我们大概可以指出大多数这类应用程序的一个通用模式,这种模式就是这类应用程序的公共描述偏向于包含类似抓拍、拍照或者相片这样的词。如果一个应用程序没有公开声明关于使用相机的东西,用户会感到迷惑,即便它明确地请求了相机权限。表里不一可能体现在不同的层级。想想一个描述里面包含向拍张照的应用程序,在用户界面里面却丝毫不包含相关的东西。还有,用户界面可能包含一个“拍照”按钮,但是按钮并不能调起手机的相机。由于表里不一,用户会觉得惊讶,厌烦,困扰甚至被伤害了。我们研究了安卓应用程序当中的两个由于表里不一的问题。
我们怎样得出一个全面又可靠的描述来形容一个应用程序?
我们如何应用这样的描述来发现一个应用程序的公共功能,用户界面之间的不一致功能,代码功能?
为了定位这些问题,我们我们采取了数据驱动的方法。我们从谷歌应用商店收集了178765个安卓应用程序。我们综合了三个层次的特征来计算安卓应用程序的描述。在公共层面,我们考虑了一个应用程序的线上描述、包名、目录、星级、安装包大小和其他可公开获得的信息。在用户界面层面,我们考虑了一个应用程序的用户界面文字和布局。在代码层面,我们使用程序分析研究了声明的方法、执行和时间处理之间的联系(比如点击事件)和调用的库(比如拍照)。我们通过我们相对于相机权限和相似性的方法,初步发现了表里不一的真实案例。这种方法对几种利益相关的群体有好处:1终端用户可以使用这个成果发现和权限一致的应用 2 开发者可以通过这个成果解决他们应用程序当中的表里不一。 3 市场运营者可以用我们的方法并把它应用到他们已有的应用提交审核当中去。
相关工作
以前对安卓应用程序的研究工作研究了权限的有效性,这些权限显示了界面和用户对权限的期望。虽然告知用户应用程序的安全权限很重要,但通常来说,用户很少关注显示的权限,而且他们对权限的含义也不甚了解。
WHYPER用自然语言的语义分析一个应用程序的描述。我们的方法很容易理解而且很大程度地考虑了一些公共信息、用户界面和源代码。我们关注于一个应用相对于权限来说可能和用户交互的地方。这包括安装应用程序之前、期间、之后的用户行为。
安卓应用程序描述
我们通过计算每个应用程序的描述开启我们对安卓应用程序表里不一的分析。一个描述符的作用是给出一个应用程序的全面和相对的观点。一个描述符应该全面捕捉尽可能多的有关的应用程序的方面。它还应遵循有效率和有效的对比。我们从三个层面提出了一个新的描述符组成的特征。表格1从一个应用程序(记录我)的描述展示了三个层面的特性。下面是这些特性的细节:
公共特性:
这些特性来自公开展示的关于应用程序的信息,并且用户安装之前就可以看到。我们从谷歌应用商店的详细信息上提取了一个应用程序的公共特性。我们使用了Google-Play-Crawler,一个谷歌应用商店的私人开源应用程序接口,它用来下载应用程序安装文件,收集报名,评论,权限,标题,作者和每个应用程序在谷歌应用商店的下载量。NOKOGIRI被用来进一步收集每个应用程序在谷歌应用商店上的网页信息,包括应用程序描述,目录,评级,发布日期,应用商店地址,价格,版本,操作系统,星级数量,内容评级,开发者地址,安装包大小和下载量数据。
用户界面特性:
这些特性来自应用程序的用户界面,包括文字和布局。它们只对已经安装和使用该应用程序的用户可见。我们提取了2种类型的用户界面功能:文本和布局。我们下载了每个应用程序并将其保存为一个apk文件(安卓软件包)。我们用一个开放源代码的逆向工程工具apktool3解压apk文件为程序文件,得到应用程序文件的目录树。为了提取布局特征,我们研究了布局文件的布局目录。我们用一个自定义的XML解析器解析它们,并收集所有我们看做特性的小部件。为了提取文本特性,我们分析了三个字符串资源文件(strings.xml,arrays.xml,和plurals.xml)。我们就从布局文件提取硬编码到布局文件的字符串。
代码特性:
这些特性来自应用程序的拆解和反编译。我们对以下的代码特性感兴趣:1、一个应用自己的方法,2、一个应用执行的安卓库方法,3在用户事件处理(比如点击)和由事件触发的方法之间的联系。这些特性用户看不见,但是能被一个专业的程序员检查出来,从而检测应用的实际行为。我们提取了三种代码特性:声明方法、执行方法以及二者兼有的。我们用apktool解压一个应用的安装文件。我们定位了classes.dex的文件,它将一个应用所有类的二进制代码打包到一个文件当中去。我们用smali拆解classed.dex得到单个的文件,这些文件每个都是人类可读的形式。为了提取声明方法特性,我们在每个smali文件中查找了符合.method模式的代码并且收集了所有出现的情况。为了提取执行方法特性,我们查找了符合.invoke-public模式的代码。为了提取共有的特性,我们用WALA程序分析框架为每个应用程序建立了一个调用图。WALA将Java的classes.dex转换成字节码。我们的调用图是为容器类建立的上下文无关的单个对象。
初步数据集
我们收集了自己的安卓应用程序。这个资料库是178765个发布在谷歌应用商店上的应用程序。我们提取了所有178765个应用的相同特性来进行分析。在这些应用中,153294个是免费的。我们取出84405个应用(大约一半)作为样品。我们下载、解压、拆解、反编译这些应用。每个应用包含1000个我们要处理的程序文件。从这些文件中,我们提取了用户界面和代码特性。我们用一个大数据分析的非关系型数据库MongoDB存储了所有提取出来的特性。这些数据一共有4个太字节。
相机权限表里不一
在我们的178765个应用中,我们发现17739(百分之九点九)个应用需要相机权限。在公共层面,我们用这些应用作为正面的例子。我们随机选择了相同数量的不请求相机权限的应用作为反面的例子。我们基于最大熵为正面请求相机权限的应用训练了一个模型。训练准确率是百分之98.7。然后我们将它应用到17739个请求相机权限的应用上。在这些应用中,307个被归类为不请求相机权限。这些应用展现出不符合模型的表里不一。在用户界面层次,我们分析了一组7816个请求相机权限的应用程序。我们重复了相似的训练过程。训练准确率是百分之92.9。498个被归类为不一致。
相似性不一致
一个典型的相似性不一致的例子是,当两家应用程序似乎是不同的时候,在公共的层面上却有非常相似的用户界面。我们进一步分析我们的数据集,以确定这种类型的不一致。我们使用了经典的术语频率逆文档频率(TF-IDF)模型来计算应用程序的相似度。我们使用95%作为阈值。如果两个应用程序有95%类似,它们被认为是几乎相同的。我们把它们视为不一致的应用程序是因为大多数应用程序都没有接近相同的应用程序。在公共层面,我们分析了11880个应用程序,只重点关注了应用程序的描述。我们发现了630个应用程序(5.3%)的应用程序的描述几乎相同。让我们把这些应用程序的集合表示为P。在界面的层面撒花姑娘,我们分析了一个72993个应用程序的样本,发现1339个应用程序(1.83%)有几近相同的应用程序。让我们表示这个集合为I有了P和I,我们可以计算出两个应用之间的差异,这些差异可以告诉我们哪些应用程序在某一层面上相似但不同于其他的应用。
结论和未来工作
在这篇论文中,我们提出了一个工作进展中的识别安卓应用程序表里不一的新方法。我们的初步结果显示了安卓应用程序综合自动化分析的可靠性。我们的初步调查结果是表里不一只涉及到相机权限之类。我们目前正在将这种方法推广到其他类型的表里不一,比如
l 其他类型的权限(比如定位,网络)
l 数据(比如请求权限次数,安装包大小,用户评级)
l 内容评级(比如总体,成熟度)
l 广告(比如免费,含广告的)
l 目录标签(比如工具,引用,游戏)
另外,我们还了解到以后要做工作的一些限制,包括
获取:我们代码特性提取对静态分析工具有一些固有的限制。尽管我们只用了dex2jar来反编译应用到Java字节码,从而得到方法分析,之前的工作显示了dex2jar在一些案例中的失败。我们要明确这个对我们研究产生影响的程度。
测试:我们需要在2个关键指标上系统地评估我们的方法:准确性和代码功能提取的成功率。
图片元素: 没有被分析。一个应用可能会用图形来向用户展示形象的提示信息。这些不在我们的分析范围之内。我们需要利用计算机图形学来研究解决办法。