APP下载

基于API调用的抗混淆Android应用相似性检测方法

2018-02-10谷杰铭孙博文吴鹏李祺郭燕慧

网络与信息安全学报 2018年1期
关键词:标识符频数特征向量

谷杰铭,孙博文,吴鹏,李祺,郭燕慧



基于API调用的抗混淆Android应用相似性检测方法

谷杰铭1,2,孙博文1,2,吴鹏3,李祺1,2,郭燕慧1,2

(1. 北京邮电大学网络空间安全学院,北京 100876; 2. 天地互联与融合北京市重点实验室,北京 100876; 3. 四川大学计算机学院,四川 成都 610015)

传统的移动应用相似性检测方法存在特征提取复杂、检测效率较低等问题。针对上述问题,提出基于API调用的抗混淆Android应用相似性检测方法,首先从DEX文件中提取引用API序列,应用反编译后对引用API进行频数统计;然后构建应用的特征向量,以此计算应用之间的相似度。实验结果证明,该方法具有较高的准确率。

应用相似性;Android;逆向工程;抗混淆

1 引言

Android系统自2007年发布后迅速占据了移动终端平台的主导地位。数据显示,截至2016年第3季度,Android操作系统的市场份额达到86.8%[1],Android应用的数量随着操作系统的普及而快速增长,越来越多的开发者加入Android应用的开发队伍中,Google Play的Android应用数量在2017年1月增长到270万,并且在2016年的下载量突破640亿次[2]。

Android操作系统的开放性给开发商提供了宽松自由的环境,开发者可以自主开发Android应用并将应用提交到应用市场,用户通过应用市场下载应用。Google Play采用多种安全机制对提交的应用进行安全检测,并不断完善安全审核机制以提高检测准确性与全面性,但是依然无法避免仿冒应用和恶意应用的存在。应用市场的应用审核机制不严格,安全保障机制不够完善,导致市场内仿冒应用和恶意应用的比例居高不下[3]。

由于Android应用反编译后的源代码容易阅读,部分开发者为了牟取私利,对市场上的知名应用进行逆向工程,对应用稍作修改,在嵌入广告或恶意代码后重新打包,作为自己的产品上传到应用市场[4]。这种行为严重扰乱应用市场环境,影响相关产业的健康发展,损坏开发者的合法权益。

应用市场的运营方应该负担起上架应用的审核和管理工作,避免仿冒应用在应用市场上出现。多数应用市场以书面申请为主、人工测评为辅的方式审核应用版权及内容,这种审核方式工作量大、人工参与度高、效率较低。因此,需要一种应用相似性检测工具来提高应用市场的审核工作效率。

2 相关工作

现有的Android应用相似性检测方法[5]主要包括行为相似性检测方法和文件相似性检测方法。在行为相似性检测方面,Hanna等[6]提出一种根据行为相似性检测Android应用代码重用的方法,该方法首先通过反编译APK得到Android可执行字节码,从中提取应用的行为序列,采用特征散列算法对行为序列进行处理,得到应用的行为特征,然后采用群落系数相似性度量方法计算行为特征相似性,该方法适用于检测应用重打包、代码抄袭。DroidMOSS[7]通过反编译APK得到Android可执行字节码,从中提取应用的指令序列,然后对指令序列采用散列算法得到应用的行为特征,比较行为特征得到应用间的相似度,该方法可以定位到二次打包应用的代码修改点。

在文件相似性检测方面,Li[8]采用文件目录结构对应用相似性进行评估,用树结构表示应用的目录结构,计算树之间的编辑距离,由此得到应用之间的距离。该方法不受代码混淆的影响,适用于检测应用重打包、嵌入已知恶意代码的应用。

上述研究存在以下问题。一是特征提取,行为相似性检测首先需要逆向分析得到应用行为序列,但是逆向过程容易受到代码混淆的影响[9],重打包人员只需重新配置混淆文件,把方法、字段、包等Java元素混淆成无意义的名称,计算得到的散列结果相差较大,导致相似性检测方法失效;文件相似性检测得益于恶意开发者基本不改变文件目录结构,该方法容易受垃圾文件的干扰,在重打包时被恶意插入大量垃圾文件后,文件目录结构和文件数量发生变化,进而大幅度影响相似性检测结果[10]。二是检测效率,传统检测方法将应用反编译到Java源代码进行分析[11],然而反编译得到的源代码不完全符合Java原生代码的语法结构,同时在反编译过程中会不可避免地丢失部分信息。分析源代码耗费大量的时间和空间,同时信息丢失情况较严重,造成检测效率低且检测结果与实际情况有较大偏差。

