CN114003867A - 一种代码混淆的校验方法、电子设备和存储介质 - Google Patents

一种代码混淆的校验方法、电子设备和存储介质 Download PDF

Info

Publication number
CN114003867A
CN114003867A CN202111248910.8A CN202111248910A CN114003867A CN 114003867 A CN114003867 A CN 114003867A CN 202111248910 A CN202111248910 A CN 202111248910A CN 114003867 A CN114003867 A CN 114003867A
Authority
CN
China
Prior art keywords
code
obfuscated
original
vulnerability
vector
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
CN202111248910.8A
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.)
Hangzhou Shufeng Technology Co ltd
Chengdu Ruima Technology Co ltd
Original Assignee
Hangzhou Shufeng Technology Co ltd
Chengdu Ruima Technology Co ltd
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 Hangzhou Shufeng Technology Co ltd, Chengdu Ruima Technology Co ltd filed Critical Hangzhou Shufeng Technology Co ltd
Priority to CN202111248910.8A priority Critical patent/CN114003867A/zh
Publication of CN114003867A publication Critical patent/CN114003867A/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/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/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computing Systems (AREA)
  • Stored Programmes (AREA)

Abstract

本发明涉及代码静态分析技术领域,公开了一种代码混淆的校验方法,对原始代码和/或混淆代码的代码段进行代码元素块的提取;从代码元素块中获取具有相互数据依赖和控制依赖的代码语句的集合形成代码片段,代码片段进一步编码形成代码向量,由混淆代码生成的代码向量需要满足两个条件才符合要求,条件一为:混淆代码与原始代码的功能相同;条件二为:混淆代码与原始代码相比较没有引入新的漏洞;两个条件中,任何一个条件不符合则将该段不合格混淆代码对应的原始代码重新输入代码混淆器,重新生成新的混淆代码后循环进行上述流程,直到两个条件均符合后才停止。本发明具有保证混淆代码与原始代码功能一致、避免引入代码漏洞的效果。

Description

