CN107239678B - 一种基于Java文件目录结构的Android应用重打包检测方法 - Google Patents
一种基于Java文件目录结构的Android应用重打包检测方法 Download PDFInfo
- Publication number
- CN107239678B CN107239678B CN201710323848.1A CN201710323848A CN107239678B CN 107239678 B CN107239678 B CN 107239678B CN 201710323848 A CN201710323848 A CN 201710323848A CN 107239678 B CN107239678 B CN 107239678B
- Authority
- CN
- China
- Prior art keywords
- application
- signature
- java
- directory structure
- apk
- 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.)
- Expired - Fee Related
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 29
- 238000012857 repacking Methods 0.000 title claims abstract description 11
- 238000000034 method Methods 0.000 claims abstract description 17
- 238000006243 chemical reaction Methods 0.000 claims description 2
- 238000005516 engineering process Methods 0.000 abstract description 4
- 238000003780 insertion Methods 0.000 abstract description 3
- 230000037431 insertion Effects 0.000 abstract description 3
- 230000006399 behavior Effects 0.000 description 7
- 238000004364 calculation method Methods 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
Images
Classifications
-
- 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/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/033—Test or assess software
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Virology (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Stored Programmes (AREA)
- Storage Device Security (AREA)
Abstract
本发明公开了一种基于Java文件目录结构的Android应用重打包检测方法,对于每一个已知的APK应用程序,通过解压缩得到具有特定目录结构的Java类文件,该目录结构可视为树形结构,然后对其中每一个Java的包名和Java类名进行改进的哈希运算,将所得哈希值作为节点签名,使用深度优先遍历算法将节点签名进行连接得到最终应用签名。计算出所有已知应用的签名并组成签名库。对于待检测的APK应用程序,按照类似方法获得其签名,并计算该签名与签名库中签名的编辑距离以及相似度,得出检测结果。本发明可以有效避免代码混淆技术以及恶意代码的插入带来的影响,从而具有较好的健壮性和准确率。
Description
技术领域
本发明属于Android应用重打包检测技术领域,尤其涉及一种基于Java文件目录结构的Android应用重打包检测方法。
背景技术
目前Android应用重打包检测方法主要有基于代码或者行为的检测方法。基于代码或者行为的检测方法采用反编译工具或者动态行为分析工具得到代码文件或应用行为序列,然后进行预处理得到序列特征,通过计算序列特征的距离得到应用相似性的量化数据。该方法可以检测应用代码的改变,解决包括代码重用、剽窃和重打包等问题,但是序列特征的提取容易受到代码混淆技术的影响,因而在针对实际问题进行分析时具有一定的局限性。
发明内容
发明目的:为解决现有技术中存在的问题,本发明提出一种能有效避免代码混淆技术以及恶意代码的插入带来的影响的基于Java文件目录结构的Android应用重打包检测方法。
技术方案:一种基于Java文件目录结构的Android应用重打包检测方法,包括如下步骤:
(1)建立应用签名库:对于已知的每一个APK应用程序进行处理,得到应用签名,并建立应用签名库,具体过程为:
1.1对APK应用程序进行解压缩等处理后得到具有特定目录结构的Java类文件;
1.2对其中每一个Java的包名和Java类名进行改进的哈希运算,将所得字符串作为节点签名,构成以应用签名为节点的树形结构;
1.3对步骤1.2中得到的树形结构进行深度优先遍历,将遍历过的节点签名进行连接,得到最后的应用签名,建立应用签名库;
(2)检测应用程序,得到检测结果:对于待检测APK应用程序,使用步骤(1)中的方法计算出应用签名后,再计算待检测应用签名和应用签名库中应用签名之间的编辑距离以及应用相似度,将所得应用相似度与阈值进行比较,判断是否为应用签名库中APK应用程序的重打包应用,得到检测结果;如果所得应用相似度大于阈值,则为APK应用程序的重打包应用。
进一步的,所述步骤1.1中对APK应用程序进行解压缩等处理后得到具有特定目录结构的Java类文件,具体为:将APK应用程序后缀名改为zip,然后解压缩,得到可执行字节码文件classes.dex,通过执行dex2jar软件转化为jar文件,再把后缀名改为zip并进行解压,得到包含Java文件的目录结构。
进一步的,所述步骤1.2中改进的哈希运算步骤如下:
a)将字符串按照序号模3运算分成三组;
b)每组字符串按照ASCII码表转化为十进制整数数组;
c)对每组分别求和并进行模62运算得到三个整数;
d)将三个整数转化为三个字符,构成输出字符串。转化规则为:0~9转化为字符“0”到“9”,10~35转化为字符“a”到“z”,36~61转化为字符“A”到“Z”。
进一步的,所述步骤(2)中计算待检测应用签名和应用签名库中应用签名之间的编辑距离以及应用相似度的计算公式如下:
式(1)中distance(A,B)为签名A和签名B的编辑距离,length1和length2为签名A和签名B的长度。
进一步的,所述步骤(2)中的阈值为0.85。
有益效果:针对目前大量存在的Android重打包应用,本发明提出了一种基于Java文件目录结构的Android应用重打包检测方法。首先对于应用库中每一个APK应用程序,解压缩得到具有特定目录结构的Java类文件,该目录结构可视为树形结构,然后对其中每一个目录名(即Java的包名)和文件名(即Java类名)进行我们自定义的哈希运算,将所得哈希值作为节点签名,使用深度优先遍历算法将节点签名进行连接得到最终应用签名。计算出所有已知应用的签名并组成签名库。对于待检测的APK应用程序,按照类似方法获得其签名,并计算该签名与签名库中签名的编辑距离,得出检测结果。本发明是基于Java文件目录结构的Android应用重打包检测方法提供了一种新的重打包检测方法。随着越来越多的重打包软件采用代码混淆技术,基于代码或者行为的检测方法必然会受到严重影响。而本发明采用的是基于Java类文件目录结构来提取特征,并不受上述行为的影响。所以相对传统的基于代码或者行为的检测方法,本发明快速有效,可以有效抵抗代码混淆,对于应用的重打包检测具有较高的准确率。
附图说明
图1为本发明的流程图。
具体实施方式
下面将结合附图,对本发明的实施案例进行详细的描述;
如图1所示,一种基于Java文件目录结构的Android应用重打包检测方法,包括如下步骤:
(1)建立应用签名库:对于已知的每一个APK应用程序进行处理,得到应用签名,并建立应用签名库:
1.1对APK应用程序进行解压缩等处理后得到具有特定目录结构的Java类文件;
1.2对其中每一个Java的包名和Java类名进行改进的哈希运算,将所得字符串作为节点签名,构成以应用签名为节点的树形结构;
1.3对步骤1.2中得到的树形结构进行深度优先遍历,将遍历过的节点签名进行连接,得到最后的应用签名,建立应用签名库;
(2)检测应用程序,得到检测结果:对于待检测APK应用程序,使用步骤(1)中的方法计算出应用签名后,再计算待检测应用签名和应用签名库中应用签名之间的编辑距离以及应用相似度,将所得应用相似度与阈值进行比较,判断是否为应用签名库中APK应用程序的重打包应用,得到检测结果,如果所得应用相似度大于阈值,则为APK应用程序的重打包应用。
本实施例中:
第一步,应用签名库的建立;
第二步,应用程序的检测过程。
应用签名库的建立具体过程如下:
(1)将APK应用程序后缀名改为zip,然后解压缩,得到可执行字节码文件classes.dex,通过执行dex2jar软件转化为jar文件,再把后缀名改为zip并进行解压,得到包含Java文件的目录结构。
(2)对其中每一个目录名(即Java的包名)和文件名(即Java类名),首先将文件名长度小于3的文件过滤掉,然后对于剩下的文件进行我们自定义的改进的哈希运算,将哈希运算的结果作为节点签名,构成以签名为节点的树状结构。
该哈希运算规则为:
a)将字符串按照序号模3运算分成3组;
b)按照ASCII码表转化为十进制整数,分别进行求和后对62取余数;
c)按照0~9转化为字符“0”到“9”,10~35转化为字符“a”到“z”,36~61转化为字符“A”到“Z”的规则转化为字符,得到长度为3的字符串。
例如,对于文件“UPPayAssistEx.class”,首先将文件名分成3组字符串,分别是“Uassx”、“Pyst”和“PAiE”,然后按照ASCII码表转化为十进制整数并进行求和,得到85+97+115+115+120、80+121+115+116和80+65+105+69,即532、432和319,对62取余数后得到36、60和9,再转化为字符,即“A”、“Y”和“9”,所以“AY9”为文件“UPPayAssistEx.class”的哈希运算结果,也即节点签名。
(3)进行深度优先遍历算法,将节点签名进行连接,得到最后的应用签名。
(4)将所得到的应用签名加入签名库。
第二步,应用程序的检测过程。
(1)按照前述第一步中的(1)~(3)得到待检测应用的签名。
(2)计算所得签名与签名库中所有签名之间的编辑距离distance(A,B)。然后计算应用相似度,计算公式如下:
式(1)中distance(A,B)为签名A和签名B的编辑距离,length1和length2为签名A和签名B的长度。
若存在一个签名,它们之间的相似度大于给定阈值则表示二者为重打包应用。经过我们的试验,将判断是否为重打包应用的阈值可设为0.85。
本发明首先对于每一个已知的APK应用程序,通过解压缩得到具有特定目录结构的Java类文件,该目录结构可视为树形结构,然后对其中每一个目录名(即Java的包名)和文件名(即Java类名)进行我们自定义的哈希运算,将所得哈希值作为节点签名,使用深度优先遍历算法将节点签名进行连接得到最终应用签名。计算出所有已知应用的签名并组成签名库。对于待检测的APK应用程序,按照类似方法获得其签名,并计算该签名与签名库中签名的编辑距离以及相似度,得出检测结果。本发明可以有效避免代码混淆技术以及恶意代码的插入带来的影响,从而具有较好的健壮性和准确率。
Claims (3)
1.一种基于Java文件目录结构的Android应用重打包检测方法,其特征在于,包括如下步骤:
(1)建立应用签名库:对于已知的每一个APK应用程序进行处理,得到应用签名,并建立应用签名库,具体过程为:
1.1对APK应用程序进行解压缩处理后得到具有特定目录结构的Java类文件;具体为:将APK应用程序后缀名改为zip,然后解压缩,得到可执行字节码文件classes.dex,通过执行dex2jar软件转化为jar文件,再把后缀名改为zip并进行解压,得到包含Java文件的目录结构;
1.2对其中每一个Java的包名和Java类名进行改进的哈希运算,将所得字符串作为节点签名,构成以应用签名为节点的树形结构;所述改进的哈希运算步骤如下:
a)将字符串按照序号模3运算分成三组;
b)每组字符串按照ASCII码表转化为十进制整数数组;
c)对每组分别求和并进行模62运算得到三个整数;
d)将三个整数转化为三个字符,构成输出字符串;转化规则为:0~9转化为字符“0”到“9”,10~35转化为字符“a”到“z”,36~61转化为字符“A”到“Z”;
1.3对步骤1.2中得到的树形结构进行深度优先遍历,将遍历过的节点签名进行连接,得到最后的应用签名,建立应用签名库;
(2)检测应用程序,得到检测结果:对于待检测APK应用程序,使用(1)中的方法计算出应用签名后,再计算待检测应用签名和应用签名库中应用签名之间的编辑距离以及应用相似度,将所得应用相似度与阈值进行比较,判断是否为应用签名库中APK应用程序的重打包应用,得到检测结果;如果所得应用相似度大于阈值,则为APK应用程序的重打包应用。
3.如权利要求1所述的基于Java文件目录结构的Android应用重打包检测方法,其特征在于,所述阈值为0.85。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710323848.1A CN107239678B (zh) | 2017-05-10 | 2017-05-10 | 一种基于Java文件目录结构的Android应用重打包检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710323848.1A CN107239678B (zh) | 2017-05-10 | 2017-05-10 | 一种基于Java文件目录结构的Android应用重打包检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107239678A CN107239678A (zh) | 2017-10-10 |
CN107239678B true CN107239678B (zh) | 2020-07-14 |
Family
ID=59984204
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710323848.1A Expired - Fee Related CN107239678B (zh) | 2017-05-10 | 2017-05-10 | 一种基于Java文件目录结构的Android应用重打包检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107239678B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107908432A (zh) * | 2017-11-17 | 2018-04-13 | 深圳泉眼体育运营管理有限公司 | 应用程序的配置方法及装置、终端设备及可读存储介质 |
CN109190372B (zh) * | 2018-07-09 | 2021-11-12 | 四川大学 | 一种基于字节码的JavaScript恶意代码检测方法 |
CN109858249B (zh) * | 2019-02-18 | 2020-08-07 | 暨南大学 | 移动恶意软件大数据的快速智能比对和安全检测方法 |
CN110321674B (zh) * | 2019-07-12 | 2021-04-06 | 北京智游网安科技有限公司 | 一种基于脚本程序的反调试方法、智能终端及存储介质 |
US11436331B2 (en) | 2020-01-16 | 2022-09-06 | AVAST Software s.r.o. | Similarity hash for android executables |
CN113641964B (zh) * | 2021-10-19 | 2022-05-17 | 北京邮电大学 | 重打包应用检测方法、电子设备及存储介质 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102750482B (zh) * | 2012-06-20 | 2014-10-29 | 东南大学 | 一种安卓市场中重包装应用的检测方法 |
CN103984883B (zh) * | 2014-05-21 | 2017-01-25 | 湘潭大学 | 基于类依赖图的Android应用相似性检测方法 |
CN104317599B (zh) * | 2014-10-30 | 2017-06-20 | 北京奇虎科技有限公司 | 检测安装包是否被二次打包的方法和装置 |
-
2017
- 2017-05-10 CN CN201710323848.1A patent/CN107239678B/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN107239678A (zh) | 2017-10-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107239678B (zh) | 一种基于Java文件目录结构的Android应用重打包检测方法 | |
CN109359439B (zh) | 软件检测方法、装置、设备及存储介质 | |
CN111400719B (zh) | 基于开源组件版本识别的固件脆弱性判别方法及系统 | |
US9003529B2 (en) | Apparatus and method for identifying related code variants in binaries | |
US11048798B2 (en) | Method for detecting libraries in program binaries | |
CN109462575B (zh) | 一种webshell检测方法及装置 | |
CN108563952B (zh) | 文件的病毒检测方法、装置及存储介质 | |
CN104978521B (zh) | 一种实现恶意代码标注的方法及系统 | |
CN104036187B (zh) | 计算机病毒类型确定方法及其系统 | |
CN104021346A (zh) | 基于程序流程图的Android恶意软件检测方法 | |
CN105205397A (zh) | 恶意程序样本分类方法及装置 | |
CN113901474B (zh) | 一种基于函数级代码相似性的漏洞检测方法 | |
RU2722692C1 (ru) | Способ и система выявления вредоносных файлов в неизолированной среде | |
CN105046152A (zh) | 基于函数调用图指纹的恶意软件检测方法 | |
CN112084146A (zh) | 基于多维特征的固件同源性检测方法 | |
Li et al. | FEPDF: a robust feature extractor for malicious PDF detection | |
CN109800575A (zh) | 一种Android应用程序的安全检测方法 | |
CN112148305A (zh) | 一种应用检测方法、装置、计算机设备和可读存储介质 | |
US20230418578A1 (en) | Systems and methods for detection of code clones | |
CN105809034A (zh) | 一种恶意软件识别方法 | |
EP3097644A1 (en) | Optimized data condenser and method | |
CN110826062B (zh) | 恶意软件的检测方法及装置 | |
CN106372508A (zh) | 恶意文档的处理方法及装置 | |
CN112163217A (zh) | 恶意软件变种识别方法、装置、设备及计算机存储介质 | |
CN111310184A (zh) | 基于rich头部标识的pe文件特征码生成方法、系统、电子设备及存储介质 |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20200714 |