应用相似性检测不但要用精确的应用特征描述样本应用,而且需要提高检测效率[12]。针对目前研究成果存在的不足,本文提出基于API调用的抗混淆Android应用相似性检测方法,通过选取合适的抗混淆应用特征,可以有效地解决混淆环境下的应用相似性检测问题。首先分析DEX文件结构,提取应用API序列,根据方法的定义性质,筛选出引用API序列,引用API序列由系统方法构成,系统方法不受代码混淆的影响,同时具有普遍性、代表性,能够表示应用行为特征,因此选用引用API序列作为应用的抗混淆特征。Smali[13]语言是Davlik的寄存器语言,Smali语言在语法上完整地实现了DEX可执行文件的所有功能[14]。与传统反编译DEX文件的源代码相比,转换为Smali语言效率更高。对Android应用反编译后得到的Smali文件进行引用API的频数统计,能够避免信息丢失的情况出现,同时提高检测效率。

3 DEX文件结构

构建应用特征向量,首先将API信息从DEX文件中抽取出来,所以需要对DEX文件结构[15]进行分析,从DEX文件的相关结构信息中抽取相关API信息。DEX文件结构如表1所示。

表1 DEX文件结构

标识符列表中索引DEX文件中的字符串、类型、方法原型、字段以及方法信息,其结构体的开始位置和项数均来自文件头中的记录。

根据DEX文件结构,下面对标识符列表中结构体的含义进行说明。

首先,针对method_id_ item进行信息描述。method_id_item描述方法的相关信息,包括方法的所属类、方法原型和方法列表,如表2所示。

然后,本文分析重点proto_id_item的信息描述。proto_id_item描述方法原型的相关信息,包括方法返回值类型、方法参数信息和方法描述,如表3所示。

表2 method_id_item描述

表3 proto_id_item描述

表4 class_def_item描述

最后,对class_def_item的信息描述。class_ def_item描述具体的class类型,如表4所示。

4 整体检测流程

Android应用相似性检测方法的整体流程如图1所示。通过分析DEX文件头定位到方法标识符列表,根据标识符列表中的地址偏移提取应用API序列,根据方法所属类是否在class_defs区域,筛选出引用API序列。得到引用API序列后,使用APKTool反编译应用得到smali文件夹,然后统计每个引用API的总调用频数并得到引用API序列的频数序列,共同构建应用的特征向量,最后计算应用之间的相似度。本文方法过滤自定义类方法和第三方库函数,不受代码混淆的影响,同时避免特征在使用上的不足,保留应用特征的整体性和代表性。

方法检测流程主要分为6个关键步骤,分别是提取API序列、筛选引用API序列、应用反编译、频数统计、构建特征向量、相似性计算。

1) 提取API序列

通过实际应用(MD5:CAF89261805E 496528490F337A49861A)展示应用API序列的提取过程。根据DEX文件头中的地址偏移,定位到方法标识符列表(method_ids)和方法原型标识符列表(proto_ids),从中读取应用的方法信息[16]。

根据DEX文件头中记录的大小和偏移地址定位到方法标识符列表(method_ids)。方法标识符列表(method_ids)是一个结构体数组,该数组的元素为method_id_item结构体。遍历结构体数组,利用获得的class_idx和name_idx分别从类型标识符列表(type_ids)、字符串列表(string_ids)中得到方法所属类和方法名称。

图1 Android应用相似性检测方法流程

根据DEX文件头中记录的大小和偏移地址定位到方法原型标识符列表(proto _ids)。方法原型标识符列表(proto _ids)是一个结构体数组,该数组的元素为proto _id_item结构体。遍历结构体数组,利用获得的shorty_idx从字符串列表(string_ids)中得到方法返回。

类型和参数列表,利用获得的parameters_off从data数据区得到方法参数信息。

提取结果显示应用的API序列共有10 975项。

2) 筛选引用API序列

引用API序列由系统方法构成,系统方法不受代码混淆的影响,同时具有普遍性、代表性,能够表示应用行为特征,因此选用引用API序列作为应用的抗混淆特征。提取的API序列中包含应用自定义类方法和第三方库函数,需要过滤两者避免代码混淆的影响。DEX文件结构中,class_defs区域内存放class definitions,包含应用中所有定义的类信息。根据方法所属的class类型是否在class_defs区域,判定方法是本地方法还是引用方法,从而筛选出引用API序列。