一种代码混淆的校验方法、电子设备和存储介质
技术领域
本发明涉及代码静态分析技术领域,具体的说,是一种代码混淆的校验方法、电子设备和存储介质,用于对混淆代码进行校验。
背景技术
为了对完成构件、调试和部署应用程序的所有工作之后的代码进行保护,经常会用到代码混淆操作。常见的代码混淆方式,如将代码中的各种元素,如变量、函数、类的名字改写成无意义的名字。比如改写成单个字母或是简短的无意义的字母组合,甚至改写成“_”这样的符号,使得阅读的人无法根据名字猜测其用途。或者使用宏定义。避免被逆向处函数名、对应的功能等。或者使用代码混淆器,进行死代码注入、变换数据流、变换控制流等方式,进行代码混淆。然而,改写元素的方式和使用宏定义的方式,很容易破解;使用代码混淆的方式,很可能将原始代码的功能破坏,甚至会引入其他代码漏洞的风险。
现有专利一申请号为CN201810519622.3,发明名称为:基于Bi-LSTM和文本相似性的漏洞检测方法,该方案的主要实现方案为:
1.通过敏感函数对文本文件切片得到代码段;
2.对代码段通过分词算法处理得到单词从而生成用于组成文本向量的字典;
3.通过字典将文本转化为词向量字典作为训练样本对Bi-LSTM模型进行训练,从而得到漏洞的文本性特征以及模型参数;
4.通过最终得到的LSTM模型进行待测源码的漏洞判断。
现有专利二申请号为CN202011256543.1,发明名称为:一种基于深度学习的自动化漏洞挖掘方法,该方案的主要实现方案为:
1.生成漏洞数据库;
2.生成深度学习模型;
3.确定该应用程序所包括的待检测对象,以待检测对象为目标设置测试参数,得到测试对象;
4.向应用程序发送针对测试对象的测试请求,依据响应结果来进行测试;
5.确定源代码数据类型;
6.对代码的静态特征进行静态分析和学习;
7.通过动态分析对静态分析的分析结果进行校正;
8.进行漏洞挖掘;
9.根据挖掘结果判断是否存在漏洞;
10.完善深度学习模型。
上述方案尚存缺陷:
1、上述专利一采用的漏洞代码库为从CVE数据库中搜集得到的CVE-119,CVE-120缓冲区溢出代码,漏洞类型有限。
2、上述专利一采用的模型检测出的漏洞是否为可利用漏洞,由人工判定完成。
3、上述专利一采用与100个漏洞文件进行相似度判断再通过投票的形式判断是否为漏洞文件,容易出现漏报误报,且难以判断具体的漏洞类型。
4、上述专利一存在较多人工复核的工作。
5、上述专利二没有将代码表征为向量,而是对代码经过静态分析与动态分析得到的结果送入深度学习模型,这样会导致代码层面语义信息的丢失。
为增大混淆后的代码的不可读性、模糊性,同时又保证正常功能不受影响,整体项目不引入外在的代码漏洞风险,本专利提出一种代码混淆的校验方法、电子设备和存储介质。
发明内容
针对上述的现有技术的代码混淆方法易偏离原有代码功能、引入其他代码漏洞的风险,本发明的目的在于提供一种代码混淆的校验方法、电子设备和存储介质,使用语义的代码混淆方法,对经过代码混淆后的程序进行代码功能检测,判断代码混淆后的程序是否与原始代码在功能上保持一致,具有避免引入代码漏洞的效果。
本发明通过下述技术方案实现:
一种代码混淆的校验方法,包括以下步骤:
步骤S1:获取具有原始代码和/或混淆代码的完整功能的代码段;
步骤S2:将所述代码段以抽象语法树的形式构建为代码元素块;
步骤S3:将所述代码元素块中相互具有控制依赖、数据依赖的语句集合并生成代码片段;
步骤S4:将所述代码片段编码为代码向量,获得原始代码的代码向量和混淆代码的代码向量;
步骤S5:判断混淆代码是否与原始代码具有相同功能;
所述步骤S5具体是指,向BGRU分类器Ⅰ中输入原始代码的代码向量进行训练,并输出原始代码所具有的功能对应的标签A;BGRU分类器Ⅰ中输入混淆代码的代码向量进行检测,并输出混淆代码所具有的功能对应的标签B;在BGRU分类器Ⅰ中对比原始代码所具有的功能对应的标签A和混淆代码所具有的功能的对应的标签B,若相同则输出混淆代码的代码向量;若不同则输出该段混淆代码对应的原始代码进入代码混淆器重新生成混淆代码后,再依次按照步骤S1~步骤S4进行处理;
步骤S6:判断混淆代码是否存在漏洞;
所述步骤S6具体是指,向BGRU分类器Ⅱ中输入漏洞代码的代码向量进行训练,漏洞代码的漏洞类型作为BGRU分类器Ⅱ的输出;BGRU分类器Ⅱ获取步骤S5中输出的混淆代码的代码向量,并对混淆代码的代码向量进行漏洞检测,检测无漏洞则输出检测结果;检测有漏洞则将该段混淆代码对应的原始代码重新输入代码混淆器重新生成混淆代码后,再依次按照步骤S1~步骤S5进行处理;同时BGRU分类器Ⅱ将有漏洞的混淆代码的代码向量的漏洞类型,与漏洞代码的漏洞类型进行对比并输出混淆代码的漏洞类型;若不属于,BGRU分类器Ⅱ输出漏洞结果“unknow”。
为了更好地实现本发明,进一步地,所述步骤S2中,所述抽象语法树包括根节点、叶子节点和中间节点;所述根节点为所述代码段中的函数、所述叶子节点为所述代码段中的变量、所述中间节点为所述代码段中的语句或连续的变量。
为了更好地实现本发明,进一步地,所述步骤S4中,所述的编码过程具体是指包括:先删除所述代码片段中的不合法字符,再将所述代码的片段中的函数和变量名进行映射标准化;再将所述代码片段中的每个单词嵌入成固定长度的向量,并将所述代码片段的各个单词的向量集合为代码向量。
一种电子设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器调用所述存储器中的计算机程序时,实现如权利要求1至3任一项所述代码混淆的校验方法的步骤。
一种存储介质,所述存储介质中存储有计算机可执行指令,所述计算机可执行指令被处理器加载并执行时,实现如上述权利要求1至3任一项所述代码混淆的校验方法的步骤。
本发明与现有技术相比,具有以下优点及有益效果:
本发明能够对混淆代码进行校验,防止混淆代码与原始代码功能不一致,同时,能够防止混淆代码引入代码漏洞。
附图说明
下面将结合附图对技术方案进行清楚、完整地描述,显然所描述的实施例是本发明一部分实施例,而不是全部的实施例。
图1为本发明提供的一种代码混淆的校验方法的逻辑框图;
图2为本发明步骤S5的流程示意图;
图3为本发明步骤S6的流程结构示意图。
具体实施方式
以下结合实施例的具体实施方式,对本发明创造的上述内容再做进一步的详细说明。但不应将此理解为本发明上述主题的范围仅限于以下的实例。在不脱离本发明上述技术思想情况下,根据本领域普通技术知识和惯用手段作出的各种替换或变更,均应包括在本发明的范围内。
实施例1:
本实施例的一种代码混淆的校验方法,如图1-图3所示,获取代码向量过程中,受到图像处理中候选区域概念的启发,采用代码语句的集合作为候选区域,并使用滑动窗口,对原始代码和/或混淆代码的代码段进行代码元素块的提取;从代码元素块中获取具有相互数据依赖和控制依赖的代码语句的集合,形成代码片段,代码片段进一步编码形成的代码向量。由混淆代码生成的代码向量需要满足两个条件才能证明混淆代码符合要求,其中条件一为:混淆代码与原始代码的功能相同;条件二为:混淆代码与原始代码相比较没有引入新的漏洞。
具体实施包括以下步骤:
步骤S1:获取具有原始代码和混淆代码的完整功能的代码段;
步骤S2:将所述代码段以抽象语法树的形式构建为代码元素块;
步骤S3:将所述代码元素块中相互具有控制依赖、数据依赖的语句集合并生成代码片段;
步骤S4:将所述代码片段编码为代码向量,获得原始代码的代码向量和混淆代码的代码向量;
步骤S5:判断混淆代码是否与原始代码具有相同功能;
所述步骤S5具体是指,向BGRU分类器Ⅰ中输入原始代码的代码向量进行训练,并输出原始代码所具有的功能对应的标签A;BGRU分类器Ⅰ中输入混淆代码的代码向量进行检测,并输出混淆代码所具有的功能对应的标签B;在BGRU分类器Ⅰ中对比原始代码所具有的功能对应的标签A和混淆代码所具有的功能对应的标签B,若相同则输出混淆代码的代码向量;若不同则输出该段混淆代码对应的原始代码进入代码混淆器重新生成混淆代码后,再依次按照步骤S1~步骤S4进行处理;
步骤S6:判断混淆代码是否存在漏洞;
BGRU分类器Ⅱ中输入漏洞代码的代码向量进行训练,漏洞代码的漏洞类型作为BGRU分类器Ⅱ的输出;BGRU分类器Ⅱ获取步骤S5中输出的混淆代码的代码向量,并对混淆代码的代码向量进行漏洞检测,检测无漏洞则输出检测结果;检测有漏洞则将该段混淆代码对应的原始代码重新输入代码混淆器重新生成混淆代码后,再依次按照步骤S1~步骤S5进行处理;同时BGRU分类器Ⅱ将有漏洞的混淆代码的代码向量的漏洞类型,与漏洞代码的漏洞类型进行对比并输出混淆代码的漏洞类型;若不属于,BGRU分类器Ⅱ输出漏洞结果“unknow”。
本实施的步骤S5中,将原始代码选代码向量和混淆代码的代码向量作为BGRU分类器Ⅰ的输入,如果混淆代码和原始代码具有有相同功能,则标签为同一类,满足条件一,并将该段混淆代码的代码向量输入步骤S6中的BGRU分类的Ⅱ;如有差异功能,则标签为不同类别,并将该段混淆代码的代码向量对应的原始代码重新输入代码混淆器,再次生成混淆代码后,依次按照步骤S1~步骤S4进行;
步骤S6中将公开的漏洞代码的代码向量输入BGRU分类器Ⅱ,漏洞代码的漏洞类型作为该漏洞代码的标签,训练BGRU分类器Ⅱ;训练完成后,将混淆代码的代码向量作为输入,如输出无漏洞结构,则该段混淆代码满足条件二,则该段混淆代码最终符合要求;检测出有漏洞则将该段混淆代码对应的原始代码重新输入代码混淆器后生成新的混淆代码,并将新的混淆代码按照步骤S1~步骤S5依次进行。
实施例2:
本实施例在实施例1的基础上做进一步优化,步骤S2中,所述步骤S2中,所述抽象语法树包括根节点、叶子节点和中间节点;所述根节点为所述代码段中的函数、所述叶子节点为所述代码段中的变量、所述中间节点为所述代码段中的语句或连续的变量。
步骤S4中,所述编码过程包括:删除所述代码片段中的不合法字符,再将所述代码的片段中的函数和变量名进行映射标准化;再将所述代码片段中的每个单词嵌入成固定长度的向量,并将所述代码片段的各个单词的向量集合为代码向量。
本实施例的其他部分与实施例1相同,故不再赘述。
实施例3:
一种电子设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器调用所述存储器中的计算机程序时,实现实施例1或2中的代码混淆的校验方法的步骤。
实施例4:
本实施例在上述实施例1的基础上做进一步优化,一种存储介质,所述存储介质中存储有计算机可执行指令,所述计算机可执行指令被处理器加载并执行时,实现实施例1或2中的代码混淆的校验方法的步骤。
以上所述,仅是本发明的较佳实施例,并非对本发明做任何形式上的限制,凡是依据本发明的技术实质对以上实施例所做的任何简单修改、等同变化,均落入本发明的保护范围之内。

