CN111967002A - 一种应用程序的加壳检测方法及装置 - Google Patents

一种应用程序的加壳检测方法及装置 Download PDF

Info

Publication number
CN111967002A
CN111967002A CN202010655631.2A CN202010655631A CN111967002A CN 111967002 A CN111967002 A CN 111967002A CN 202010655631 A CN202010655631 A CN 202010655631A CN 111967002 A CN111967002 A CN 111967002A
Authority
CN
China
Prior art keywords
classifier
application
application program
android
sample
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202010655631.2A
Other languages
English (en)
Inventor
何能强
王小群
王适文
严寒冰
孙才俊
郭晶
姚力
贾子骁
雷君
马莉雅
张华�
秦素娟
高飞
李文敏
温巧燕
秦佳伟
王华伟
涂腾飞
王森淼
崔栋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhongshi Ruian Beijing Network Technology Co ltd
Beijing University of Posts and Telecommunications
National Computer Network and Information Security Management Center
Original Assignee
Zhongshi Ruian Beijing Network Technology Co ltd
Beijing University of Posts and Telecommunications
National Computer Network and Information Security Management Center
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Zhongshi Ruian Beijing Network Technology Co ltd, Beijing University of Posts and Telecommunications, National Computer Network and Information Security Management Center filed Critical Zhongshi Ruian Beijing Network Technology Co ltd
Priority to CN202010655631.2A priority Critical patent/CN111967002A/zh
Publication of CN111967002A publication Critical patent/CN111967002A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/554Detecting local intrusion or implementing counter-measures involving event detection and direct action
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/21Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
    • G06F18/214Generating training patterns; Bootstrap methods, e.g. bagging or boosting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/24Classification techniques
    • G06F18/241Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches
    • G06F18/2411Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches based on the proximity to a decision surface, e.g. support vector machines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/24Classification techniques
    • G06F18/241Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches
    • G06F18/2415Classification techniques relating to the classification model, e.g. parametric or non-parametric approaches based on parametric or probabilistic models, e.g. based on likelihood ratio or false acceptance rate versus a false rejection rate
    • G06F18/24155Bayesian classification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/24Classification techniques
    • G06F18/243Classification techniques relating to the number of classes
    • G06F18/24323Tree-organised classifiers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/53Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • G06N20/10Machine learning using kernel methods, e.g. support vector machines [SVM]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Evolutionary Computation (AREA)
  • Artificial Intelligence (AREA)
  • Computer Hardware Design (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Evolutionary Biology (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Probability & Statistics with Applications (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Medical Informatics (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Stored Programmes (AREA)

Abstract

本说明书一个或多个实施例提供一种应用程序的加壳检测方法及装置,包括:对应用程序样本中的每个安卓应用程序,提取出应用特征组,基于所述应用程序样本的所有应用特征组,构建训练集和测试集,利用所述训练集对至少一种分类器进行训练,得到训练后的至少一种加壳分类器,利用所述测试集对至少一种加壳分类器进行测试,得到至少一组测试结果,根据至少一组测试结果,确定出最优的加壳分类器,利用所述最优的加壳分类器对待测的安卓应用程序进行分类,确定所述待测的安卓应用程序是否加壳。本实施例能够有效地从大量安卓应用程序中筛选出加壳的安卓应用程序。

Description

一种应用程序的加壳检测方法及装置
技术领域
本说明书一个或多个实施例涉及信息安全技术领域,尤其涉及一种应用程序的加壳检测方法及装置。
背景技术
随着安卓终端设备(安装安卓操作系统的终端设备)的普及应用,安卓终端设备上安装的安卓应用程序数量越来越多、种类各式各样,普通用户一般难以辨别安卓应用程序是否安全,一旦下载安装了恶意应用程序,有些会影响安卓终端设备的正常使用,有些会盗取用户信息,对用户造成损失。
因此,需要对安卓应用程序进行检测,判断是否为恶意应用程序。由于有些安卓应用程序进行了加壳处理,所以在检测是否为恶意应用程序之前,需要先检测安卓应用程序是否加壳,对于加壳的安卓应用程序,需要进行脱壳处理,再检测是否为恶意应用程序。由此,对于海量的安卓应用程序,如何准确、高效的检测识别是否加壳,是所要解决的问题。
发明内容
有鉴于此,本说明书一个或多个实施例的目的在于提出一种应用程序的加壳检测方法及装置,能够检测识别安卓应用程序是否加壳。
基于上述目的,本说明书一个或多个实施例提供了一种应用程序的加壳检测方法,包括:
对应用程序样本中的每个安卓应用程序,提取出应用特征组;
基于所述应用程序样本的所有应用特征组,构建训练集和测试集;
利用所述训练集对至少一种分类器进行训练,得到训练后的至少一种加壳分类器,利用所述测试集对至少一种加壳分类器进行测试,得到至少一组测试结果,根据至少一组测试结果,确定出最优的加壳分类器;
利用所述最优的加壳分类器对待测的安卓应用程序进行分类,确定所述待测的安卓应用程序是否加壳。
可选的,所述对应用程序样本中的每个安卓应用程序,提取出应用特征组,包括:
利用静态分析方法,从每个安卓应用程序中提取出应用特征组;所述应用特征组包括:dex文件比例、非空应用程序名称、应用程序名称中的包名称、so文件的数量、可见类的数量、原生方法的数量、本机方法比例、可见组件比例和加权信息熵;
其中,所述dex文件比例为dex文件的字节数与apk文件的字节数的比值;所述非空应用程序名称为AndroidManifest.xml文件中所描述的应用程序的名称;所述应用程序名称中的包名称为AndroidManifest.xml文件中所描述的包名称;所述so文件的数量为apk文件解压缩后,so文件的数量;所述可见类的数量为从逆向dex文件中提取出的Java类的数量;所述原生方法的数量为从所述逆向dex文件中提取出的使用JNI调用方法的数量;所述本机方法比例为从所述逆向dex文件中提取出的使用JNI调用方法的数量与所述逆向dex文件中的所有方法的数量的比值;所述可见组件比例为所述逆向dex文件中可查找到的组件数量与AndroidManifest.xml文件中所描述的安卓组件数量的比值。
可选的,所述基于应用程序样本的所有应用特征组,构建训练集和测试集,包括:
将所有应用特征组随机分为五组彼此没有重复部分的样本集,且两两样本集中的应用特征组的数量不相等;
从五组样本集中任意选取一个样本集作为所述测试集,其余四组样本集合并成为所述训练集;重复该步骤,得到五种不同组合的测试集和训练集。
可选的,所述至少一种分类器为cart分类器、logistic回归分类器、高斯朴素贝叶斯分类器、随机森林分类器和线性支持向量机分类器五种分类器。
可选的,所述根据至少一组测试结果确定出最优的加壳分类器,包括:
计算每个加壳分类器的F1分值;
根据各加壳分类器的F1分值,从中选取出F1分值最大的加壳分类器作为最优的加壳分类器。
本说明书实施例还提供一种应用程序的加壳检测装置,包括:
特征提取模块,用于对应用程序样本中的每个安卓应用程序,提取出应用特征组;
构建模块,用于基于所述应用程序样本的所有应用特征组,构建训练集和测试集;
训练模块,利用所述训练集对至少一种分类器进行训练,得到训练后的至少一种加壳分类器,利用所述测试集对至少一种加壳分类器进行测试,得到至少一组测试结果,根据至少一组测试结果,确定出最优的加壳分类器;
检测模块,用于利用所述最优的加壳分类器对待测的安卓应用程序进行分类,确定所述待测的安卓应用程序是否加壳。
可选的,所述特征提取模块,用于利用静态分析方法,从每个安卓应用程序中提取出应用特征组;所述应用特征组包括:dex文件比例、非空应用程序名称、应用程序名称中的包名称、so文件的数量、可见类的数量、原生方法的数量、本机方法比例、可见组件比例和加权信息熵;
其中,所述dex文件比例为dex文件的字节数与apk文件的字节数的比值;所述非空应用程序名称为AndroidManifest.xml文件中所描述的应用程序的名称;所述应用程序名称中的包名称为AndroidManifest.xml文件中所描述的包名称;所述so文件的数量为apk文件解压缩后,so文件的数量;所述可见类的数量为从逆向dex文件中提取出的Java类的数量;所述原生方法的数量为从所述逆向dex文件中提取出的使用JNI调用方法的数量;所述本机方法比例为从所述逆向dex文件中提取出的使用JNI调用方法的数量与所述逆向dex文件中的所有方法的数量的比值;所述可见组件比例为所述逆向dex文件中可查找到的组件数量与AndroidManifest.xml文件中所描述的安卓组件数量的比值。
可选的,所述构建模块包括:
样本分组子模块,用于将所有应用特征组随机分为五组彼此没有重复部分的样本集,且两两样本集中的应用特征组的数量不相等;
样本组合子模块,用于从五组样本集中任意选取一个样本集作为所述测试集,其余四组样本集合并成为所述训练集;重复该步骤,得到五种不同组合的测试集和训练集。
可选的,所述至少一种分类器为cart分类器、logistic回归分类器、高斯朴素贝叶斯分类器、随机森林分类器和线性支持向量机分类器五种分类器。
可选的,所述训练模块,用于计算每个加壳分类器的F1分值;根据各加壳分类器的F1分值,从中选取出F1分值最大的加壳分类器作为最优的加壳分类器。
从上面所述可以看出,本说明书一个或多个实施例提供的应用程序的加壳检测方法及装置,通过对应用程序样本中的每个安卓应用程序,提取出应用特征组,基于应用程序样本的所有应用特征组,构建训练集和测试集,利用训练集对至少一种分类器进行训练,得到训练后的至少一种加壳分类器,利用测试集对至少一种加壳分类器进行测试,得到至少一组测试结果,根据至少一组测试结果,确定出最优的加壳分类器,利用最优的加壳分类器对待测的安卓应用程序进行分类,确定待测的安卓应用程序是否加壳。本实施例的方法能够有效地从大量安卓应用程序中筛选出加壳的安卓应用程序。
附图说明
为了更清楚地说明本说明书一个或多个实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书一个或多个实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本说明书一个或多个实施例的方法流程示意图;
图2为本说明书一个或多个实施例的装置结构示意图;
图3为本说明书一个或多个实施例的电子设备的结构示意图。
具体实施方式
为使本公开的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本公开进一步详细说明。
需要说明的是,除非另外定义,本说明书一个或多个实施例使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本说明书一个或多个实施例中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
图1为本说明书一个或多个实施例的方法流程示意图,如图所示,本说明书一个或多个实施例提供一种应用程序的加壳检测方法,用于检测识别安卓应用程序是否加壳,方法包括:
S101:对应用程序样本中的每个安卓应用程序,提取出应用特征组;
本实施例中,应用程序样本包括若干安卓应用程序,应用程序样本中包括加壳的安卓应用程序和未加壳的安卓应用程序。其中,安卓应用程序为后缀为apk的文件,以下简称apk文件。
一些实施方式中,利用静态分析方法,从每个安卓应用程序中提取出应用特征组,应用特征组包括以下九种应用特征:dex文件比例、非空应用程序名称、应用程序名称中的包名称、so文件的数量、可见类的数量、原生方法的数量、本机方法比例、可见组件比例和加权信息熵。相较于动态分析方法,采用静态分析方法简单高效,易于实现。
S102:基于应用程序样本的所有应用特征组,构建训练集和测试集;
本实施例中,通过随机抽样方式,基于应用程序样本的所有应用特征组,构建训练集和测试集,其中,训练集中的应用特征组用于训练分类器,测试集中的应用特征组用于对训练后的分类器进行测试。
S103:利用训练集对至少一种分类器进行训练,得到训练后的至少一种加壳分类器,利用测试集对至少一种加壳分类器进行测试,得到至少一组测试结果,根据至少一组测试结果确定出最优的加壳分类器;
本实施例中,使用Weka机器学习框架进行模型训练,选取五种不同的分类器,分别为:cart分类器、logistic回归分类器、高斯朴素贝叶斯分类器、随机森林分类器和线性支持向量机分类器。利用训练集分别对五种分类器进行训练,训练之后得到五种加壳分类器;之后,利用测试集对五种加壳分类器进行测试,得到五组测试结果,根据五组测试结果,选取出最优的一种加壳分类器,后续用于检测识别待测的安卓应用程序是否加壳。
S104:利用最优的加壳分类器对待测的安卓应用程序进行分类,确定待测的安卓应用程序是否加壳。
本实施例提供的应用程序的加壳检测方法,通过对应用程序样本中的每个安卓应用程序,提取出应用特征组,基于应用程序样本的所有应用特征组,构建训练集和测试集,利用训练集对至少一种分类器进行训练,得到训练后的至少一种加壳分类器,利用测试集对至少一种加壳分类器进行测试,根据测试结果确定出最优的加壳分类器,利用最优的加壳分类器对待测的安卓应用程序进行分类,确定待测的安卓应用程序是否加壳。本实施例的方法,利用静态分析方法提取应用特征组,简单高效,利用训练集对多种分类器进行训练,并利用测试集对多种训练后的加壳分类器进行测试,以得到最优的分类器,之后,可利用最优的加壳分类器检测识别待测的安卓应用程序是否加壳,检测结果准确;本实施例的方法能够有效地从大量安卓应用程序中筛选出加壳的安卓应用程序。
以下结合具体实施例对本实施例的应用程序的加壳检测方法进行详细说明。
安卓应用程序,即apk文件一般包含被编译的代码文件(后缀为dex的文件,以下简称dex文件),文件资源(resources),原生资源文件(assets),证书(certificates)和清单文件(AndroidManifest.xml,用于描述应用程序的名称、版本号、所需权限、注册的服务、链接的其他应用程序等)。
如表1所示,本实施例中,从应用程序样本的每个安卓应用程序中所提取出的九种应用特征及其特征说明为:
Figure BDA0002576638460000061
Figure BDA0002576638460000071
表1九种应用特征及其特征说明
其中:
1)dex文件比例,是指dex文件的字节数与apk文件的字节数的比值,二者的比值为0-1之间的浮点数。一般情况下,加壳的应用程序会将dex文件中的部分代码抽离出来,然后进行加密处理,将加密后的文件存储为单独的文件,这样,相较于未加壳的应用程序,加壳的应用程序中,dex文件的字节数占apk文件的字节数的比例较低;因此,可以将dex文件比例作为一项应用特征,作为判断是否为加壳的应用程序的一个维度。
2)非空应用程序名称,是指AndroidManifest.xml文件中所描述的应用程序的名称。加壳的应用程序必须在AndroidManifest.xml中定义有应用程序名称,而未加壳的应用程序可以不在AndroidManifest.xml中定义应用程序名称;因此,可以将非空应用程序名称作为一项应用特征,作为判断是否为加壳的应用程序的一个维度。
3)应用程序名称中的包名称,是指AndroidManifest.xml文件中所描述的包名称。应用程序的名称通常以包名称作为前缀开始;对于加壳的应用程序,应用程序的包名称通常会被替换,因此,可以将应用程序的包名称作为应用特征,作为判断是否为加壳的应用程序的一个维度。
4)so文件的数量,是指apk文件解压缩后,so文件(后缀为so的文件)的数量。加壳的应用程序会从原始dex文件中抽取出部分代码,并存储为单独的so文件,这样,相较于未加壳的应用程序,加壳的应用程序中,so文件的数量会比较多;因此,可以将so文件的数量作为一项应用特征,作为判断是否为加壳的应用程序的一个维度。
5)可见类的数量,是指从逆向dex文件中提取出的Java类的数量;其中,逆向dex文件是对dex文件进行逆向处理后得到的文件。加壳的应用程序会从原始apk文件中抽取出部分代码,然后对抽取出的代码进行加密处理,将处理后的代码数据存储在单独的文件中,这样,相较于未加壳的应用程序,加壳的应用程序中所存在的Java类的数量较少;因此,可以将可见类的数量作为一项应用特征,作为判断是否为加壳的应用程序的一个维度。
6)原生方法的数量,是指从逆向dex文件中提取出的使用JNI调用方法的数量。加壳的应用程序会使用本地方法技术将Javamethods变为原生方法,这些原生方法将由JNI调用方法调用执行;因此,可以将使用原生方法的数量作为一项应用特征,作为判断是否为加壳的应用程序的一个维度。
7)本机方法比例,是指从逆向dex文件中提取出的使用JNI调用方法的数量与逆向dex文件中的所有方法的数量的比值。针对某些代码量庞大的应用程序,应用程序本身就包含了很多JNI调用方法,所以不能单一的考虑原生方法的数量,也要将本机方法比例作为一项应用特征,作为判断是否为加壳的应用程序的一个维度。
8)可见组件比例,是指逆向dex文件中可查找到的组件数量与AndroidManifest.xml文件中所描述的安卓组件数量的比值。一般的安卓应用程序都会包含四大组件(activity、service、content provider、broadcast receive)中的一个或者几个,加壳的应用程序通常会提取出组件并进行加密处理,所以,对于加壳的应用程序,其classes.dex文件中通常没有任何组件,如果组件在AndrodiManifest.xml文件中注册,但不存在于classes.dex文件中,则该dex文件可能被加密;因此,可以将可见组件比例作为一项应用特征,作为判断是否为加壳的应用程序的一个维度。
9)加权信息熵。
Figure BDA0002576638460000091
pi∈[0,1]表示事件i发生的概率,当pi为0时,令log2(pi)为0;M为事件总数。使用信息熵统计一段字节流的信息熵,按照一个字节长度能表示256个字符,即M=256,那么信息熵的取值范围为[0,8];wj为权重因子,表示为:
Figure BDA0002576638460000092
其中,N为字节序列总大小,j代表第j个序列。权重因子按字节序列的熵值降序排列,即,第一个字节序列的熵最高,第N个字节序列的熵最低;权重因子的总和应为1。
一些实施例中,基于应用程序样本的所有应用特征组,构建训练集和测试集,包括:
将所有应用特征组随机分为五组彼此没有重复部分的样本集,且两两样本集中的应用特征组的数量不相等;
从五组样本集中任意选取一个样本集作为测试集,其余四组样本集合并成为训练集;重复该步骤,得到五种不同组合的测试集和训练集。
本实施例中,通过将所有应用特征组随机分为五组彼此没有重复部分的样本集,且两两样本集中的应用特征组的数量不相等;之后,从五组样本集中任意选取一个样本集作为测试集,其余四组样本集合并成为训练集,按照此种方法,通过不同的组合能够得到五种测试集和训练集;利用每种训练集对至少一个分类器进行训练,分别得到训练后的加壳分类器,再利用对应的测试集对加壳分类器进行测试,得到测试结果,这样,通过五重交叉验证,能够得到识别结果较为准确的分类器。
一些实施例中,根据至少一组测试结果确定出最优的加壳分类器,包括:
计算每个加壳分类器的F1分值;
根据各加壳分类器的F1分值,从中选取出F1分值最大的加壳分类器作为最优的加壳分类器。
本实施例中,利用测试集对各加壳分类器进行测试,得到测试结果,根据各加壳分类器的测试结果,计算每个加壳分类器的F1分值,根据各加壳分类器的F1分值,从中选取出F1分值最大的加壳分类器作为最优的加壳分类器。其中,F1分数可以看作是模型准确率和召回率的加权平均,通常比准确性更有用,特别是在加壳的数据和未加壳的数据分布不均匀的情况下,可以作为各分类器用于加壳检测的一般能力的评估。
本实施例的应用程序的加壳检测方法,利用静态分析方法,从应用程序样本中提取出九种应用特征,简单高效,便于实现;基于提取出的应用特征训练机器学习模型,选取出最优的机器学习模型对待测的安卓应用程序进行分类,根据分类结果,判断待测的安卓应用程序是否加壳,检测识别结果准确。本实施例的方法能够有效地从大量安卓应用程序中筛选出加壳的应用程序,可适用于恶意应用程序检测前、对加壳的应用程序进行脱壳前的预处理。本实施例的加壳检测方法,能够支持阿里、百度、梆梆、爱加密、娜迦、360、腾讯等加固厂商的壳程序识别。
需要说明的是,本说明书一个或多个实施例的方法可以由单个设备执行,例如一台计算机或服务器等。本实施例的方法也可以应用于分布式场景下,由多台设备相互配合来完成。在这种分布式场景的情况下,这多台设备中的一台设备可以只执行本说明书一个或多个实施例的方法中的某一个或多个步骤,这多台设备相互之间会进行交互以完成所述的方法。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
图2为本说明书一个或多个实施例的装置结构示意图,如图所示,本说明书一个或多个实施例还提供一种应用程序的加壳识别装置,包括:
特征提取模块,用于对应用程序样本中的每个安卓应用程序,提取出应用特征组;
构建模块,用于基于应用程序样本的所有应用特征组,构建训练集和测试集;
训练模块,利用训练集对至少一种分类器进行训练,得到训练后的至少一种加壳分类器,利用测试集对至少一种加壳分类器进行测试,得到至少一组测试结果,根据至少一组测试结果,确定出最优的加壳分类器;
检测模块,用于利用最优的加壳分类器对待测的安卓应用程序进行分类,确定待测的安卓应用程序是否加壳。
一些实施例中,特征提取模块,用于利用静态分析方法,从每个安卓应用程序中提取出应用特征组;应用特征组包括:dex文件比例、非空应用程序名称、应用程序名称中的包名称、so文件的数量、可见类的数量、原生方法的数量、本机方法比例、可见组件比例和加权信息熵;
其中,dex文件比例为dex文件的字节数与apk文件的字节数的比值;非空应用程序名称为AndroidManifest.xml文件中所描述的应用程序的名称;应用程序名称中的包名称为AndroidManifest.xml文件中所描述的包名称;so文件的数量为apk文件解压缩后,so文件的数量;可见类的数量为从逆向dex文件中提取出的Java类的数量;原生方法的数量为从逆向dex文件中提取出的使用JNI调用方法的数量;本机方法比例为从逆向dex文件中提取出的使用JNI调用方法的数量与逆向dex文件中的所有方法的数量的比值;可见组件比例为逆向dex文件中可查找到的组件数量与AndroidManifest.xml文件中所描述的安卓组件数量的比值。
一些实施例中,构建模块包括:
样本分组子模块,用于将所有应用特征组随机分为五组彼此没有重复部分的样本集,且两两样本集中的应用特征组的数量不相等;
样本组合子模块,用于从五组样本集中任意选取一个样本集作为测试集,其余四组样本集合并成为所述训练集;重复该步骤,得到五种不同组合的测试集和训练集。
一些实施例中,至少一种分类器为cart分类器、logistic回归分类器、高斯朴素贝叶斯分类器、随机森林分类器和线性支持向量机分类器五种分类器。
一些实施例中,训练模块,用于计算每个加壳分类器的F1分值;根据各加壳分类器的F1分值,从中选取出F1分值最大的加壳分类器作为最优的加壳分类器。
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书一个或多个实施例时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
上述实施例的装置用于实现前述实施例中相应的方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
图3示出了本实施例所提供的一种更为具体的电子设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
处理器1010可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器1020可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
本实施例的计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本公开的范围(包括权利要求)被限于这些例子;在本公开的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本说明书一个或多个实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。
另外,为简化说明和讨论,并且为了不会使本说明书一个或多个实施例难以理解,在所提供的附图中可以示出或可以不示出与集成电路(IC)芯片和其它部件的公知的电源/接地连接。此外,可以以框图的形式示出装置,以便避免使本说明书一个或多个实施例难以理解,并且这也考虑了以下事实,即关于这些框图装置的实施方式的细节是高度取决于将要实施本说明书一个或多个实施例的平台的(即,这些细节应当完全处于本领域技术人员的理解范围内)。在阐述了具体细节(例如,电路)以描述本公开的示例性实施例的情况下,对本领域技术人员来说显而易见的是,可以在没有这些具体细节的情况下或者这些具体细节有变化的情况下实施本说明书一个或多个实施例。因此,这些描述应被认为是说明性的而不是限制性的。
尽管已经结合了本公开的具体实施例对本公开进行了描述,但是根据前面的描述,这些实施例的很多替换、修改和变型对本领域普通技术人员来说将是显而易见的。例如,其它存储器架构(例如,动态RAM(DRAM))可以使用所讨论的实施例。
本说明书一个或多个实施例旨在涵盖落入所附权利要求的宽泛范围之内的所有这样的替换、修改和变型。因此,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本公开的保护范围之内。

