CN107239678B - 一种基于Java文件目录结构的Android应用重打包检测方法 - Google Patents

一种基于Java文件目录结构的Android应用重打包检测方法 Download PDF

Info

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
Application number
CN201710323848.1A
Other languages
English (en)
Other versions
CN107239678A (zh
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.)
Southeast University
Original Assignee
Southeast University
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 Southeast University filed Critical Southeast University
Priority to CN201710323848.1A priority Critical patent/CN107239678B/zh
Publication of CN107239678A publication Critical patent/CN107239678A/zh
Application granted granted Critical
Publication of CN107239678B publication Critical patent/CN107239678B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

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/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
    • 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
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test 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

一种基于Java文件目录结构的Android应用重打包检测方法
技术领域
本发明属于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)中计算待检测应用签名和应用签名库中应用签名之间的编辑距离以及应用相似度的计算公式如下:
Figure BDA0001290582830000021
式(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)。然后计算应用相似度,计算公式如下:
Figure BDA0001290582830000041
式(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应用程序的重打包应用。
2.如权利要求1所述的基于Java文件目录结构的Android应用重打包检测方法,其特征在于,采用以下公式计算待检测应用签名和应用签名库中应用签名之间的编辑距离以及应用相似度:
Figure FDA0002419357870000011
式(1)中distance(A,B)为签名A和签名B的编辑距离,length1和length2为签名A和签名B的长度。
3.如权利要求1所述的基于Java文件目录结构的Android应用重打包检测方法,其特征在于,所述阈值为0.85。
CN201710323848.1A 2017-05-10 2017-05-10 一种基于Java文件目录结构的Android应用重打包检测方法 Expired - Fee Related CN107239678B (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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 北京奇虎科技有限公司 检测安装包是否被二次打包的方法和装置

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