Claims (5)

1.一种代码混淆的校验方法,其特征在于:包括以下步骤:
步骤S1:获取具有原始代码和混淆代码的完整功能的代码段;
步骤S2:将所述代码段以抽象语法树的形式构建为代码元素块;
步骤S3:将所述代码元素块中相互具有控制依赖、数据依赖的语句集合并生成代码片段;
步骤S4:将所述代码片段编码为代码向量,获得原始代码的代码向量和混淆代码的代码向量;
步骤S5:判断混淆代码是否与原始代码具有相同功能;所述步骤S5具体是指,向BGRU分类器Ⅰ中输入原始代码的代码向量进行训练,并输出原始代码所具有的功能对应的标签A;BGRU分类器Ⅰ中输入混淆代码的代码向量进行检测,并输出混淆代码所具有的功能对应的标签B;在BGRU分类器Ⅰ中对比原始代码所具有的功能对应的标签A和混淆代码所具有的功能对应的标签B,若相同则输出混淆代码的代码向量;若不同则输出该段混淆代码对应的原始代码进入代码混淆器重新生成混淆代码后,再依次按照步骤S1~步骤S4进行处理;
步骤S6:判断混淆代码是否存在漏洞;
所述步骤S6具体是指,向BGRU分类器Ⅱ中输入漏洞代码的代码向量进行训练,漏洞代码的漏洞类型作为BGRU分类器Ⅱ的输出;BGRU分类器Ⅱ获取步骤S5中输出的混淆代码的代码向量,并对混淆代码的代码向量进行漏洞检测,检测无漏洞则输出检测结果;检测有漏洞则将该段混淆代码对应的原始代码重新输入代码混淆器重新生成混淆代码后,再依次按照步骤S1~步骤S5进行处理;同时BGRU分类器Ⅱ将有漏洞的混淆代码的代码向量的漏洞类型,与漏洞代码的漏洞类型进行对比并输出混淆代码的漏洞类型;若不属于,BGRU分类器Ⅱ输出漏洞结果“unknow”。
2.根据权利要求1所述的一种代码混淆的校验方法,其特征在于:所述步骤S2中,所述抽象语法树包括根节点、叶子节点和中间节点;所述根节点为所述代码段中的函数、所述叶子节点为所述代码段中的变量、所述中间节点为所述代码段中的语句或连续的变量。
3.根据权利要求1或2所述的一种代码混淆的校验方法,其特征在于:所述步骤S4中的编码过程具体是指:先删除所述代码片段中的不合法字符,再将所述代码的片段中的函数和变量名进行映射标准化;再将所述代码片段中的每个单词嵌入成固定长度的向量,并将所述代码片段的各个单词的向量集合为代码向量。
4.一种电子设备,其特征在于:包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器调用所述存储器中的计算机程序时,实现如权利要求1至3任一项所述代码混淆的校验方法的步骤。
5.一种存储介质,其特征在于:所述存储介质中存储有计算机可执行指令,所述计算机可执行指令被处理器加载并执行时,实现如上述权利要求1至3任一项所述代码混淆的校验方法的步骤。
CN202111248910.8A 2021-10-26 2021-10-26 一种代码混淆的校验方法、电子设备和存储介质 Pending CN114003867A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111248910.8A CN114003867A (zh) 2021-10-26 2021-10-26 一种代码混淆的校验方法、电子设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111248910.8A CN114003867A (zh) 2021-10-26 2021-10-26 一种代码混淆的校验方法、电子设备和存储介质