Claims (10)

1.一种应用程序的加壳检测方法,其特征在于,包括:
对应用程序样本中的每个安卓应用程序,提取出应用特征组;
基于所述应用程序样本的所有应用特征组,构建训练集和测试集;
利用所述训练集对至少一种分类器进行训练,得到训练后的至少一种加壳分类器,利用所述测试集对至少一种加壳分类器进行测试,得到至少一组测试结果,根据至少一组测试结果,确定出最优的加壳分类器;
利用所述最优的加壳分类器对待测的安卓应用程序进行分类,确定所述待测的安卓应用程序是否加壳。
2.根据权利要求1所述的方法,其特征在于,所述对应用程序样本中的每个安卓应用程序,提取出应用特征组,包括:
利用静态分析方法,从每个安卓应用程序中提取出应用特征组;所述应用特征组包括:dex文件比例、非空应用程序名称、应用程序名称中的包名称、so文件的数量、可见类的数量、原生方法的数量、本机方法比例、可见组件比例和加权信息熵;
其中,所述dex文件比例为dex文件的字节数与apk文件的字节数的比值;所述非空应用程序名称为AndroidManifest.xml文件中所描述的应用程序的名称;所述应用程序名称中的包名称为AndroidManifest.xml文件中所描述的包名称;所述so文件的数量为apk文件解压缩后,so文件的数量;所述可见类的数量为从逆向dex文件中提取出的Java类的数量;所述原生方法的数量为从所述逆向dex文件中提取出的使用JNI调用方法的数量;所述本机方法比例为从所述逆向dex文件中提取出的使用JNI调用方法的数量与所述逆向dex文件中的所有方法的数量的比值;所述可见组件比例为所述逆向dex文件中可查找到的组件数量与AndroidManifest.xml文件中所描述的安卓组件数量的比值。
3.根据权利要求1所述的方法,其特征在于,所述基于应用程序样本的所有应用特征组,构建训练集和测试集,包括:
将所有应用特征组随机分为五组彼此没有重复部分的样本集,且两两样本集中的应用特征组的数量不相等;
从五组样本集中任意选取一个样本集作为所述测试集,其余四组样本集合并成为所述训练集;重复该步骤,得到五种不同组合的测试集和训练集。
4.根据权利要求1所述的方法,其特征在于,所述至少一种分类器为cart分类器、logistic回归分类器、高斯朴素贝叶斯分类器、随机森林分类器和线性支持向量机分类器五种分类器。
5.根据权利要求1或4所述的方法,其特征在于,所述根据至少一组测试结果确定出最优的加壳分类器,包括:
计算每个加壳分类器的F1分值;
根据各加壳分类器的F1分值,从中选取出F1分值最大的加壳分类器作为最优的加壳分类器。
6.一种应用程序的加壳检测装置,其特征在于,包括:
特征提取模块,用于对应用程序样本中的每个安卓应用程序,提取出应用特征组;
构建模块,用于基于所述应用程序样本的所有应用特征组,构建训练集和测试集;
训练模块,利用所述训练集对至少一种分类器进行训练,得到训练后的至少一种加壳分类器,利用所述测试集对至少一种加壳分类器进行测试,得到至少一组测试结果,根据至少一组测试结果,确定出最优的加壳分类器;
检测模块,用于利用所述最优的加壳分类器对待测的安卓应用程序进行分类,确定所述待测的安卓应用程序是否加壳。
7.根据权利要求6所述的装置,其特征在于,
所述特征提取模块,用于利用静态分析方法,从每个安卓应用程序中提取出应用特征组;所述应用特征组包括:dex文件比例、非空应用程序名称、应用程序名称中的包名称、so文件的数量、可见类的数量、原生方法的数量、本机方法比例、可见组件比例和加权信息熵;
其中,所述dex文件比例为dex文件的字节数与apk文件的字节数的比值;所述非空应用程序名称为AndroidManifest.xml文件中所描述的应用程序的名称;所述应用程序名称中的包名称为AndroidManifest.xml文件中所描述的包名称;所述so文件的数量为apk文件解压缩后,so文件的数量;所述可见类的数量为从逆向dex文件中提取出的Java类的数量;所述原生方法的数量为从所述逆向dex文件中提取出的使用JNI调用方法的数量;所述本机方法比例为从所述逆向dex文件中提取出的使用JNI调用方法的数量与所述逆向dex文件中的所有方法的数量的比值;所述可见组件比例为所述逆向dex文件中可查找到的组件数量与AndroidManifest.xml文件中所描述的安卓组件数量的比值。
8.根据权利要求6所述的装置,其特征在于,所述构建模块包括:
样本分组子模块,用于将所有应用特征组随机分为五组彼此没有重复部分的样本集,且两两样本集中的应用特征组的数量不相等;
样本组合子模块,用于从五组样本集中任意选取一个样本集作为所述测试集,其余四组样本集合并成为所述训练集;重复该步骤,得到五种不同组合的测试集和训练集。
9.根据权利要求6所述的装置,其特征在于,所述至少一种分类器为cart分类器、logistic回归分类器、高斯朴素贝叶斯分类器、随机森林分类器和线性支持向量机分类器五种分类器。
10.根据权利要求6或9所述的装置,其特征在于,
所述训练模块,用于计算每个加壳分类器的F1分值;根据各加壳分类器的F1分值,从中选取出F1分值最大的加壳分类器作为最优的加壳分类器。
CN202010655631.2A 2020-07-09 2020-07-09 一种应用程序的加壳检测方法及装置 Pending CN111967002A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010655631.2A CN111967002A (zh) 2020-07-09 2020-07-09 一种应用程序的加壳检测方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010655631.2A CN111967002A (zh) 2020-07-09 2020-07-09 一种应用程序的加壳检测方法及装置

