CN116302961A - Android应用程序密码学误用检测方法及装置 - Google Patents
Android应用程序密码学误用检测方法及装置 Download PDFInfo
- Publication number
- CN116302961A CN116302961A CN202310080446.9A CN202310080446A CN116302961A CN 116302961 A CN116302961 A CN 116302961A CN 202310080446 A CN202310080446 A CN 202310080446A CN 116302961 A CN116302961 A CN 116302961A
- Authority
- CN
- China
- Prior art keywords
- application program
- code
- android application
- cryptography
- cryptographic
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3624—Software debugging by performing operations on the source code, e.g. via a compiler
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/53—Decompilation; Disassembly
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Software Systems (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种Android应用程序密码学误用检测方法及装置,方法包括以下步骤:对待检测Android应用程序进行反编译,得到smali文件;在smali代码中寻找和密码学算法相关的代码段,并做标签;对获取的代码段数据进行特征提取,构建训练集;利用训练集进行分类模型训练;利用训练好的分类模型检测Android应用程序,并输出密码学误用检测报告。本发明基于Android应用程序密码学检测问题建立模型,判断是否存在密码学API误用,由此实现基于机器学习的安卓密码学误用检测,能够快速有效的检测Android应用程序的密码学误用情况,有效识别Android应用程序密码学误用的潜在威胁。
Description
技术领域
本发明涉及一种Android应用程序密码学误用检测方法及装置,属于密码学误用检测技术领域。
背景技术
随着智能手机和互联网技术的发展,各种基于安卓系统的移动应用应运而生,对现代生活方式产生了深刻影响。安卓系统因为它的开源,开放等特性,已经成为了全球占有率最高的智能移动设备的操作系统。在实际Android应用程序的开发过程中,密码学API为开发者所广泛使用。借助Android系统的密码学API,开发者可自己实现数据的加解密和数字签名,同时,各互联网公司也提供了由自身开发的第三方加密库(例如Google的Tinkl6,Facebook的Conceal71)。然而,对于密码学API的广泛使用在改进应用程序安全属性的同时,也存在大量问题。
在安卓应用开发过程中由于开发者对于密码学知识运用不当,会使软件产生不安全因素,攻击者可以利用这些加密漏洞获取用户敏感信息等。现阶段在Android密码误用检测方面,基本采用静态和动态检测方法,但是,目前尚没有统一而完备的误用规则集合,能够对应用程序中存在的各种误用进行较全面的识别,并且此类方法基本上依赖固定的规则,容易产生假阴性和假阳性等误报,从而影响最终检测结果的准确性。
因此,需要提出一种新的Android应用程序密码学误用检测方法。
发明内容
为了解决上述问题,本发明提出了一种Android应用程序密码学误用检测方法及装置,能够检测Android应用程序密码学误用情况,有效识别Android应用程序密码学误用的潜在威胁。
本发明解决其技术问题采取的技术方案是:
第一方面,本发明实施例提供的一种Android应用程序密码学误用检测方法,包括以下步骤:
对待检测Android应用程序进行反编译,得到smali文件;
在smali代码中寻找和密码学算法相关的代码段,并做标签;
对获取的代码段数据进行特征提取,构建训练集;
利用训练集进行分类模型训练;
用训练好的分类模型检测Android应用程序,并输出密码学误用检测报告。
作为本实施例一种可能的实现方式,所述对待检测Android应用程序进行反编译,得到smali文件,包括:
利用apktool工具将Android应用程序进行反编译,得到smali文件,所述smali文件的代码包括了所有类的代码。
作为本实施例一种可能的实现方式,所述在smali代码中寻找和密码学算法相关的代码段,并做标签,包括:
对smali文件进行语法分析和词法分析,将smali文件中的smali语法抽象为smali语法树;
对smali语法树进行静态扫描,定位到关键密码算法实现过程的API,根据敏感API识别关键代码,利用前后向程序切片技术得到与密码学相关的代码段;
根据密码学规则为代码片段做分类。
作为本实施例一种可能的实现方式,所述对smali语法树进行静态扫描,定位到关键密码算法实现过程的API,根据敏感API识别关键代码,利用前后向程序切片技术得到与密码学相关的代码段,包括:
对smali语法树进行静态扫描,寻找java密码学库要使用的API,所述API为dofinal()函数;
以dofinal()函数为目标,使用程序切片技术,将dofinal()函数涉及到的相关变量的生成、赋值代码从代码库中剥离出来,获得和dofina1()相关的整个加密算法实现代码段,所述相关变量包括但不限于:加密算法实例、明文变量、密钥变量、初始向量变量。
作为本实施例一种可能的实现方式,所述根据密码学规则为代码片段做分类,包括:
分析代码段使用的密码算法、分组模式,所述密码算法包括AES算法、MD5算法、RSA算法,所述分组模式包括CBC分组模式和ECB分组模式;
判断代码段中使用的密码学算法是否安全,将安全的密码学算法标记“1”,不安全的密码学算法标记“0”。
作为本实施例一种可能的实现方式,所述对获取的代码段数据进行特征提取,构建训练集,包括:
构建语料库,对代码片段做分词处理,将代码行分成符号集,将所有的符号构建成语料库,每一行语料看作一个文本;
采用TF-IDF方法将整组代码片段转换为矩阵进行特征提取,构建训练集。
作为本实施例一种可能的实现方式,所述采用TF-IDF方法将整组代码片段转换为矩阵进行特征提取,构建训练集,包括:
采用TF-IDF方法将整组代码片段转换为矩阵,每个代码片段都被视为一个文档,调用CountVectorizer()函数将文本中的词汇转换成词频矩阵:
其中,tfd表示一个词在当前文章中出现的频率,td表示词语d在本文t中出现的频数,ta表示全文的文本数;
逆文档频率IDF为:
其中,N指语料库中的全部文档数,n指包含词语d的文档数;
调用函数TfidfTransformer(),把得到的词频矩阵作为输入,得到TF-IDF格式的输出:
通过fit_transform()拟合数据,将TF-IDF格式的输出转化为稀疏矩阵的标准形式化向量,得到的数据集作为训练集。
作为本实施例一种可能的实现方式,所述利用训练集进行分类模型训练,包括:
使用支持向量机分类器进行分类,构建一个二分类器;
使用交叉验证的方法来训练和验证二分类器,生成为每个类别的加密滥用训练不同的支持向量机分类器。
作为本实施例一种可能的实现方式,所述用训练好的分类模型检测Android应用程序,并输出密码学误用检测报告,包括:
将待识别的Android应用程序经过处理后输入到训练好的分类模型,分类模型输出密码学误用检测报告。
第二方面,本发明实施例提供的一种Android应用程序密码学误用检测装置,包括:
程序反编译模块,用于对待检测Android应用程序进行反编译,得到smali文件;
代码段寻找模块,用于在smali代码中寻找和密码学算法相关的代码段,并做标签;
特征提取模块,用于对获取的代码段数据进行特征提取,构建训练集;
模型训练模块,用于利用训练集进行分类模型训练;
密码学误用检测模块,用于利用训练好的分类模型检测Android应用程序,并输出密码学误用检测报告。
第三方面,本发明实施例提供的一种计算机设备,包括处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当所述计算机设备运行时,所述处理器与所述存储器之间通过总线通信,所述处理器执行所述机器可读指令,以执行如上述任意Android应用程序密码学误用检测方法的步骤。
第四方面,本发明实施例提供的一种存储介质,该存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如上述任意Android应用程序密码学误用检测方法的步骤。
本发明实施例的技术方案可以具有的有益效果如下:
本发明首先反编译APK文件,获得smali文件,再通过静态扫描定位到与密码学算法有关的API,利用程序切片技术获得与密码学相关的代码片段,为代码段标记密码学误用信息,然后利用TF-IDF方法提取特征并进行向量化处理,最后用支持向量机(SVM)构建多分类模型来进行分类。本发明基于Android应用程序密码学检测问题建立模型,判断是否存在密码学API误用,由此实现基于机器学习的安卓密码学误用检测,能够快速有效的检测Android应用程序的密码学误用情况,有效识别Android应用程序密码学误用的潜在威胁。
附图说明
图1是根据一示例性实施例示出的一种Android应用程序密码学误用检测方法的流程图;
图2是根据一示例性实施例示出的一种Android应用程序密码学误用检测装置的示意图;
图3是根据一示例性实施例示出的一种采用本发明所述装置进行Android应用程序密码学误用检测具体实施流程图。
具体实施方式
下面结合附图与实施例对本发明做进一步说明:
为能清楚说明本方案的技术特点,下面通过具体实施方式,并结合其附图,对本发明进行详细阐述。下文的公开提供了许多不同的实施例或例子用来实现本发明的不同结构。为了简化本发明的公开,下文中对特定例子的部件和设置进行描述。此外,本发明可以在不同例子中重复参考数字和/或字母。这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施例和/或设置之间的关系。应当注意,在附图中所图示的部件不一定按比例绘制。本发明省略了对公知组件和处理技术及工艺的描述以避免不必要地限制本发明。
如图1所示,本发明实施例提供的一种Android应用程序密码学误用检测方法,包括以下步骤:
对待检测Android应用程序进行反编译,得到smali文件;
在smali代码中寻找和密码学算法相关的代码段,并做标签;
对获取的代码段数据进行特征提取,构建训练集;
利用训练集进行分类模型训练;
用训练好的分类模型检测Android应用程序,并输出密码学误用检测报告。
作为本实施例一种可能的实现方式,所述对待检测Android应用程序进行反编译,得到smali文件,包括:
使用现有的Android应用程序逆向分析技术对待检测应用程序进行逆向处理,利用apktool工具将Android应用程序(APK)进行反编译,得到smali文件,所述smali文件的代码包括了所有类的代码。
作为本实施例一种可能的实现方式,所述在smali代码中寻找和密码学算法相关的代码段,并做标签,包括:
对逆向出的smali文件进行语法分析和词法分析,将smali文件中的smali语法抽象为smali语法树;
对smali语法树进行静态扫描,定位到关键密码算法实现过程的API,根据敏感API识别关键代码,利用前后向程序切片技术得到与密码学相关的代码段;
根据密码学规则为代码片段做分类。
作为本实施例一种可能的实现方式,所述对smali语法树进行静态扫描,定位到关键密码算法实现过程的API,根据敏感API识别关键代码,利用前后向程序切片技术得到与密码学相关的代码段,包括:
对smali语法树进行静态扫描,寻找java密码学库要使用的API,所述API为dofinal()函数;
以dofinal()函数为目标,使用程序切片技术,将dofinal()函数涉及到的相关变量的生成、赋值代码从代码库中剥离出来,获得和dofina1()相关的整个加密算法实现代码段,所述相关变量包括但不限于:加密算法实例、明文变量、密钥变量、初始向量变量。
作为本实施例一种可能的实现方式,所述根据密码学规则为代码片段做分类,包括:
分析代码段使用的密码算法、分组模式,所述密码算法包括AES算法、MD5算法、RSA算法,所述分组模式包括CBC分组模式和ECB分组模式;
判断代码段中使用的密码学算法是否安全,将安全的密码学算法标记“1”,不安全的密码学算法标记“0”。
作为本实施例一种可能的实现方式,所述对获取的代码段数据进行特征提取,构建训练集,包括:
构建语料库,对代码片段做分词处理,将代码行分成符号集,将所有的符号构建成语料库,每一行语料看作一个文本;
采用TF-IDF方法将整组代码片段转换为矩阵进行特征提取,构建训练集。
作为本实施例一种可能的实现方式,所述采用TF-IDF方法将整组代码片段转换为矩阵进行特征提取,构建训练集,包括:
采用TF-IDF方法将整组代码片段转换为矩阵,每个代码片段都被视为一个文档,调用CountVectorizer()函数将文本中的词汇转换成词频矩阵:
其中,tfd表示一个词在当前文章中出现的频率,td表示词语d在本文t中出现的频数,ta表示全文的文本数;
逆文档频率IDF为:
其中,N指语料库中的全部文档数,n指包含词语d的文档数;
调用函数TfidfTransformer(),把得到的词频矩阵作为输入,得到TF-IDF格式的输出:
通过fit_transform()拟合数据,将TF-IDF格式的输出转化为稀疏矩阵的标准形式化向量,得到的数据集作为训练集。
作为本实施例一种可能的实现方式,所述利用训练集进行分类模型训练,包括:
使用支持向量机(SVM)分类器进行分类,构建一个二分类器;
使用交叉验证的方法来训练和验证二分类器,生成为每个类别的加密滥用训练不同的支持向量机分类器。
作为本实施例一种可能的实现方式,所述用训练好的分类模型检测Android应用程序,并输出密码学误用检测报告,包括:
将待识别的Android应用程序经过处理后输入到训练好的分类模型,分类模型输出密码学误用检测报告。
如图2所示,本发明实施例提供的一种Android应用程序密码学误用检测装置,包括:
程序反编译模块,用于对待检测Android应用程序进行反编译,得到smali文件;
代码段寻找模块,用于在smali代码中寻找和密码学算法相关的代码段,并做标签;
特征提取模块,用于对获取的代码段数据进行特征提取,构建训练集;
模型训练模块,用于利用训练集进行分类模型训练;
密码学误用检测模块,用于利用训练好的分类模型检测Android应用程序,并输出密码学误用检测报告。
如图3所示,采用本发明所述装置进行Android应用程序密码学误用检测具体实施过程如下。
第一步、对待检测Android应用程序进行反编译。
1.1使用apktool工具进行反编译应用程序,在命令行输入命令“java-jarapktool.jar d-f example.apk”,得到该apk反编译后的文件,smali文件为重点分析对象。
1.2smali代码中包括了所有类的代码,可以当成代码库使用。
第二步、在逆向出的smali代码中寻找和密码学算法相关的代码段,并做标签。
2.1对smali文件进行语法分析和词法分析,将文件中的smali语法抽象为smali语法树。
2.2对smali语法树进行静态扫描,寻找java密码学库要使用的API:dofinal()函数,通过寻找该函数可以定位到一个密码学算法。
2.3以第2.2中定位到的dofinal()函数为目标,使用程序切片技术,可以使用Flowdroid静态分析工具进行这一步操作,目的是将dofinal()函数涉及到的相关变量的生成、赋值代码从代码库中剥离出来,此处涉及到的变量包括但不限于:加密算法实例、明文变量、密钥变量、初始向量变量。最后获得和dofina1()相关的整个加密算法实现代码段。
2.4分析代码段使用的密码算法、分组模式,例如AES算法、MD5算法、RSA算法、CBC分组模式、ECB分组模式等。然后判断代码段中使用的密码学算法是否安全。安全的标记“1”,不安全的标记“0”。
第三步、对获取的代码数据进行特征提取。
3.1本实施例构建语料库,对实验数据中的密码学相关代码段做分词处理,将代码行分成符号集,将所有的符号构建成语料库,每一行语料看作一个文本。
3.2采用TF-IDF方法将整组代码片段转换为矩阵,每个代码片段都被视为一个文档,我们要做的就是“文档-词频矩阵”。
TF:词频,每个词在文章中出现的频率。td表示词语d在本文t中出现的频数,ta表示全文的文本数。tfd表示一个词在当前文章中出现的频率。
IDF:逆文档频率,语料库所有的文档/含有该词的文档数目。其中N指语料库中的全部文档数,n指包含词语d的文档数。
TF-IDF实际上是:TF*IDF。
具体实施方式为先通过调用CountVectorizer()函数将文本中的词汇转换成词频矩阵,矩阵元素a[i][j]表示j词在第i个文本下的词频,再通过调用函数TfidfTransformer(),把得到的词频矩阵作为输入,得到TF-IDF格式的输出,然后通过fit_transform()拟合数据,将TF-IDF格式的输出转化为稀疏矩阵的标准形式化向量。得到的数据集就可以作为训练集提供给支持向量机(SVM)。
第四步、分类模型训练。
4.1本发明使用二元分类器支持向量机(SVM)作为我们的学习模型。在我们的方案中,标记的训练数据集包含两个类,即不安全和安全代码片段。获取到的代码片段可以被视为文档。我们认为,通过检查代码片段中的标记可以发现判别模式。给定一个由n个样本组成的训练数据集其对应的标签/>SVM分类器学习将训练样本最大限度地分为两类。目标函数可以公式化如下:
在公式(4)中,我们注意到最小化w等于最大化边距,C是惩罚因子,b表示超平面的位移量。SVM引入了一组松弛变量{ξi}来软化边缘,从而允许一小部分训练样本被错误分类。
4.2sklearn库提供四种常用核函数:
本发明通过对特征和样本数据进行分析,选择线性核函数作为本分类器的核函数。
4.3本发明具体实施,在进行分类前,首先要选择惩罚参数C和核函数参数g。为的是能够得到结果相对较优的参数,避免过程中出现过拟合(过学习)和欠拟合(欠学习)现象。本发明选择通过网格搜索+交叉验证的方法来获取最优超参数。网格搜索针对超参数组合列表中的每一个组合,实例化给定的模型,做cv次交叉验证,将平均得分最高的超参数组合作为最佳的选择,返回模型对象,也就是尝试各种可能的(C,g)对值,然后进行交叉验证,找出使交叉验证精确度最高的(C,g)对。本发明选择sklearn库提供的GridSearchCV()实现上述方法,使用linspace()函数来生成序列作为GridSearchCV()的参数’C’,最后经过交叉验证,得到本分类器的最优超参数。
第五步、密码学误用检测分析。
将待识别的Android应用程序经过第一、二、三步处理后,输入到第四步训练好的支持向量机模型,训练后的支持向量机模型对于输入特征向量,输出密码学误用检测报告。
本发明反编译APK文件,获得中间代码形式smali代码文件,再扫描smali语法树,根据密码学误用语法特征提取密码学相关代码切片,为代码切片标记密码学误用信息,将代码切片进行特征提取,转变为可以作为支持向量机模型学习的数据集,该数据集作为支持向量机模型的输入,用来训练预先构建的支持向量机模型,得到密码学加密误用检测模型,并基于密码学加密误用检测模型检测目标Android应用程序的密码学误用,本发明能够快速有效的检测Android应用程序的密码学误用情况。
本发明实施例提供的一种计算机设备,包括处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当所述装置运行时,所述处理器与所述存储器之间通过总线通信,所述处理器执行所述机器可读指令,以执行如上述任意Android应用程序密码学误用检测方法的步骤。
具体地,上述存储器和处理器能够为通用的存储器和处理器,这里不做具体限定,当处理器运行存储器存储的计算机程序时,能够执行上述Android应用程序密码学误用检测方法。
本领域技术人员可以理解,所述计算机设备的结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。
在一些实施例中,该计算机设备还可以包括触摸屏可用于显示图形用户界面(例如,应用程序的启动界面)和接收用户针对图形用户界面的操作(例如,针对应用程序的启动操作)。具体的触摸屏可包括显示面板和触控面板。其中显示面板可以采用LCD(LiquidCrystal Display,液晶显示器)、OLED(Organic Light-Emitting Diode,有机发光二极管)等形式来配置。触控面板可收集用户在其上或附近的接触或者非接触操作,并生成预先设定的操作指令,例如,用户使用手指、触笔等任何适合的物体或附件在触控面板上或在触控面板附近的操作。另外,触控面板可包括触摸检测装置和触摸控制器两个部分。其中,触摸检测装置检测用户的触摸方位、姿势,并检测触摸操作带来的信号,将信号传送给触摸控制器;触摸控制器从触摸检测装置上接收触摸信息,并将它转换成处理器能够处理的信息,再送给处理器,并能接收处理器发来的命令并加以执行。此外,可以采用电阻式、电容式、红外线以及表面声波等多种类型实现触控面板,也可以采用未来发展的任何技术实现触控面板。进一步的,触控面板可覆盖显示面板,用户可以根据显示面板显示的图形用户界面,在显示面板上覆盖的触控面板上或者附近进行操作,触控面板检测到在其上或附近的操作后,传送给处理器以确定用户输入,随后处理器响应于用户输入在显示面板上提供相应的视觉输出。另外,触控面板与显示面板可以作为两个独立的部件来实现也可以集成而来实现。
对应于上述应用程序的启动方法,本发明实施例还提供了一种存储介质,该存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如上述任意Android应用程序密码学误用检测方法的步骤。
本申请实施例所提供的应用程序的启动装置可以为设备上的特定硬件或者安装于设备上的软件或固件等。本申请实施例所提供的装置,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,前述描述的系统、装置和单元的具体工作过程,均可以参考上述方法实施例中的对应过程,在此不再赘述。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
在本申请所提供的实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
另外,在本申请提供的实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
最后应当说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员应当理解:依然可以对本发明的具体实施方式进行修改或者等同替换,而未脱离本发明精神和范围的任何修改或者等同替换,其均应涵盖在本发明的权利要求保护范围之内。
Claims (10)
1.一种Android应用程序密码学误用检测方法,其特征在于,包括以下步骤:
对待检测Android应用程序进行反编译,得到smali文件;
在smali代码中寻找和密码学算法相关的代码段,并做标签;
对获取的代码段数据进行特征提取,构建训练集;
利用训练集进行分类模型训练;
利用训练好的分类模型检测Android应用程序,并输出密码学误用检测报告。
2.根据权利要求1所述的Android应用程序密码学误用检测方法,其特征在于,所述在smali代码中寻找和密码学算法相关的代码段,并做标签,包括:
对smali文件进行语法分析和词法分析,将smali文件中的smali语法抽象为smali语法树;
对smali语法树进行静态扫描,定位到关键密码算法实现过程的API,根据敏感API识别关键代码,利用前后向程序切片技术得到与密码学相关的代码段;
根据密码学规则为代码片段做分类。
3.根据权利要求2所述的Android应用程序密码学误用检测方法,其特征在于,所述对smali语法树进行静态扫描,定位到关键密码算法实现过程的API,根据敏感API识别关键代码,利用前后向程序切片技术得到与密码学相关的代码段,包括:
对smali语法树进行静态扫描,寻找java密码学库要使用的API,所述API为dofinal()函数;
以dofinal()函数为目标,使用程序切片技术,将dofinal()函数涉及到的相关变量的生成、赋值代码从代码库中剥离出来,获得和dofina1()相关的整个加密算法实现代码段,所述相关变量包括但不限于:加密算法实例、明文变量、密钥变量、初始向量变量。
4.根据权利要求2所述的Android应用程序密码学误用检测方法,其特征在于,所述根据密码学规则为代码片段做分类,包括:
分析代码段使用的密码算法、分组模式,所述密码算法包括AES算法、MD5算法、RSA算法,所述分组模式包括CBC分组模式和ECB分组模式;
判断代码段中使用的密码学算法是否安全,将安全的密码学算法标记“1”,不安全的密码学算法标记“0”。
5.根据权利要求1所述的Android应用程序密码学误用检测方法,其特征在于,所述对获取的代码段数据进行特征提取,构建训练集,包括:
构建语料库,对代码片段做分词处理,将代码行分成符号集,将所有的符号构建成语料库,每一行语料看作一个文本;
采用TF-IDF方法将整组代码片段转换为矩阵进行特征提取,构建训练集。
6.根据权利要求5所述的Android应用程序密码学误用检测方法,其特征在于,所述采用TF-IDF方法将整组代码片段转换为矩阵进行特征提取,构建训练集,包括:
采用TF-IDF方法将整组代码片段转换为矩阵,每个代码片段都被视为一个文档,调用CountVectorizer()函数将文本中的词汇转换成词频矩阵:
其中,tfd表示一个词在当前文章中出现的频率,td表示词语d在本文t中出现的频数,ta表示全文的文本数;
逆文档频率IDF为:
其中,N指语料库中的全部文档数,n指包含词语d的文档数;
调用函数TfidfTransformer(),把得到的词频矩阵作为输入,得到TF-IDF格式的输出:
通过fit_transform()拟合数据,将TF-IDF格式的输出转化为稀疏矩阵的标准形式化向量,得到的数据集作为训练集。
7.根据权利要求1-6任意一项所述的Android应用程序密码学误用检测方法,其特征在于,所述利用训练集进行分类模型训练,包括:
使用支持向量机分类器进行分类,构建一个二分类器;
使用交叉验证的方法来训练和验证二分类器,生成为每个类别的加密滥用训练不同的支持向量机分类器。
8.一种Android应用程序密码学误用检测装置,其特征在于,包括:
程序反编译模块,用于对待检测Android应用程序进行反编译,得到smali文件;
代码段寻找模块,用于在smali代码中寻找和密码学算法相关的代码段,并做标签;
特征提取模块,用于对获取的代码段数据进行特征提取,构建训练集;
模型训练模块,用于利用训练集进行分类模型训练;
密码学误用检测模块,用于利用训练好的分类模型检测Android应用程序,并输出密码学误用检测报告。
9.一种计算机设备,其特征在于,包括处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当所述计算机设备运行时,所述处理器与所述存储器之间通过总线通信,所述处理器执行所述机器可读指令,以执行如权利要求1-7任一所述的Android应用程序密码学误用检测方法的步骤。
10.一种存储介质,其特征在于,该存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如权利要求1-7任一所述的Android应用程序密码学误用检测方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310080446.9A CN116302961A (zh) | 2023-01-31 | 2023-01-31 | Android应用程序密码学误用检测方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310080446.9A CN116302961A (zh) | 2023-01-31 | 2023-01-31 | Android应用程序密码学误用检测方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116302961A true CN116302961A (zh) | 2023-06-23 |
Family
ID=86826523
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310080446.9A Pending CN116302961A (zh) | 2023-01-31 | 2023-01-31 | Android应用程序密码学误用检测方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116302961A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117972759A (zh) * | 2024-03-29 | 2024-05-03 | 浙江金网信息产业股份有限公司 | 一种基于代码特征的加密方法 |
-
2023
- 2023-01-31 CN CN202310080446.9A patent/CN116302961A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117972759A (zh) * | 2024-03-29 | 2024-05-03 | 浙江金网信息产业股份有限公司 | 一种基于代码特征的加密方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Milosevic et al. | Machine learning aided Android malware classification | |
US11714905B2 (en) | Attribute relevance tagging in malware recognition | |
Jerlin et al. | A new malware detection system using machine learning techniques for API call sequences | |
Khoda et al. | Robust malware defense in industrial IoT applications using machine learning with selective adversarial samples | |
Alazab et al. | Malware detection based on structural and behavioural features of API calls | |
CN103473104B (zh) | 一种基于关键词上下文频率矩阵的应用重打包辨别方法 | |
Devesa et al. | Automatic behaviour-based analysis and classification system for malware detection | |
KR101858620B1 (ko) | 기계 학습을 이용한 자바스크립트 분석 장치 및 방법 | |
Narra et al. | Clustering versus SVM for malware detection | |
Zhu et al. | Android malware detection based on multi-head squeeze-and-excitation residual network | |
JP2012027710A (ja) | ソフトウェア検出方法及び装置及びプログラム | |
Jannat et al. | Analysis and detection of malware in Android applications using machine learning | |
EP4002174A1 (en) | Utilizing orchestration and augmented vulnerability triage for software security testing | |
Elkhawas et al. | Malware detection using opcode trigram sequence with SVM | |
Huang et al. | Open source intelligence for malicious behavior discovery and interpretation | |
US10878186B1 (en) | Content masking attacks against information-based services and defenses thereto | |
Wang et al. | TextDroid: Semantics-based detection of mobile malware using network flows | |
Takahashi et al. | Android application analysis using machine learning techniques | |
Abdullah et al. | Empirical study on intelligent android malware detection based on supervised machine learning | |
Anandhi et al. | Malware visualization and detection using DenseNets | |
CN112966713A (zh) | 基于深度学习的dga域名检测方法、装置及计算机设备 | |
Bakhshinejad et al. | Parallel‐CNN network for malware detection | |
Yan et al. | Automatic malware classification via PRICoLBP | |
CN116302961A (zh) | Android应用程序密码学误用检测方法及装置 | |
Okane et al. | Malware detection: program run length against detection rate |
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 |