筛选结果显示应用(MD5:CAF89261805E 496528490F337A49861A)的引用API序列共有2 272项。引用API序列过滤自定义类方法和第三方库函数,只保留应用中的系统方法。

3) 应用反编译

应用反编译是检测工作的基础,针对Android应用的反编译,主要是反编译应用中的DEX文件和对解码资源文件[17],检测方法需要用到的smali文件包含在DEX文件中,所以本文选取APKTool[18]反编译APK,得到smali文件。

图2 频数统计流程

4) 频数统计

频数统计流程如图2所示,首先调用APKTool对应用进行反编译处理,得到Smali文件夹。Smali语言在语法上完整地实现了DEX文件的所有功能,包括程序代码、注释等大量信息[13],因此对得到的smali文件进行频数统计,可以避免信息丢失的情况出现。这里的频数统计指的是统计引用API在文件中出现的总调用频数,最后得到引用API序列的频数序列,跟引用API序列一起构建应用的特征向量。

5) 构建特征向量

6) 相似性计算

余弦值的范围在[−1,1],值越趋近于1,代表2个向量的方向越接近;越趋近于−1,它们的方向越相反[19]。得到样本应用和可疑应用的特征向量后,计算2个向量的余弦值,就可以知道2个应用的相似性情况。

5 实验

5.1 数据来源

实验选取的样本应用来自国内知名Android应用市场,涵盖10种不同类型,包括社交类、游戏类、影音类、摄影类、工具类、金融类、阅读类、旅游类、生活类、教育类。每种类型选取功能相近300个应用进行相似性检测。

5.2 结果分析

图3为10类样本应用的相似度统计结果,使用Android相似性检测工具Androguard[20]进行检测,发现社交类应用的相似度最高,教育类应用的相似度相对较低。结合应用下载量分析发现,使用频率越高的应用类型,应用的相似概率越高。

使用本文提出的基于API调用的抗混淆Android应用相似性检测方法进行检测,对比实验结果,本文提出的方法在相同样本的情况下,检出率更高,具有更好的区分能力。实验结果表明,本文方法在简化特征提取的同时具有较高的准确率。

图3 样本相似度

6 结束语

本文提出一种基于API调用的抗混淆Android应用相似性检测方法,从DEX文件中提取引用API序列,应用反编译后对引用API进行频数统计,然后构建应用的特征向量,以此计算应用之间的相似度。特征向量过滤应用自定义类和第三方库,具有很好的抗混淆性。实验结果证明,本文提出的应用相似性检测方法具有较高的准确率。

方法依赖静态检测技术,如果应用采用加固技术进行安全保护,影响API序列提取和频数统计,导致结果失真。后期工作将结合动态脱壳技术对加固应用进行预处理。

[1] Smartphone OS Market Share, 2016 Q3[EB/OL]. http://www.idc.com/ promo/smartphone-market-share/os.

[2] Analysis: how much difference does Google play and App store differ?[EB/OL].http://www.chinaz.com/manage/2017/0223/662587. shtml.

[3] NetQin. Global mobile report of first half of 2012[EB/OL]. http://cn.nq.com/neirong/2012shang.pdf.

[4] SHEKHAR S, DIETZ M, WALLACH D S. AdSplit: separating smartphone advertising from applications[J]. Dissertations & Theses-Gradworks, 2012, 54(1):99.

[5] ZHOU Y, JIANG X. Dissecting android malware: characterization and evolution[C]//2012 IEEE Symposium on Security and Privacy. 2012: 95–109.

[6] HANNA S, HUANG L, WU E, et al. Juxtapp: a scalable system for detecting code reuse among android applications[C]//The International Conference on Detection of Intrusions and Malware, and Vulnerability Assessment. 2012:62-81.

[7] ZHOU W, ZHOU Y, JIANG X, et al. Detecting repackaged smartphone applications in third-party android marketplaces[C]//ACM Conference on Data and Application Security and Privacy. 2012:317-326.

[8] LI S. Juxtapp and DStruct: detection of similarity among Android applications[EB/OL]. https://www2.eecs.berkeley.edu/Pubs/TechRpts/ 2012/EECS-2012-111.html.

[9] HUANG H, ZHU S, LIU P, et al. A framework for evaluating mobile App repackaging detection algorithms[C]//The International Conference on Trust and Trustworthy Computing. 2013:169-186.