Publications (1)

Publication Number Publication Date
CN114003867A true CN114003867A (zh) 2022-02-01

Family

ID=79924204

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111248910.8A Pending CN114003867A (zh) 2021-10-26 2021-10-26 一种代码混淆的校验方法、电子设备和存储介质

Country Status (1)

Country Link
CN (1) CN114003867A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116049835A (zh) * 2023-03-08 2023-05-02 中汽智联技术有限公司 汽车固件的安全漏洞检测方法、设备和存储介质

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116049835A (zh) * 2023-03-08 2023-05-02 中汽智联技术有限公司 汽车固件的安全漏洞检测方法、设备和存储介质

Similar Documents

Publication Publication Date Title
US9141806B2 (en) Mining source code for violations of programming rules
CN117951701A (zh) 用于确定软件代码中的缺陷和漏洞的方法
CN110909348B (zh) 一种内部威胁检测方法及装置
CN114297654A (zh) 一种源代码层级的智能合约漏洞检测方法及系统
Saccente et al. Project achilles: A prototype tool for static method-level vulnerability detection of Java source code using a recurrent neural network
US8572747B2 (en) Policy-driven detection and verification of methods such as sanitizers and validators
CN112651028B (zh) 基于上下文语义和补丁验证的漏洞代码克隆检测方法
CN107862327B (zh) 一种基于多特征的安全缺陷识别系统和方法
CN111428236A (zh) 一种恶意软件的检测方法、装置、设备及可读介质
CN116383833A (zh) 软件程序代码的测试方法及其装置、电子设备、存储介质
CN110287700B (zh) 一种iOS应用安全分析方法及装置
CN114003867A (zh) 一种代码混淆的校验方法、电子设备和存储介质
CN112817877B (zh) 异常脚本检测方法、装置、计算机设备和存储介质
CN105468972B (zh) 一种移动终端文件检测方法
CN105243327B (zh) 一种文件安全处理方法
CN116702160B (zh) 一种基于数据依赖增强程序切片的源代码漏洞检测方法
CN111143858B (zh) 数据检查方法及装置
CN110287722B (zh) iOS应用中用于隐私条例检查的敏感权限提取方法
CN115688107A (zh) 一种涉诈app检测系统和方法
Periyasamy et al. Prediction of future vulnerability discovery in software applications using vulnerability syntax tree (PFVD-VST).
RU168346U1 (ru) Устройство выявления уязвимостей
CN112464237B (zh) 一种静态代码安全诊断方法及装置
CN112163217B (zh) 恶意软件变种识别方法、装置、设备及计算机存储介质
CN114143074A (zh) webshell攻击识别装置及方法
Patil et al. Impact of PCA Feature Extraction Method used in Malware Detection for Security Enhancement

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