Publications (1)

Publication Number Publication Date
CN111967002A true CN111967002A (zh) 2020-11-20

Family

ID=73361596

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010655631.2A Pending CN111967002A (zh) 2020-07-09 2020-07-09 一种应用程序的加壳检测方法及装置

Country Status (1)

Country Link
CN (1) CN111967002A (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105608391A (zh) * 2015-12-17 2016-05-25 北京奇虎科技有限公司 多elf文件保护方法及系统
CN108710800A (zh) * 2018-05-22 2018-10-26 国家计算机网络与信息安全管理中心 一种安卓应用程序的加壳识别方法
CN110096853A (zh) * 2019-04-12 2019-08-06 福建天晴在线互动科技有限公司 基于Mono的Unity安卓应用加固方法、存储介质

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105608391A (zh) * 2015-12-17 2016-05-25 北京奇虎科技有限公司 多elf文件保护方法及系统
CN108710800A (zh) * 2018-05-22 2018-10-26 国家计算机网络与信息安全管理中心 一种安卓应用程序的加壳识别方法
CN110096853A (zh) * 2019-04-12 2019-08-06 福建天晴在线互动科技有限公司 基于Mono的Unity安卓应用加固方法、存储介质

Similar Documents

Publication Publication Date Title
CN107563429B (zh) 一种网络用户群体的分类方法及装置
CN109165510B (zh) 基于双通道卷积神经网络的Android恶意应用程序检测方法
CN105740707B (zh) 恶意文件的识别方法和装置
CN111460446B (zh) 基于模型的恶意文件检测方法及装置
CN109271788B (zh) 一种基于深度学习的Android恶意软件检测方法
CN108694319B (zh) 一种恶意代码家族判定方法及装置
CN109086377B (zh) 设备画像的生成方法、装置及计算设备
CN111858242A (zh) 一种系统日志异常检测方法、装置及电子设备和存储介质
KR101858620B1 (ko) 기계 학습을 이용한 자바스크립트 분석 장치 및 방법
CN114510716A (zh) 文档检测方法、模型训练方法、装置、终端及存储介质
CN111460448B (zh) 一种恶意软件家族检测方法及装置
CN109753794A (zh) 一种恶意应用的识别方法、系统、训练方法、设备及介质
CN113364784A (zh) 检测参数生成方法、装置、电子设备及存储介质
CN111460449A (zh) 应用程序识别方法、系统、存储介质以及电子设备
CN111797395A (zh) 恶意代码可视化及变种检测方法、装置、设备及存储介质
CN112085588A (zh) 规则模型的安全性的确定方法、装置和数据处理方法
CN111967002A (zh) 一种应用程序的加壳检测方法及装置
CN116484371A (zh) 基于函数调用图的Android插件恶意性检测方法
CN111262818B (zh) 病毒检测方法、系统、装置、设备及存储介质
CN109784047B (zh) 基于多特征的程序检测方法
CN109359462B (zh) 虚假设备识别方法、设备、存储介质及装置
CN113641964B (zh) 重打包应用检测方法、电子设备及存储介质
CN114070581B (zh) 域名系统隐藏信道的检测方法及装置
CN113496012B (zh) 一种应用安装包的二次打包检测方法及装置
CN111008048B (zh) 一种文件加载方法、装置及可读存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20201120