[10] CHEN K, LIU P, ZHANG Y. Achieving accuracy and scalability simultaneously in detecting application clones on android markets[C]//The 36th International Conference on Software Engineering. 2014:175-186.

[11] 路程, 张淼, 徐国爱. 基于源代码静态分析技术的Android应用恶意行为检测模型[J]. 2011. LU C, ZHANG M, XU G A. Android application malicious behavior detection model based on source static analysis technology[J]. 2011.

[12] SOH C, TAN H B K, ARNATOVICH Y L, et al. Detecting clones in Android applications through analyzing user interfaces[C]//IEEE International Conference on Program Comprehension. 2015: 163-173.

[13] JesusFreke. smali/baksmali: an assembler/disassembler for Android's dex format[EB/OL]. http://code.google.com/p/smali/.

[14] 刘方圆, 孟宪佳, 汤战勇, 等. 基于smali代码混淆的Android应用保护方法[J]. 山东大学学报(理学版), 2017(3): 44-50. LIU F Y, MENG X J, TANG Z Y, et al. Android application protection method based on smali code confusion[J]. Journal of Shandong University(Nature Science), 2017(3): 44-50.

[15] Dedexer: dedexer is a disassembler tool for DEX files [EB/OL]. http://dedexer.sourceforge.net/.

[16] LINARES-VASQUEZ M, HOLTZHAUER A, POSHYVANYK D. On auto-matically detecting similar android apps[C]//The 24th International Conference on Program Comprehension (ICPC). 2016: 1-10.

[17] ZHOU W, ZHOU Y, GRACE M, et al. Fast, scalable detection of piggybacked mobile applications[C]//The 3rd ACM conference on data and application security and privacy. 2013: 185-196.

[18] Apktool. A tool for reverse engineering android apk files[EB/OL]. https://ibotpeaches.github.io/Apktool/.

[19] ZHANG Z Y, WANG J, CHENG H M. An approach for spatial index of text information based on cosine similarity[J]. Computer Science, 2005.

[20] DESNOS A, GUEGUEN G. Android: from reversing to decompilation[J]. Proc of Black Hat Abu Dhabi, 2011.

Anti-obfuscation Android application similarity detection method based on API call

GU Jieming1,2, SUN Bowen1,2, WU Peng3, LI Qi1,2, GUO Yanhui1,2

1. School of Cyberspace Security,Beijing University of Post and Telecommunications, Beijing 100876, China;2. Beijing Key Laboratory of integration with the world Internet, Beijing 100876, China; 3. School of Computer Science, Sichuan University, Chengdu 610015, China

The traditional Android application similarity detection methods have the problem of complex feature extraction and low detecting efficiency. Regarding the issue above, an anti-obfuscation Android application similarity detection method based on API call was proposed. Firstly, it extracts referenced API sequence from the dex file. Counting the number of referenced API after decompiling the application to build feature vector. Finally, calculate the application similarity through feature vector. The experimental results show that the method has high accuracy.

application similarity, Android, reverse engineering, anti-obfuscation

TP399

A

10.11959/j.issn.2096-109x.2018001

谷杰铭(1993-),男,河北邢台人,北京邮电大学硕士生,主要研究方向为移动安全、恶意软件检测。

孙博文(1994-),男,辽宁沈阳人,北京邮电大学硕士生,主要研究方向为网络安全、恶意软件检测。

吴鹏(1982-),男,四川广元人,四川大学博士生,主要研究方向为恶意软件检测、软件抄袭、软件安全加固。

李祺(1981-),女,北京人,博士,北京邮电大学副教授,主要研究方向为网络安全、机器学习、物联网安全。

郭燕慧(1974-),女,河北唐山人,博士,北京邮电大学副教授,主要研究方向为网络安全、机器学习、信息安全管理。

2017-10-17;

2017-12-05

谷杰铭,gujiemin35@163.com

国家自然科学基金资助项目(No.61401038)

The National Natural Science Foundation of China (No.61401038)

猜你喜欢

标识符频数特征向量
二年制职教本科线性代数课程的几何化教学设计——以特征值和特征向量为例
基于底层虚拟机的标识符混淆方法
克罗内克积的特征向量
基于区块链的持久标识符系统①
一类特殊矩阵特征向量的求法
EXCEL表格计算判断矩阵近似特征向量在AHP法检验上的应用
中考频数分布直方图题型展示
学习制作频数分布直方图三部曲
科研人员唯一标识符的理论研究现状剖析
频数和频率