CN111475809B - 脚本混淆检测方法、装置、计算机设备和存储介质 - Google Patents
脚本混淆检测方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN111475809B CN111475809B CN202010271728.3A CN202010271728A CN111475809B CN 111475809 B CN111475809 B CN 111475809B CN 202010271728 A CN202010271728 A CN 202010271728A CN 111475809 B CN111475809 B CN 111475809B
- Authority
- CN
- China
- Prior art keywords
- node
- script
- confused
- nodes
- confusion
- 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.)
- Active
Links
- 238000013515 script Methods 0.000 title claims abstract description 178
- 238000001514 detection method Methods 0.000 title claims abstract description 74
- 238000000034 method Methods 0.000 claims abstract description 50
- 230000014509 gene expression Effects 0.000 claims description 19
- 238000004590 computer program Methods 0.000 claims description 15
- 230000008569 process Effects 0.000 claims description 9
- 238000010801 machine learning Methods 0.000 abstract description 5
- 238000005516 engineering process Methods 0.000 abstract description 4
- 238000011160 research Methods 0.000 abstract description 3
- 238000010586 diagram Methods 0.000 description 10
- 238000004364 calculation method Methods 0.000 description 5
- 230000003068 static effect Effects 0.000 description 5
- 230000006870 function Effects 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000009795 derivation Methods 0.000 description 2
- 239000012634 fragment Substances 0.000 description 2
- 230000006698 induction Effects 0.000 description 2
- 150000001875 compounds Chemical class 0.000 description 1
- 239000000470 constituent Substances 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 238000007689 inspection Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
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/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
- G06F21/563—Static detection by source code analysis
-
- 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/41—Compilation
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本申请涉及一种脚本混淆检测方法、装置、计算机设备和存储介质。所述脚本混淆检测方法基于对混淆本身的研究和归纳,将待检测脚本抽象为抽象语法树,然后确定顶层单独节点以及各个顶层单独节点的节点权重,并判断抽象语法树中各个顶层单独节点的混淆是否被混淆,并根据所有被混淆的顶层单独节点的节点权重计算待待检测脚本的混淆分数以判断该待检测脚本是否混淆。与现有基于机器学习的脚本混淆检测方法相比,不受学习方法和学习样本影响,能够检测未知混淆技术。
Description
技术领域
本申请涉及信息安全技术领域,特别是涉及一种脚本混淆检测方法、装置、计算机设备和存储介质。
背景技术
在网络安全领域,脚本攻击是常见的攻击手段之一。包括JavaScript、VBScript、PowerShell(三种脚本语言的名称)在内的多种脚本语言具有功能强大、易于执行等优点,被广泛用于各式网络攻击中。近91%的成功攻击都涉及攻击脚本。为了应对此类威胁,静态检测方法被广泛采用。静态特征多通过手工或者机器学习的方法提取。
然而这些脚本语言都有动态执行的能力,即真实代码可以在被执行的过程中动态生成。该特点致使攻击脚本的静态特征容易改变,针对静态特征的检测手段容易被绕过,使得利用脚本的攻击难以被识别和防御,而这种单纯改变静态特征的方法被称为字符层混淆(区别于逻辑混淆,且下文简称字符层混淆为混淆)。同时,合法脚本多不会采用混淆方法;而解除脚本混淆的首步就是检测混淆。因此,检测脚本是否被混淆成为亟需解决的问题。
PSDEM人工地分析了多种PowerShell混淆方法,并针对不同的混淆方法提出了对应的检测方案,但该方法不具备普适性,且检测的误报率较高;JSDES针对JavaScript提出了面向函数的混淆检测方法,显然其不具备检测函数内混淆的能力,因此同样不具备普适性;公开号为CN110750789A的专利申请提出了基于抽象语法树的混淆检测方法,然而其方法依赖于机器学习,具有样本量局限且无法适用于未知混淆检测的问题。
如上所述,提供一种普适性高、检测可靠性高的脚本混淆检测方法成为亟待解决的问题。
在所述背景技术部分公开的上述信息仅用于加强对本公开的背景的理解,因此它可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
针对现有的脚本混淆方法普适性差、检测效率低的问题,本发明提供了一种解混淆方法、装置、计算机设备和存储介质。
一种脚本混淆检测方法,包括如下步骤:
生成待检测脚本的抽象语法树;
计算所述抽象语法树中各个节点的权重;
确定抽象语法树中顶层单独节点,所述顶层单独节点为父节点和祖节点均对应程序片段且自身不对应程序片段的节点;
根据各个顶层单独节点的子节点是否对应动态执行命令以及子树中节点的类型判断各个顶层单独节点是否被混淆;
根据所有被混淆的顶层单独节点的节点权重计算待检测脚本的混淆分数,并根据计算得到的混淆分数判断所述待检测脚本是否混淆。
另一种脚本混淆检测方法,包括如下步骤:
生成待检测脚本的抽象语法树;
遍历所述的抽象语法树,在遍历过程中,针对每一个被遍历的节点进行如下操作:
计算该节点在所述抽象语法树中的权重;
根据该节点的父节点和祖节点对应的语句类型判断当前节点是否为顶层单独节点,所述顶层单独节点为父节点和祖节点均对应程序片段且自身不对应程序片段的节点;
根据判断结果进行如下操作:
若为顶层单独节点,则根据当前顶层单独节点的子节点是否对应动态执行命令以及子树中节点的类型判断当前顶层单独节点是否被混淆;
否则,遍历下一个节点;
根据所有被混淆的顶层单独节点的节点权重计算待检测脚本的混淆分数,并根据计算得到的混淆分数判断所述待检测脚本是否混淆。
作为优选,所述遍历所述抽象语法树时采用深度优先的方式遍历所述抽象语法树。
作为优选,所述的遍历所述抽象语法树时,若判断当前节点为顶层单独节点,则停止遍历该当前节点的子树中的节点。
作为优选,所述计算所述抽象语法树中各个节点的权重包括根据各个节点对应的语句占整个待检测脚本的权重;
或者,
设定根节点的权重为1;对于任意一个节点,若其权重为ws,子节点的数量为n,则该节点对应的各个子节点权重为ws/n。
作为优选,所述判断当前顶层单独节点是否被混淆包括:
判断当前顶层单独节点的子节点是否对应动态执行命令;
根据判断结果进行如下操作:
若对应动态执行命令,则继续判断当前顶层单独节点的子树中是否存在变量节点,如果有则认为当前顶层单独节点被混淆,否则认为当前顶层单独节点无混淆;
否则,则继续判断当前顶层单独节点的子树中是否存在表达式节点,若存在,则认为当前顶层单独节点被混淆;否则认为无混淆。
作为优选,所述判断当前顶层单独节点的子树中是否存在表达式节点和/或变量节点时采用基于广度优先的方式遍历当前顶层单独节点的子树进行。
作为优选,所述根据所有被混淆的顶层单独节点的节点权重计算待检测脚本的混淆分数包括:求取所有被混淆的顶层单独节点的节点权重之和作为待检测脚本的混淆分数。
作为优选,所述根据所有被混淆的顶层单独节点的节点权重计算待检测脚本的混淆分数以判断待检测脚本是否混淆包括:将待检测脚本的混淆分数与预设的阈值比较,则待检测脚本的混淆分数小于预设的阈值,则认为待检测脚本无混淆;否则,认为待检测脚本被混淆。
一种脚本混淆检测装置,包括:
第一模块,用于生成待检测脚本的抽象语法树;
第二模块,用于根据各个节点对应的语句占整个待检测脚本的权重计算所述抽象语法树中各个节点的权重;
第三模块,用于确定抽象语法树中顶层单独节点,所述顶层单独节点为父节点和祖节点均为程序片段且自身不对应程序片段的节点;
第四模块,用于根据当前顶层单独节点的子节点是否对应动态执行命令以及子树中节点的类型判断当前顶层单独节点是否被混淆;
第五模块,用于根据所有被混淆的顶层单独节点的节点权重计算待检测脚本的混淆分数以判断待检测脚本是否混淆。
另一种脚本混淆检测装置,包括:
第六模块,用于生成待检测脚本的抽象语法树;
第七模块,用于遍历所述的抽象语法树,在遍历过程中,针对每一个被遍历的节点进行如下操作:
计算该节点在所述抽象语法树中的权重;
根据该节点的父节点和祖节点对应的语句类型判断当前节点是否为顶层单独节点,所述顶层单独节点为父节点和祖节点均对应程序片段且自身不对应程序片段的节点;
根据判断结果进行如下操作:
若为顶层单独节点,则根据当前顶层单独节点的子节点是否对应动态执行命令以及子树中节点的类型判断当前顶层单独节点是否被混淆;
否则,遍历下一个节点;
第八模块,用于根据所有被混淆的顶层单独节点的节点权重计算待检测脚本的混淆分数以判断待检测脚本是否混淆。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述脚本混淆检测方法的步骤。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述脚本混淆检测方法的步骤。
上述脚本混淆检测方法、装置、计算机设备和存储介质,基于对混淆本身的研究和归纳,将待检测脚本抽象为抽象语法树,然后确定顶层单独节点以及各个顶层单独节点的节点权重,并判断抽象语法树中各个顶层单独节点的混淆是否被混淆,并根据所有被混淆的顶层单独节点的节点权重计算待待检测脚本的混淆分数以判断该待检测脚本是否混淆。与现有基于机器学习的脚本混淆检测方法相比,不受学习方法和学习样本影响,能够检测未知混淆技术。
附图说明
图1为一个实施例中脚本混淆检测方法的流程示意图;
图2为一未混淆的抽象语法树;
图3为图2所示抽象语法树拆分混淆的示意图;
图4为图2所示抽象语法树加深混淆的示意图;
图5为图2所示抽象语法树聚合混淆的示意图;
图6为另一个实施例中脚本混淆检测方法的流程示意图;
图7为另一个实施例中脚本混淆检测方法的流程示意图;
图8为一个实施例中脚本混淆检测装置的结构框图;
图9为另一个实施例中脚本混淆检测装置的结构框图;
图10为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本发明基于如下定义进行:
1、单独语句:代表了单独的语句,包括参数、变量、表达式等,具有完整的语义,例如,函数1(参数1,参数2);
2、复合语句:与单独语句对应,其包含两个及以上单独语句和其他操作符,例如赋值语句中左值和右值皆为单独语句,语句1=语句2;
3、顶层单独语句:指其父节点及祖父节皆为程序片段,且自身不是程序片段。
4、表达式语句:可执行语句,含有变量及运算符等,可以称为单独语句,也可作为语句的部分;
5、动态执行命令:通过该命令,可以把字符串数据视作命令,进行执行。
本发明的一实施例提供了一种脚本混淆检测方法,如图1所示,包括以下步骤:
S101,生成待检测脚本的抽象语法树。
抽象语法树是句子结构的图形表示,它代表了句子的推导结果,有利于理解句子语法结构的层次。简单说,语法树就是按照某一规则进行推导时所形成的树。
示例性的,从原始脚本(待检测脚本)生成抽象语法树,依赖于脚本语言本身,可以借助对应脚本语言的语法分析器,识别出脚本中每个对象的语法成分,包括语句类型、变量、运算符等;生成的抽象语法树为树形结构,子节点为父节点的组成成分,具有不同的节点类型,共同描述了输入脚本的语法成分。
S102,计算所述抽象语法树中各个节点的权重。
示例性的,根据父节点对应子节点数量计算所述抽象语法树中各个节点的权重包括:
设定根节点的权重为1;对于任意一个节点,若其权重为ws,子节点的数量为n,则该节点对应的各个子节点权重为ws/n。
示例性的,根据各个节点对应的语句占整个待检测脚本的权重计算所述抽象语法树中各个节点的权重。示例性的,根据节点对应语句条数(行数)占脚本总行数的比例;或者,根据节点对应语句字节数占脚本总字节数的比例。
采用基于行数占比的方法适用于Token-level混淆的检测。采用字节数占比的方法适用于ScriptBlock-level的混淆检测。本实施例中优选基于根节点对应子节点的数量确定子节点的权重,优点在于不影响检测准确性的前提下普适性广,计算速度快。
S103,确定抽象语法树中顶层单独节点,所述顶层单独节点为父节点和祖节点均为程序片段且自身不对应程序片段的节点。
具体的,根据节点的父节点和祖节点的对应语句是否为程序片段来判断。
S104,根据各个顶层单独节点的子节点是否对应动态执行命令以及子树中节点的类型判断各个顶层单独节点是否被混淆;
对于计算机语言,一般来讲会把二进制内容分为指令和数据;对于脚本语言,其执行的脚本可以通过动态构造的方式被产生;即本来应该是数据的二进制被作为指令执行。这里需要有特殊的命令告诉编译器/解释器哪些数据应被作为指令执行,这些特殊的命令即动态执行命令。
抽象语法树与脚本是完全对应的,顶层单独节点则为原始脚本中的单个语句。人类和检测程序在识别脚本的语义时,可以理解为从抽象语法树的顶端往下看。混淆的目的是隐藏脚本的真实语义,即通过改变抽象语法树浅层节点的结构,使改变后的节点与源节点大相径庭,且语义识别变得困难。改变抽象语法树的方法有三种,三种混淆方式具体如表1所示。以图2所示为原始未混淆的抽象语法树,经过三种混淆方式后对应的抽象语法树分别如图3~图5所示进行说明。
图2所示为拥有三条命令的脚本简化后的抽象语法树,图中节点1为根节点,对应整个脚本(片段),节点2、3、4为顶层单独节点。
图3所示拆分混淆示意图,将图2中节点3进行拆分混淆,混淆后产生了节点A、B、C、D、E、F;其中节点3为混淆后的节点,与图2中节点3等价但不相同;其中C和E为变量节点,其值分别对应A和B。
图4为加深混淆示意图,将图2中节点3进行加深混淆,混淆后产生了节点G、H;在此基础上,对节点G进行混淆,产生了I、J节点。
图5为聚合混淆示意图,将图2中节点2、3、4进行混淆,混淆后产生了节点K,L,2_3_4;通过执行节点2_3_4中的代码,可以还原原始节点2、3、4。
表1
基于上述三种混淆方式的特点,可以看出,节点被混淆总共有两种情况:1、子树有表达式节点即可;2、动态执行命令+变量、常量(或者动态执行命令+达式节点)。当存在动态执行命令时,被混淆的顶层单独节点的子树中应具有对应变量或者常量的节点(子树节点)。以PowerShell语言为例,在PowerShell中子树节点类型总共有71种,其中6种类型的节点对应变量或者常量。因此,可以根据子树中节点的类型来判断子树中是否存在对应变量或者常量的节点。
S105,根据所有被混淆的顶层单独节点的节点权重计算待检测脚本的混淆分数,并根据计算得到的混淆分数判断所述待检测脚本是否混淆。
所述的根据所有被混淆的顶层单独节点的节点权重计算待检测脚本的混淆分数可以将所有顶层单独节点的节点权重之和作为待检测脚本的混淆比例,或者根据各个顶层单独节点的节点权重进行其他操作以计算得到混淆分数,所述其他操作包括但不限于加权求和,加权求和的权重因子可以根据应用需求设置计算规则。为便于实现,本实施例中所述根据所有被混淆的顶层单独节点的节点权重计算待检测脚本的混淆分数包括:求取所有被混淆的顶层单独节点的节点权重之和作为待检测脚本的混淆分数。
本发明中根据计算得到的混淆分数判断待检测脚本是否混淆包括:将混淆分数与预定的阈值进行比较,若小于预定的阈值,则认为待检测脚本不混淆,否则认为混淆。考虑到合法脚本可能通过变量或者其他方式隐藏其真实执行代码,但含有的混淆成分很少,通过设置阈值的方法,可以显著区分正常脚本和混淆脚本。该预定的阈值根据经验值设定,通常在6%~16%之间,本实施例中该阈值为10%。
上述脚本混淆检测方法、装置、计算机设备和存储介质,基于对混淆本身的研究和归纳,将待检测脚本抽象为抽象语法树,然后确定顶层单独节点,通过判断抽象语法树中各个顶层单独节点的混淆情况以判断该待检测脚本是否混淆。与现有基于机器学习的脚本混淆检测方法相比,不受学习方法和学习样本影响,能够检测未知混淆技术。
在上述图1所示的脚本混淆检测方法的基础上,本申请的一优选实施中,所述根据当前顶层单独节点的子节点是否对应动态执行命令以及子树中节点的类型判断当前顶层单独节点是否被混淆时,包括:
判断当前顶层单独节点的子节点是否对应动态执行命令,并进行如下操作:
若对应动态执行命令,则判断当前顶层单独节点的子树中是否存在常量或变量节点,如果有则认为当前顶层单独节点被混淆,否则认为当前顶层单独节点无混淆;
否则,继续判断当前顶层单独节点的子树中是否存在表达式节点,若存在,则认为当前顶层单独节点被混淆;否则认为无混淆。
该优选实施例中根据被混淆的节点的特征,先判断是否有动态执命令涉及到是否需要寻找变量或者常量节点;如果没有动态执行命令,则只搜寻表达式节点即可,能够大大提高搜寻效率。
需要说明,判断当前顶层单独节点是否被混淆还可以采用其他方法,如先判断子树是否存在表达式节点,再判断当前顶层单独节点的子节点是否存在动态执行命令以及变量或常量节点,在此不一一列举。
在上述图1所示的脚本混淆检测方法的基础上,本申请的另一优选实施中,所述根据当前顶层单独节点的子节点是否对应动态执行命令以及子树中节点的类型判断当前顶层单独节点是否被混淆时,采用基于广度优先的方式遍历当前顶层单独节点的子树节点(即子树中的节点),确定子树节点的类型。由于一般混淆方法都会使顶层单独节点的子节点中产生动态执行节点、变量节点或者表达式节点,因此,采用广度优先的方式遍历顶层单独节点的子树节点,在该节点被混淆时,能更快获取检测结果。此外,可以采用从上至下的深度优先的遍历方法,还可以采用从下至上的深度优先的遍历方法。
如图6所示,本发明公开的另一种脚本混淆检测方法,包括如下步骤:
S601,生成待检测脚本的抽象语法树;
S602,遍历所述的抽象语法树,在遍历过程中,针对每一个被遍历的节点进行如下操作:
S602a,计算该节点在所述抽象语法树中的权重;
S602b,根据该节点的父节点、祖节点以及该节点自身对应的语句类型判断当前节点是否为顶层单独节点,所述顶层单独节点为父节点和祖节点均对应程序片段的节点,该节点不对应程序片段的节点;
S602c,根据判断结果进行如下操作:
若为顶层单独节点,则根据当前顶层单独节点的子节点是否对应动态执行命令以及子树中节点的类型判断当前顶层单独节点是否被混淆;
否则,遍历下一个节点;
S603,根据所有被混淆的顶层单独节点的节点权重计算待检测脚本的混淆分数以判断待检测脚本是否混淆。
在步骤S602中,所述遍历所述抽象语法树时采用深度优先的方式遍历所述抽象语法树;或者采用广度优先的方式遍历所述抽象语法树。基于混淆的特点,为提高遍历效率,本实施例中采用深度优先的方式遍历所述抽象语法树。
进一步,由于混淆是可以迭代,从上至下的遍历方法符合迭代规则,在图4中,只需检测到最上层为混淆的脚本即可;同样,如图5中,混淆包含了多个语句,也只需要确定最上层的混淆即可。因此,本优选实施例中优选采用从上至下的深度优先方式遍历所述抽象语法树。
本实施例的脚本混淆检测方法通过遍历同时完成顶层单独s节点的判断以及节点权重的计算,大大提高了检测效率。
在上述图6所示的脚本混淆检测方法的基础上,本申请的一优选实施中,步骤S602中遍历所述抽象语法树搜索顶层单独节点时,若判断当前节点为顶层单独节点,则针对该顶层单独节点的子树中的节点不进行遍历(即不继续遍历找顶层单独节点,但是还是会继续遍历子树确定是否有变量等。)
首先,由于顶层单独节点的定义,只有当某一节点的父节点和祖节点都对应程序片段,且自身不对应程序片段,该节点才被认为是顶层单独节点,因此,其子树中节点的父节点、祖节点中必然有节点对应非程序片段;其次,顶层单独节点对应原脚本中的单条命令,而该节点子树中的节点代表此命令的组成成分,因此子树中节点不会为顶层单独节点。
在上述图6所示的脚本混淆检测方法的基础上,在本申请的另一优选实施中,步骤S602c中根据当前顶层单独节点的子节点是否对应动态执行命令以及子树中节点的类型判断当前顶层单独节点是否被混淆时遍历当前顶层单独节点的子树节点确定子树节点的类型进行。遍历时基于深度优先或广度优先的遍历方法顶层单独节点的子树,基于深度优先的方式遍历时可以采用从上至下的遍历方法,也可以采用从下至上遍历方法。
进一步,当步骤S602中采用从上至下的深度优先的方式遍历抽象语法树时,由于与遍历抽象语法树的方向相反,若采用从下至上的遍历顶层单独节点的子树,计算权重时需要额外的计算量会影响效率等,因此,本优选实施例中采用从上至下的深度优先的遍历方法遍历顶层单独节点的子树。
在上述图6所示的脚本混淆检测方法的基础上,在本申请的另一优选实施中,步骤S602c中根据当前顶层单独节点的子节点是否对应动态执行命令以及子树中节点的类型判断当前顶层单独节点是否被混淆时遍历当前顶层单独节点的子树节点确定子树节点的类型进行,具体的,首先采用广度优先的方法遍历该顶层单独节点的子节点判断是否存在对应动态执行命令,然后再采用深度优先的方式遍历所述顶层单独节点的子树中除子节点为的节点。基于深度优先的方式遍历所述顶层单独节点的子树中除子节点为的节点时可以采用从上至下的遍历方法,也可以采用从下至上遍历方法。
需要说明的是,尽管遍历抽象语法树和遍历顶层单独节点的子树(即子树节点)的方向会影响到最终检测效率,但是二者实际上是两个独立的过程,例如:其中一个采用遍历的方式实现,另一种可以不采用遍历的方式;或者,其中一个采用深度优先的方法遍历,另一个采用广度优先的方式遍历。
在本发明的另一实施例中,所述的脚本混淆检测方法如图7所示,包括如下步骤:
S701,根据待检测脚本生成抽象语法树。
S702,确定顶层单独语句类型集合T;本实施例中顶层单独语句类型集合T包扩CommandAst,CommandExpressionAst,ParameterAst,AttributeAst等。
S703,确定表达式语句类型集合E,本实施例中表达式语句类型集合包括CommandExpressionAst,BinaryExpressionAst。
S704,确定脚本语言中的动态执行命令,本实施例中动态执行命令包括‘.’,’$’和命令‘Invoke-Expression’及其缩写别名‘IEX’。
S705,确定脚本语言中的变量节点类型,本实施例中变量节点类型包括VariableExpressionAst,VariableToken等。
S706,通过深度优先的方式遍历抽象语法树,确定抽象语法书中被混淆的顶层单独节点,每次被混淆后将被混淆的顶层单独节点的权重累加至最终检测得分score。
遍历前初始化最终检测得分score=0,遍历时针对当前被遍历的节点进行如下操作:
计算该节点的权重ws,计算规则如下:以根节点为1;对于每个节点,若该节点的权重为w,具有n个子节点,其各个子节点的权重为w/n;
判断该节点对应的语句是否属于顶层单独语句类型集合T,若属于,则认为该节点为顶层单独节点,记该节点为顶层单独节点s,,并针对该顶层单独节点s初始化变量u和变量d,具体如下:
初始化变量u=true,代表接下来遍历的节点都为顶层单独语句节点的子节点;
初始化变量d=false,代表其子节点中暂时没有出现动态执行命令;
变量u和d都属于该语句s(即每一s都有对应的u和d);
遍历节点s的子节点,如果存在有动态执行命令,则将d置为true;
基于自上至下的深度优先的遍历方式遍历节点s的子树,如果出现表达式节点e,则该节点s对应的语句s含有混淆成分,e为混淆后节点,将节点s的权重ws加入score;
需要说明,在遍历子树的过程中,如果已经判断出该顶层单独节点s被混淆,则停止遍历该子树,不用继续遍历该子树中未被遍历的其他节点。从上至下遍历抽象语法树,当遍历到某一节点对应语句为PipelineAst时(PipelineAst),判断该节点为顶层单独节点,置u=true;则开始遍历该顶层单独节点的子树,发现其左子节点类型为CommandExpressionAst,可以判断该顶层单独节点被混淆,因此无需遍历其他节点,直接确定该脚本已被混淆。
如果出现变量或者常量节点v,且d为true,则该语句s含有混淆成分,v为混淆后节点,将节点s的权重ws加入score;
在遍历完该顶层单独节点的子树后,将u置为false,d置为false;
判断遍历是否结束,若结束,则执行步骤S707,否则继续遍历下一个节点。
S707,根据score的值与预定的阈值的关系判断该待检测脚本是否被混淆,本实施例中该阈值为10%。
本实施例的脚本混淆检测方法通过遍历抽象语法树,找到在顶层单独语句下的表达式语句,认为该语句被混淆,然后通过该语句在树中的权重计算分数,通过累积的方法得到脚本中混淆比例(即混淆分数)用以判断是否被混淆。
为进一步验证本发明的脚本混淆检测方法的效果,本实施例中通过Github上通过语言过滤,选取了排名最高的500个PowerShell项目,人工排除了是已知为网络攻击的项目,利用爬虫一共收集了2342个合法样本;再通过博客、论坛、威胁情报等网站收集了4098个攻击样本。根据经验,这些合法样本应该都没被混淆;利用Invoke-Obfuscation工具(一个PowerShell混淆工具),选取6种混淆方式(String/1,String/2,String/3,Token/all,Encoding/hex,Encoding/secstring)对每个合法样本进行混淆,生成了14052个混淆后的样本。所有样本情况如表2所示。
表2
对三类样本中的每个脚本都计算其混淆分数,过程如下:
首先,利用微软官方工具库System.Management.Automation.Language将输入脚本解析为抽象语法树(AST,abstract syntax tree),该树含有71种类型的节点,包含PipelineAst,CommandAst,ScriptBlockAst等。该树根节点为ScriptBlockAst,对应了完整的输入脚本;
从根节点进行深度优先遍历,越过ScriptBlockAst,ScriptBlockExpressionAst,IfStatementAst(这个代表了if语句)等对应一段代码的节点,找到类型属于顶层单独语句类型的节点;例子中为NamedBlockAst为脚本片段节点,其子节点PipelinAst为顶层单独节点,此处只有一个子节点,说明该脚本只含有一个命令(其混淆前的脚本有上百行,但通过混淆技术被整合成了一行);
遍历该节点的子节点,查询其是否含有动态执行命令;在例子中,没有动态执行命令;
遍历该节点的子树(子孙节点),查询是否含有表达式节点;在例子中,有CommandExpressionAst,则该语句(最上层PipelinAst)是被混淆的,其权重为1,则该样本被混淆的分数为1;
如果该节点的子节点中有动态执行命令,则遍历其除了动态执行命令外的其他节点,找寻变量节点;如果有,则说明该节点被混淆;如果没有,则说明该节点无混淆。
经过实验,发现混淆后的脚本,和混淆前的样本,混淆得分有极大的差别;真实攻击脚本中,基本都含有大量的混淆成分,本发明的脚本混淆检测方法可靠性强。
在一个实施例中,提供了一种脚本混淆检测装置,如图8所示,包括:
第一模块,用于生成待检测脚本的抽象语法树;
第二模块,用于根据各个节点对应的语句占整个待检测脚本的权重计算所述抽象语法树中各个节点的权重;
第三模块,用于确定抽象语法树中顶层单独节点,所述顶层单独节点为父节点和祖节点均为程序片段的节点;
第四模块,用于根据当前顶层单独节点的子节点是否对应动态执行命令以及子树中节点的类型判断当前顶层单独节点是否被混淆;
第五模块,用于根据所有被混淆的顶层单独节点的节点权重计算待检测脚本的混淆分数以判断待检测脚本是否混淆。
在本发明的另一实施例中,提供了另一种脚本混淆检测装置,如图9所示,包括:
第六模块,用于生成待检测脚本的抽象语法树;
第七模块,用于遍历所述的抽象语法树,在遍历过程中,针对每一个被遍历的节点进行如下操作:
计算该节点在所述抽象语法树中的权重;
根据该节点的父节点和祖节点对应的语句类型判断当前节点是否为顶层单独节点,所述顶层单独节点为父节点和祖节点均对应程序片段的节点;
根据判断结果进行如下操作:
若为顶层单独节点,则根据当前顶层单独节点的子节点是否对应动态执行命令以及子树中节点的类型判断当前顶层单独节点是否被混淆;
否则,遍历下一个节点;
第八模块,用于根据所有被混淆的顶层单独节点的节点权重计算待检测脚本的混淆分数以判断待检测脚本是否混淆。
关于上述脚本混淆检测装置的具体限定可以参见上文中对于脚本混淆检测方法的限定,在此不再赘述。上述脚本混淆检测装置中的各个模块、或单元可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
本发明的一个实施例中,提供了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现本申请的脚本混淆检测方法的步骤,各个步骤对应第一模块至第五模块的相关内容。
具体包括如下步骤:
生成待检测脚本的抽象语法树;
计算所述抽象语法树中各个节点的权重;
确定抽象语法树中顶层单独节点,所述顶层单独节点为父节点和祖节点均对应程序片段的节点;
根据各个顶层单独节点的子节点是否对应动态执行命令以及子树中节点的类型判断各个顶层单独节点是否被混淆;
根据所有被混淆的顶层单独节点的节点权重计算待检测脚本的混淆分数,并根据计算得到的混淆分数判断所述待检测脚本是否混淆。
本发明的另一个实施例中,提供了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现本申请的脚本混淆检测方法的步骤,各个步骤对应第六模块至第八模块的相关内容。
具体包括如下步骤:
生成待检测脚本的抽象语法树;
遍历所述的抽象语法树,在遍历过程中,针对每一个被遍历的节点进行如下操作:
计算该节点在所述抽象语法树中的权重;
根据该节点的父节点和祖节点对应的语句类型判断当前节点是否为顶层单独节点,所述顶层单独节点为父节点和祖节点均对应程序片段的节点;
根据判断结果进行如下操作:
若为顶层单独节点,则根据当前顶层单独节点的子节点是否对应动态执行命令以及子树中节点的类型判断当前顶层单独节点是否被混淆;
否则,遍历下一个节点;
根据所有被混淆的顶层单独节点的节点权重计算待检测脚本的混淆分数,并根据计算得到的混淆分数判断所述待检测脚本是否混淆。
本发明各实施例中的计算机设备可以是服务器,其内部结构图可以如图10所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种APT检测方法。
本领域技术人员可以理解,图10中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
本发明的另一实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述各个实施例的脚本混淆检测方法的步骤。
应该理解的是,虽然图1、6和7的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1、6和7中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。不同实施例中的技术特征体现在同一附图中时,可视为该附图也同时披露了所涉及的各个实施例的组合例。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (12)
1.一种脚本混淆检测方法,其特征在于,包括如下步骤:
生成待检测脚本的抽象语法树;
计算所述抽象语法树中各个节点的权重;
确定抽象语法树中顶层单独节点,所述顶层单独节点为父节点和祖节点均对应程序片段且自身不对应程序片段的节点;
根据各个顶层单独节点的子节点是否对应动态执行命令以及子树中节点的类型判断各个顶层单独节点是否被混淆;
根据所有被混淆的顶层单独节点的节点权重计算待检测脚本的混淆分数,并根据计算得到的混淆分数判断所述待检测脚本是否混淆;所述判断当前顶层单独节点是否被混淆包括:
判断当前顶层单独节点的子节点是否对应动态执行命令;
根据判断结果进行如下操作:
若对应动态执行命令,则继续判断当前顶层单独节点的子树中是否存在变量节点,如果有则认为当前顶层单独节点被混淆,否则认为当前顶层单独节点无混淆;
否则,则继续判断当前顶层单独节点的子树中是否存在表达式节点,若存在,则认为当前顶层单独节点被混淆;否则认为无混淆。
2.一种脚本混淆检测方法,其特征在于,包括如下步骤:
生成待检测脚本的抽象语法树;
遍历所述的抽象语法树,在遍历过程中,针对每一个被遍历的节点进行如下操作:
计算该节点在所述抽象语法树中的权重;
根据该节点的父节点和祖节点对应的语句类型判断当前节点是否为顶层单独节点,所述顶层单独节点为父节点和祖节点均对应程序片段且自身不对应程序片段的节点;
根据判断结果进行如下操作:
若为顶层单独节点,则根据当前顶层单独节点的子节点是否对应动态执行命令以及子树中节点的类型判断当前顶层单独节点是否被混淆;
否则,遍历下一个节点;
根据所有被混淆的顶层单独节点的节点权重计算待检测脚本的混淆分数,并根据计算得到的混淆分数判断所述待检测脚本是否混淆;所述判断当前顶层单独节点是否被混淆包括:
判断当前顶层单独节点的子节点是否对应动态执行命令;
根据判断结果进行如下操作:
若对应动态执行命令,则继续判断当前顶层单独节点的子树中是否存在变量节点,如果有则认为当前顶层单独节点被混淆,否则认为当前顶层单独节点无混淆;
否则,则继续判断当前顶层单独节点的子树中是否存在表达式节点,若存在,则认为当前顶层单独节点被混淆;否则认为无混淆。
3.如权利要求2所述的脚本混淆检测方法,其特征在于,所述遍历所述抽象语法树时采用深度优先的方式遍历所述抽象语法树。
4.如权利要求2或3所述的脚本混淆检测方法,其特征在于,所述的遍历所述抽象语法树时,若判断当前节点为顶层单独节点,则停止遍历该当前节点的子树中的节点。
5.如权利要求1或2所述的脚本混淆检测方法,其特征在于,所述计算所述抽象语法树中各个节点的权重包括根据各个节点对应的语句占整个待检测脚本的权重;
或者,
设定根节点的权重为1;对于任意一个节点,若其权重为ws,子节点的数量为n,则该节点对应的各个子节点权重为ws/n。
6.如权利要求1或2所述的脚本混淆检测方法,其特征在于,所述判断当前顶层单独节点的子树中是否存在表达式节点和/或变量节点时采用基于广度优先的方式遍历当前顶层单独节点的子树进行。
7.如权利要求1或2所述的脚本混淆检测方法,其特征在于,所述根据所有被混淆的顶层单独节点的节点权重计算待检测脚本的混淆分数包括:求取所有被混淆的顶层单独节点的节点权重之和作为待检测脚本的混淆分数。
8.如权利要求1或2所述的脚本混淆检测方法,其特征在于,所述根据所有被混淆的顶层单独节点的节点权重计算待检测脚本的混淆分数以判断待检测脚本是否混淆包括:将待检测脚本的混淆分数与预设的阈值比较,则待检测脚本的混淆分数小于预设的阈值,则认为待检测脚本无混淆;否则,认为待检测脚本被混淆。
9.一种脚本混淆检测装置,其特征在于,包括:
第一模块,用于生成待检测脚本的抽象语法树;
第二模块,用于根据各个节点对应的语句占整个待检测脚本的权重计算所述抽象语法树中各个节点的权重;
第三模块,用于确定抽象语法树中顶层单独节点,所述顶层单独节点为父节点和祖节点均为程序片段且自身不对应程序片段的节点;
第四模块,用于根据当前顶层单独节点的子节点是否对应动态执行命令以及子树中节点的类型判断当前顶层单独节点是否被混淆;
第五模块,用于根据所有被混淆的顶层单独节点的节点权重计算待检测脚本的混淆分数以判断待检测脚本是否混淆;所述判断当前顶层单独节点是否被混淆包括:
判断当前顶层单独节点的子节点是否对应动态执行命令;
根据判断结果进行如下操作:
若对应动态执行命令,则继续判断当前顶层单独节点的子树中是否存在变量节点,如果有则认为当前顶层单独节点被混淆,否则认为当前顶层单独节点无混淆;
否则,则继续判断当前顶层单独节点的子树中是否存在表达式节点,若存在,则认为当前顶层单独节点被混淆;否则认为无混淆。
10.一种脚本混淆检测装置,其特征在于,包括:
第六模块,用于生成待检测脚本的抽象语法树;
第七模块,用于遍历所述的抽象语法树,在遍历过程中,针对每一个被遍历的节点进行如下操作:
计算该节点在所述抽象语法树中的权重;
根据该节点的父节点和祖节点对应的语句类型判断当前节点是否为顶层单独节点,所述顶层单独节点为父节点和祖节点均对应程序片段且自身不对应程序片段的节点;
根据判断结果进行如下操作:
若为顶层单独节点,则根据当前顶层单独节点的子节点是否对应动态执行命令以及子树中节点的类型判断当前顶层单独节点是否被混淆;
否则,遍历下一个节点;
第八模块,用于根据所有被混淆的顶层单独节点的节点权重计算待检测脚本的混淆分数以判断待检测脚本是否混淆;所述判断当前顶层单独节点是否被混淆包括:
判断当前顶层单独节点的子节点是否对应动态执行命令;
根据判断结果进行如下操作:
若对应动态执行命令,则继续判断当前顶层单独节点的子树中是否存在变量节点,如果有则认为当前顶层单独节点被混淆,否则认为当前顶层单独节点无混淆;
否则,则继续判断当前顶层单独节点的子树中是否存在表达式节点,若存在,则认为当前顶层单独节点被混淆;否则认为无混淆。
11.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至8中任一项所述方法的步骤。
12.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至8中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010271728.3A CN111475809B (zh) | 2020-04-09 | 2020-04-09 | 脚本混淆检测方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010271728.3A CN111475809B (zh) | 2020-04-09 | 2020-04-09 | 脚本混淆检测方法、装置、计算机设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111475809A CN111475809A (zh) | 2020-07-31 |
CN111475809B true CN111475809B (zh) | 2023-10-20 |
Family
ID=71750723
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010271728.3A Active CN111475809B (zh) | 2020-04-09 | 2020-04-09 | 脚本混淆检测方法、装置、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111475809B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113190847A (zh) * | 2021-04-14 | 2021-07-30 | 深信服科技股份有限公司 | 一种脚本文件的混淆检测方法、装置、设备及存储介质 |
CN116305131B (zh) * | 2023-05-20 | 2023-08-11 | 北京长亭科技有限公司 | 脚本静态去混淆方法及系统 |
CN117909218B (zh) * | 2023-12-12 | 2024-08-20 | 青矩技术股份有限公司 | 脚本的检测方法、装置、设备及计算机可读存储介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2879099B1 (ja) * | 1998-02-26 | 1999-04-05 | 工業技術院長 | 抽象構文木処理方法、抽象構文木処理プログラムを記録したコンピュータ読み取り可能な記録媒体、抽象構文木データを記録したコンピュータ読み取り可能な記録媒体、及び、抽象構文木処理装置 |
CN103455759A (zh) * | 2012-06-05 | 2013-12-18 | 深圳市腾讯计算机系统有限公司 | 一种页面漏洞检测装置及检测方法 |
CN105303109A (zh) * | 2015-09-22 | 2016-02-03 | 电子科技大学 | 一种恶意代码情报检测分析方法及系统 |
CN106572117A (zh) * | 2016-11-11 | 2017-04-19 | 北京安普诺信息技术有限公司 | 一种WebShell文件的检测方法和装置 |
EP3379443A1 (en) * | 2017-03-24 | 2018-09-26 | CSPi GmbH | Method and computer device to deobfuscate a source code |
CN109033764A (zh) * | 2017-06-09 | 2018-12-18 | 腾讯科技(深圳)有限公司 | 反混淆处理方法及终端、计算机设备 |
CN109117633A (zh) * | 2018-08-13 | 2019-01-01 | 百度在线网络技术(北京)有限公司 | 静态源码扫描方法、装置、计算机设备及存储介质 |
CN110750789A (zh) * | 2019-10-18 | 2020-02-04 | 杭州奇盾信息技术有限公司 | 解混淆方法、装置、计算机设备和存储介质 |
CN110765459A (zh) * | 2019-10-18 | 2020-02-07 | 北京天融信网络安全技术有限公司 | 一种恶意脚本检测方法、装置和存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9146957B2 (en) * | 2012-12-20 | 2015-09-29 | Business Objects Software Ltd. | Method and system for generating optimal membership-check queries |
-
2020
- 2020-04-09 CN CN202010271728.3A patent/CN111475809B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2879099B1 (ja) * | 1998-02-26 | 1999-04-05 | 工業技術院長 | 抽象構文木処理方法、抽象構文木処理プログラムを記録したコンピュータ読み取り可能な記録媒体、抽象構文木データを記録したコンピュータ読み取り可能な記録媒体、及び、抽象構文木処理装置 |
CN103455759A (zh) * | 2012-06-05 | 2013-12-18 | 深圳市腾讯计算机系统有限公司 | 一种页面漏洞检测装置及检测方法 |
CN105303109A (zh) * | 2015-09-22 | 2016-02-03 | 电子科技大学 | 一种恶意代码情报检测分析方法及系统 |
CN106572117A (zh) * | 2016-11-11 | 2017-04-19 | 北京安普诺信息技术有限公司 | 一种WebShell文件的检测方法和装置 |
EP3379443A1 (en) * | 2017-03-24 | 2018-09-26 | CSPi GmbH | Method and computer device to deobfuscate a source code |
CN109033764A (zh) * | 2017-06-09 | 2018-12-18 | 腾讯科技(深圳)有限公司 | 反混淆处理方法及终端、计算机设备 |
CN109117633A (zh) * | 2018-08-13 | 2019-01-01 | 百度在线网络技术(北京)有限公司 | 静态源码扫描方法、装置、计算机设备及存储介质 |
CN110750789A (zh) * | 2019-10-18 | 2020-02-04 | 杭州奇盾信息技术有限公司 | 解混淆方法、装置、计算机设备和存储介质 |
CN110765459A (zh) * | 2019-10-18 | 2020-02-07 | 北京天融信网络安全技术有限公司 | 一种恶意脚本检测方法、装置和存储介质 |
Non-Patent Citations (2)
Title |
---|
Li ZY et al..Effective and Light-Weight Deobfuscation and Semantic-Aware Attack Detection for PowerShell Scripts.PROCEEDINGS OF THE 2019 ACM SIGSAC CONFERENCE ON COMPUTER AND COMMUNICATIONS SECURITY (CCS'19).2019,第1831-1847页. * |
基于多类特征的JavaScript恶意脚本检测算法;付垒朋 等;模式识别与人工智能;第28卷(第12期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN111475809A (zh) | 2020-07-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111475809B (zh) | 脚本混淆检测方法、装置、计算机设备和存储介质 | |
CN106709345B (zh) | 基于深度学习方法推断恶意代码规则的方法、系统及设备 | |
CN107844705B (zh) | 基于二进制代码特征的第三方组件漏洞检测方法 | |
CN107844415B (zh) | 一种基于插值的模型检测路径缩减方法、计算机 | |
CN109543410B (zh) | 一种基于语义映射关联的恶意代码检测方法 | |
CN103198260B (zh) | 一种二进制程序漏洞自动化定位方法 | |
KR101617696B1 (ko) | 데이터 정규표현식의 마이닝 방법 및 장치 | |
CN111611586A (zh) | 基于图卷积网络的软件漏洞检测方法及装置 | |
Redelinghuys et al. | Symbolic execution of programs with strings | |
EP3346664A1 (en) | Binary search of byte sequences using inverted indices | |
CN110765459A (zh) | 一种恶意脚本检测方法、装置和存储介质 | |
CN114861194A (zh) | 一种基于bgru与cnn融合模型的多类型漏洞检测方法 | |
CN107516040A (zh) | 一种基于数据控制流图的脆弱性特征分析和获取方法 | |
CN112685738A (zh) | 一种基于多级投票机制的恶意混淆脚本静态检测方法 | |
Fang et al. | Effective method for detecting malicious PowerShell scripts based on hybrid features☆ | |
KR101645019B1 (ko) | 소프트웨어 보안취약점 검출을 위한 규칙명세언어 | |
CN115617395A (zh) | 一种融合全局和局部特征的智能合约相似性检测方法 | |
EP2107484A2 (en) | A method and device for code audit | |
CN111258892B (zh) | 基于组合变异的sql注入测试用例生成方法 | |
WO2010149986A2 (en) | A method, a computer program and apparatus for analysing symbols in a computer | |
WO2019223637A1 (zh) | 恶意文件检测方法、装置、设备及计算机可读存储介质 | |
Haojie et al. | Vulmg: A static detection solution for source code vulnerabilities based on code property graph and graph attention network | |
CN107622201B (zh) | 一种抗加固的Android平台克隆应用程序快速检测方法 | |
Jain et al. | CPLAG: Efficient plagiarism detection using bitwise operations | |
CN109784048A (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 | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20220909 Address after: Room 102, Block A, No. 91, Tiancheng Road, Jianggan District, Hangzhou City, Zhejiang Province, 310000 Applicant after: HANGZHOU QIDUN INFORMATION TECHNOLOGY Co.,Ltd. Applicant after: Guangzhou Qidun Information Technology Co.,Ltd. Address before: Room 102, Block A, No. 91, Tiancheng Road, Jianggan District, Hangzhou City, Zhejiang Province, 310004 Applicant before: HANGZHOU QIDUN INFORMATION TECHNOLOGY Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |