CN110245492A - 基于张量分解的安卓app重打包检测方法 - Google Patents
基于张量分解的安卓app重打包检测方法 Download PDFInfo
- Publication number
- CN110245492A CN110245492A CN201910428020.1A CN201910428020A CN110245492A CN 110245492 A CN110245492 A CN 110245492A CN 201910428020 A CN201910428020 A CN 201910428020A CN 110245492 A CN110245492 A CN 110245492A
- Authority
- CN
- China
- Prior art keywords
- app
- matrix
- collaboration
- tensor
- api calls
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/23—Clustering techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Life Sciences & Earth Sciences (AREA)
- Bioinformatics & Computational Biology (AREA)
- Artificial Intelligence (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Health & Medical Sciences (AREA)
- Evolutionary Computation (AREA)
- Bioinformatics & Cheminformatics (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Evolutionary Biology (AREA)
- Stored Programmes (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开一种基于张量分解的安卓APP重打包检测方法,首先,根据安卓APP调用API的协同出现关系,构建出所有安卓APP的协同出现矩阵,并表达为三阶张量形式;然后,采用张量分解算法,将每个安卓APP的协同出现矩阵表示为一个一阶向量;最后,针对两个不同的安卓APP,通过计算其一阶向量的欧氏距离,表述两个安卓APP的相似性,通过排序算法判定两个安卓APP是否属于重打包关系。本发明一方面将复杂的程序相似性计算问题,转化为张量分解和一阶向量欧式距离计算;另一方面当新的安卓APP加入检测时,只需要在张量上增加维数,而不用重新构建张量,避免重复计算现有样本集。该方法在检测性能和时间开销上取得较好的平衡,可以支持大规模安卓APP的重打包检测分析。
Description
技术领域
本发明属于可信软件及恶意软件检测领域,特别涉及一种基于张量分解的安卓APP重打包检测方法。
背景技术
APP重打包就是恶意的开发者将原先APP程序进行破译,对非核心的代码资料进行恶意的改动,并对APP进行重新的打包,发布到市场中,将APP重新打包后产生的APP称为重打包APP。在安卓平台,重打包问题是Android多年的顽疾。基本上大部分的恶意软件的流入是通过重打包。
重打包APP包含两个特征:
(1)重打包APP与原APP核心代码相似,核心代码是指去除第三方库等外部通用代码之后的部分。由于重打包APP需要保持原APP的功能,因此对于核心代码不会做很大的改动;
(2)重打包APP的签名与原APP签名不同,签名代表着APP的作者信息;破解一个APP之后,必然要对APP重新签名,而这个签名一般无法与原签名保持一致。
如果将重打包APP进行分类,可以根据其重打包的目的以及其它因素将其分为替换广告库版、汉化版、功能扩充版。
发明内容
本发明的目的在于提供一种基于张量分解的安卓APP重打包检测方法,能够在检测性能和时间开销上取得平衡,并且在大规模APP中能够取得性能上的优势,利用张量分解进行重打包检测也能在有新的APP加入检测时,避免重复训练之前的APP,以解决上述技术问题。
为了实现上述目的,本发明采用的技术方案是:
基于张量分解的安卓APP重打包检测方法,包括以下步骤:
步骤S1):构建Java的API调用类集合SA={si|1≤i≤I},其中si表示第i个API调用类,I表示Java的API调用类的总数,然后对所有待检测的安卓APP进行反编译,得到各个APP的全部Smali文件集合,并对得到的Smali文件进行第三方库过滤;
步骤S2):利用API调用在Smali文件中出现的位置,得到各个Smali文件的协同出现矩阵,对每个APP的所有Smali文件的协同出现矩阵取并集操作,获得每个APP的协同出现矩阵SC={sk|1≤k≤K},其中sk表示第k个APP的协同出现矩阵,K表示待检测的APP总数;
步骤S3):利用所有APP的协同出现矩阵组成三阶张量
步骤S4):采用张量分解算法将得到的三阶张量X降维为二阶矩阵,从而,将每个APP的协同出现矩阵表示成一阶向量;
步骤S5):计算两个APP的向量表示之间的欧式距离Di,j,随后,利用排序算法连接所有APP,若两个APP被相连,则认为这两个APP是重打包关系。
进一步的,步骤S1)具体包括:爬取Java的全部API调用类,构建Java的API调用类集合SA={si|1≤i≤I},其中si表示第i个API调用类,I表示Java的API调用类的总数;然后使用反编译工具apktool,得到各个APP的Smali文件;并使用第三方库过滤工具libradar,对现有的库进行聚类后,得到白名单,对得到的Smali文件进行过滤。
进一步的,步骤S2)中利用API调用在Smali文件中出现的位置,得到各个Smali文件的协同出现矩阵,从而得到APP的协同出现矩阵;具体包括以下步骤:
步骤S201:抽取下一个待分析的APP;
步骤S202:对于第k个APP所有的待分析Smali文件,均分别初始化一个全为0的协同出现矩阵其中表示第k个APP的第n个Smali文件的协同出现矩阵,N表示第k个APP的Smali文件数,并设置一个滑动窗ω;
步骤S203:抽取当前APP待分析的Smali文件中的下一条语句;
步骤S204:判断该语句是否是一条API调用语句,如果是则跳至步骤S205,否则转入步骤S203;
步骤S205:判断在该API调用语句的滑动窗内是否出现其他的API调用语句,若出现则跳至步骤S206,否则转入步骤S203;
步骤S206:将协同出现矩阵中对应于两种API的位置置1;
步骤S207:判断当前APP的所有Smali文件是否分析完毕,若分析完毕则跳至步骤S208,否则转入步骤S203;
步骤S208:对该APP的所有Smali文件的协同出现矩阵取并集,得到该APP的协同出现矩阵
步骤S209:若所有APP都已分析完毕,则停止算法,如果尚存在未分析的APP,则返回步骤S201继续迭代。
进一步的,步骤S3)具体包括:将各个APP的协同出现矩阵按次序沿竖直方向排放在一起,组成三阶张量其中X(i,j,k)表示第k个APP中第i种API调用类和第j种API调用类在预先定义的滑动窗内出现的情况。
进一步的,步骤S4)中,采用张量CP分解算法将得到的三阶张量X降维为二阶矩阵,从而,将每个APP的协同出现矩阵表示成一阶向量,具体分解方法如下:
步骤S401:将三阶张量X近似地表示为有限个秩为一的张量外积和,即 成分个数R为APP协同出现矩阵向量表示的维数;
步骤S402:张量X任意位置(i,j,k)上的元素估计值为将分解后的一阶向量组合为三个因子矩阵A=[a1a2...aR],B=[b1b2...bR],
步骤S403:在嵌入空间中,利用矩阵C的各行表示各APP的协同出现矩阵,得到各APP的一阶向量表示。
进一步的,步骤S5)中,计算两个APP的向量表示之间的欧式距离Di,j,随后,利用排序算法连接所有APP,若两个APP被相连,则认为这两个APP是重打包关系。
进一步的,步骤S5)具体包括:
步骤S501:利用张量分解后得到的APP的向量表示,计算APP两两之间的欧氏距离;
步骤S502:利用排序算法,将距离每个APP最近的前个APP与其相连;
步骤S503:若两个APP被相连,则认为它们是重打包关系。
进一步的,步骤S1)中第三方库过滤具体使用过滤工具libradar。
与现有技术相比,本发明的有益效果是:
1)本发明的检测粒度为类粒度,相比于函数粒度和语句粒度,检测粒度较大,负载较小,比较时间较短,适合于大规模APP重打包检测。
2)本发明将张量模型、张量分解理论引入重打包检测领域中,方法新颖。
3)本发明的检测目标为Smali文件,而不是java文件,避免了在预处理的反编译阶段进行过多操作,降低了时间开销。
4)本发明的重打包检测效果在大规模APP上与其他开源重打包检测工具(例如,FsquaDra(一种专门检测重打包的工具,发表在ICST上))相比,查全率相同时,检测准确性高出10-20个百分点,是一种具有实用价值的新型重打包检测方法。
步骤S1)中,采用自动聚类的方式来过滤第三方库比单独的白名单方法过滤更完善,能更好地降低误报和漏报率,提高实验精度。
步骤S2)、S3)中,引入协同出现矩阵的概念,将每一个APP的特征转化成一个矩阵,再将各个矩阵叠放在一起组成张量,在加入新的APP时,避免了重复训练之前的APP,提高方法的可扩展性。
步骤S4)中,张量CP分解将一个高阶的张量分解成多个核的和,每个核是由向量的外积组成,通过CP分解,可以在近似原来张量的前提下,大大降低特征矩阵的维度,从而加快重打包检测的速度。
步骤S5)中,优化了APP间的距离判断过程,仅仅通过阈值判断两个APP是否为重打包关系不够精确,为了适应重打包检测环境,本发明选用排序算法,规避阈值处理的缺点。
附图说明
图1为本发明基于张量分解的安卓APP重打包检测方法整体流程图;
图2为本发明构建APP协同出现矩阵流程图;
图3为本发明构建张量模型示意图。
具体实施方式
下面结合附图和实施例详细说明本发明的实施方式。
请参阅图1所示,本发明提供一种基于张量分解的安卓APP重打包检测方法,包括以下步骤:
步骤S1):输入有多个APP,每个APP有各自的多个smali文件;爬取Java的全部API调用类,构建Java的API调用类集合SA={si|1≤i≤I},其中si表示第i个API调用类,I表示Java的API调用类的总数;然后使用反编译工具apktool,得到各个APP的Smali文件;并使用第三方库过滤工具libradar,对现有的库进行聚类后,得到白名单,对得到的Smali文件进行过滤,采用自动聚类的方式来进行第三方库过滤,比单独的白名单方法过滤更完善,能更好地降低误报和漏报率。
步骤S2):利用API调用在Smali文件中出现的位置,得到各个Smali文件的协同出现矩阵,对每个APP的所有Smali文件取并集操作,获得每个APP的协同出现矩阵SC={sk|1≤k≤K},其中sk表示第k个APP的协同出现矩阵,K表示待检测的APP总数,具体包括以下步骤:
步骤S201:抽取下一个待分析的APP;
步骤S202:对于第k个APP所有的待分析Smali文件,均分别初始化一个全为0的协同出现矩阵其中表示第k个APP的第n个Smali文件的协同出现矩阵,N表示第k个APP的Smali文件数,并设置一个滑动窗ω,ω取API总数的4.37%;
步骤S203:抽取当前APP待分析的Smali文件中的下一条语句;
步骤S204:判断该语句是否是一条API调用语句,如果是则跳至步骤S205,否则转入步骤S203;
步骤S205:判断在该API调用语句的滑动窗内是否出现其他的API调用语句,若出现则跳至步骤S206,否则转入步骤S203;
步骤S206:将协同出现矩阵中对应于两种API的位置置1
步骤S207:判断当前APP的所有Smali文件是否分析完毕,若分析完毕则跳至步骤S208,否则转入步骤S203;
步骤S208:对该APP的所有Smali文件的协同出现矩阵取并集,得到该APP的协同出现矩阵
步骤S209:若所有APP都已分析完毕,则停止算法,如果尚存在未分析的APP,则返回步骤S201继续迭代。
步骤S3):将各个APP的协同出现矩阵按次序沿竖直方向排放在一起,组成三阶张量其中X(i,j,k)表示第k个APP中第i种API调用类和第j种API调用类在预先定义的滑动窗内出现的情况,使用张量可以在加入新的APP时,避免了重复训练之前的APP,提高方法的可扩展性。
步骤S4):采用张量CP分解算法将得到的三阶张量X降维为二阶矩阵,从而,可以在近似原来张量的前提下,将每个APP的协同出现矩阵表示成一阶向量,大大降低特征矩阵的维度,从而加快重打包检测的速度。具体分解方法如下:
步骤S401:将三阶张量X近似地表示为有限个秩为一的张量外积和,即 成分个数R即为APP协同出现矩阵向量表示的维数;
步骤S402:张量X任意位置(i,j,k)上的元素估计值为将分解后的一阶向量组合为三个因子矩阵A=[a1a2...aR],B=[b1b2...bR],
步骤S403:在嵌入空间中,利用矩阵C的各行表示各APP的协同出现矩阵,得到各APP的一阶向量表示。
步骤S5):计算两个APP的向量表示之间的欧式距离Di,j,随后,利用KNN算法连接所有APP,若两个APP被相连,则认为这两个APP是重打包关系,具体步骤如下:
步骤S501:利用张量分解后得到的APP的向量表示,计算APP两两之间的欧氏距离;
步骤S502:利用KNN算法,将距离每个APP最近的前个APP与其相连;
步骤S503:若两个APP被相连,则认为它们是重打包关系。
Claims (8)
1.基于张量分解的安卓APP重打包检测方法,其特征在于,包括以下步骤:
步骤S1):构建Java的API调用类集合SA={si|1≤i≤I},其中si表示第i个API调用类,I表示Java的API调用类的总数,然后对所有待检测的安卓APP进行反编译,得到各个APP的全部Smali文件集合,并对得到的Smali文件进行第三方库过滤;
步骤S2):利用API调用在Smali文件中出现的位置,得到各个Smali文件的协同出现矩阵,对每个APP的所有Smali文件的协同出现矩阵取并集操作,获得每个APP的协同出现矩阵SC={sk|1≤k≤K},其中sk表示第k个APP的协同出现矩阵,K表示待检测的APP总数;
步骤S3):利用所有APP的协同出现矩阵组成三阶张量
步骤S4):采用张量分解算法将得到的三阶张量X降维为二阶矩阵,从而,将每个APP的协同出现矩阵表示成一阶向量;
步骤S5):计算两个APP的向量表示之间的欧式距离Di,j,随后,利用排序算法连接所有APP,若两个APP被相连,则认为这两个APP是重打包关系。
2.根据权利要求1所述基于张量分解的安卓APP重打包检测方法,其特征在于,步骤S1)具体包括:爬取Java的全部API调用类,构建Java的API调用类集合SA={si|1≤i≤I},其中si表示第i个API调用类,I表示Java的API调用类的总数;然后使用反编译工具apktool,得到各个APP的Smali文件;并使用第三方库过滤工具libradar,对现有的库进行聚类后,得到白名单,对得到的Smali文件进行过滤。
3.根据权利要求1所述基于张量分解的安卓APP重打包检测方法,其特征在于,步骤S2)中利用API调用在Smali文件中出现的位置,得到各个Smali文件的协同出现矩阵,从而得到APP的协同出现矩阵;具体包括以下步骤:
步骤S201:抽取下一个待分析的APP;
步骤S202:对于第k个APP所有的待分析Smali文件,均分别初始化一个全为0的协同出现矩阵1≤n≤N,其中表示第k个APP的第n个Smali文件的协同出现矩阵,N表示第k个APP的Smali文件数,并设置一个滑动窗ω;
步骤S203:抽取当前APP待分析的Smali文件中的下一条语句;
步骤S204:判断该语句是否是一条API调用语句,如果是则跳至步骤S205,否则转入步骤S203;
步骤S205:判断在该API调用语句的滑动窗内是否出现其他的API调用语句,若出现则跳至步骤S206,否则转入步骤S203;
步骤S206:将协同出现矩阵中对应于两种API的位置置1;
步骤S207:判断当前APP的所有Smali文件是否分析完毕,若分析完毕则跳至步骤S208,否则转入步骤S203;
步骤S208:对该APP的所有Smali文件的协同出现矩阵取并集,得到该APP的协同出现矩阵
步骤S209:若所有APP都已分析完毕,则停止算法,如果尚存在未分析的APP,则返回步骤S201继续迭代。
4.根据权利要求1所述基于张量分解的安卓APP重打包检测方法,其特征在于,步骤S3)具体包括:将各个APP的协同出现矩阵按次序沿竖直方向排放在一起,组成三阶张量其中X(i,j,k)表示第k个APP中第i种API调用类和第j种API调用类在预先定义的滑动窗内出现的情况。
5.根据权利要求1所述基于张量分解的安卓APP重打包检测方法,其特征在于,步骤S4)中,采用张量CP分解算法将得到的三阶张量X降维为二阶矩阵,从而,将每个APP的协同出现矩阵表示成一阶向量,具体分解方法如下:
步骤S401:将三阶张量X近似地表示为有限个秩为一的张量外积和,即cr,成分个数R为APP协同出现矩阵向量表示的维数;
步骤S402:张量X任意位置(i,j,k)上的元素估计值为将分解后的一阶向量组合为三个因子矩阵A=[a1a2...aR],B=[b1b2...bR],
步骤S403:在嵌入空间中,利用矩阵C的各行表示各APP的协同出现矩阵,得到各APP的一阶向量表示。
6.根据权利要求1所述基于张量分解的安卓APP重打包检测方法,其特征在于,步骤S5)中,计算两个APP的向量表示之间的欧式距离Di,j,随后,利用排序算法连接所有APP,若两个APP被相连,则认为这两个APP是重打包关系。
7.根据权利要求1所述基于张量分解的安卓APP重打包检测方法,其特征在于,步骤S5)具体包括:
步骤S501:利用张量分解后得到的APP的向量表示,计算APP两两之间的欧氏距离;
步骤S502:利用排序算法,将距离每个APP最近的前个APP与其相连;
步骤S503:若两个APP被相连,则认为它们是重打包关系。
8.根据权利要求1所述基于张量分解的安卓APP重打包检测方法,其特征在于,步骤S1)中第三方库过滤具体使用过滤工具libradar。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910428020.1A CN110245492B (zh) | 2019-05-22 | 2019-05-22 | 基于张量分解的安卓app重打包检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910428020.1A CN110245492B (zh) | 2019-05-22 | 2019-05-22 | 基于张量分解的安卓app重打包检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110245492A true CN110245492A (zh) | 2019-09-17 |
CN110245492B CN110245492B (zh) | 2021-04-20 |
Family
ID=67884731
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910428020.1A Active CN110245492B (zh) | 2019-05-22 | 2019-05-22 | 基于张量分解的安卓app重打包检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110245492B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111507657A (zh) * | 2020-03-16 | 2020-08-07 | 杭州电子科技大学 | 一种基于半自动拣选系统的订单分波方法 |
CN111522709A (zh) * | 2020-04-14 | 2020-08-11 | 江西航智信息技术有限公司 | 一种学生移动终端app使用时间管理方法、系统和装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108021509A (zh) * | 2017-12-27 | 2018-05-11 | 西安交通大学 | 基于程序行为网络聚合的测试用例动态排序方法 |
US10043090B2 (en) * | 2015-12-01 | 2018-08-07 | Ricoh Company, Ltd. | Information processing device, information processing method, computer-readable recording medium, and inspection system |
-
2019
- 2019-05-22 CN CN201910428020.1A patent/CN110245492B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10043090B2 (en) * | 2015-12-01 | 2018-08-07 | Ricoh Company, Ltd. | Information processing device, information processing method, computer-readable recording medium, and inspection system |
CN108021509A (zh) * | 2017-12-27 | 2018-05-11 | 西安交通大学 | 基于程序行为网络聚合的测试用例动态排序方法 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111507657A (zh) * | 2020-03-16 | 2020-08-07 | 杭州电子科技大学 | 一种基于半自动拣选系统的订单分波方法 |
CN111507657B (zh) * | 2020-03-16 | 2023-04-07 | 杭州电子科技大学 | 一种基于半自动拣选系统的订单分波方法 |
CN111522709A (zh) * | 2020-04-14 | 2020-08-11 | 江西航智信息技术有限公司 | 一种学生移动终端app使用时间管理方法、系统和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN110245492B (zh) | 2021-04-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Alayrac et al. | Unsupervised learning from narrated instruction videos | |
CN106951780B (zh) | 重打包恶意应用的静态检测方法和装置 | |
CN106503558B (zh) | 一种基于社团结构分析的Android恶意代码检测方法 | |
CN108959924A (zh) | 一种基于词向量和深度神经网络的Android恶意代码检测方法 | |
CN109918548A (zh) | 一种自动检测文档敏感信息的方法和应用 | |
CN108268777A (zh) | 一种利用补丁信息进行未知漏洞发现的相似性检测方法 | |
CN108491228A (zh) | 一种二进制漏洞代码克隆检测方法及系统 | |
CN103902911B (zh) | 一种基于程序结构特征的恶意程序检测方法 | |
CN106899440A (zh) | 一种面向云计算的网络入侵检测方法及系统 | |
CN110348214A (zh) | 对恶意代码检测的方法及系统 | |
CN1530857A (zh) | 文档和图案分群的方法及装置 | |
CN109886021A (zh) | 一种基于api全局词向量和分层循环神经网络的恶意代码检测方法 | |
CN105045715B (zh) | 基于编程模式和模式匹配的漏洞聚类方法 | |
CN104866764B (zh) | 一种基于对象引用图的Android手机恶意软件检测方法 | |
CN110245492A (zh) | 基于张量分解的安卓app重打包检测方法 | |
CN109871686A (zh) | 基于图标表示和软件行为一致性分析的恶意程序识别方法及装置 | |
Botta et al. | Finding network communities using modularity density | |
Day et al. | Phialide arrangement and character evolution in the helotialean anamorph genera Cadophora and Phialocephala | |
CN105631464B (zh) | 对染色体序列和质粒序列进行分类的方法及装置 | |
CN108681564A (zh) | 关键词和答案的确定方法、装置和计算机可读存储介质 | |
CN104699595B (zh) | 一种面向软件升级的软件测试方法 | |
CN110362995A (zh) | 一种基于逆向与机器学习的恶意软件检测及分析系统 | |
CN104537280B (zh) | 基于文本关系相似性的蛋白质交互关系识别方法 | |
CN112231775B (zh) | 一种基于Adaboost算法的硬件木马检测方法 | |
CN102298681B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |