CN115237760A - 一种基于自然语言处理的JavaScript引擎定向模糊测试方法及系统 - Google Patents
一种基于自然语言处理的JavaScript引擎定向模糊测试方法及系统 Download PDFInfo
- Publication number
- CN115237760A CN115237760A CN202210801485.9A CN202210801485A CN115237760A CN 115237760 A CN115237760 A CN 115237760A CN 202210801485 A CN202210801485 A CN 202210801485A CN 115237760 A CN115237760 A CN 115237760A
- Authority
- CN
- China
- Prior art keywords
- bert
- model
- ast
- node
- javascript
- 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/3668—Software testing
- G06F11/3672—Test management
-
- 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/3668—Software testing
- G06F11/3672—Test management
- G06F11/3676—Test management for coverage analysis
-
- 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/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Biomedical Technology (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Health & Medical Sciences (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Life Sciences & Earth Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开一种基于自然语言处理的JavaScript引擎定向模糊测试方法及系统,该方法利用自然语言处理技术通过BERT语言模型提取JavaScript语言语法和语义信息,用残差网络和掩码语言模型相结合的技术进行fine‑tuning,并结合AFLGO的定向模糊测试技术对JavaScript引擎进行定向模糊测试。BERT语言模型的双向序列处理能力提升了特征提取的精度,残差网络进一步提升了语言模型的准确性,定向模糊测试利用覆盖率信息,提升了漏洞发现的速度和模糊测试的代码覆盖率。本发明兼顾了测试用例生成效率和覆盖率信息利用,大幅度提高了有效测试用例生成率的同时也提高了模糊测试的代码覆盖率。
Description
技术领域
本发明涉及软件安全测试技术领域,尤其涉及一种基于自然语言处理的JavaScript引擎定向模糊测试方法及系统。
背景技术
JavaScript引擎庞大的代码空间决定了模糊测试技术在JavaScript引擎漏洞挖掘中的主要地位,以下将归纳总结前期JavaScript引擎模糊测试工作的研究思路及成果。
JSfunfuzz是由Mozilla安全团队于2008年发布的模糊测试工具,JSfunfuzz通过固定的JavaScript语法模板生成JavaScript引擎测试用例,提高了测试用例的有效性;Holler C等人提出的LangFuzz利用语法模板将种子文件的AST分解为AST片段,通过随机组合AST片段的方式生成语法正确的测试用例;Veggalam等人提出的IFuzzer运用遗传算法交换不同AST之间的子树,保证了测试用例的生成速度和多样性;Han等人提出的CodeAlchemist将种子文件按照并列结构分解为若干块组成代码块库,随机组合输入和输出相匹配的代码块,从而保证生成的测试用例的语法语义合法性;Wang等人提出的Superion利基于覆盖的语法感知方法进行模糊测试,Superion通过基于字典的突变和基于树的突变的语法感知策略来裁剪AST,在子树级别生成测试输入,语法感知给Suprion带来了更高的代码覆盖率;Lee等人提出的Montage以AST子树序列为输入训练LSTM语言模型,修剪种子的某个子树,利用LSTM语言模型重新生成该子树,保证了生成的测试用例的多样性和合法性;Park等人提出的DIE能够在突变过程中保留种子的分支和循环等特殊结构,在模糊测试时更容易触发JIT中的漏洞,在保证代码覆盖率方面有了新的突破。
然而上述模糊测试方法也有一定的局限性。JavaScript语法模板可扩展性差,需要手动修改代码进行检查和更新;随机组合AST片段的方法使得生成的测试用例大部分不符合语义逻辑,影响模糊测试的效率;遗传算法不能保证生成的测试用例符合语法标准和语义逻辑;组合代码块技术能够高效的生成合法的测试用例,然而代码块级的变异无法获得优秀的代码覆盖率,模糊测试的全面性受到限制;LSTM语言模型只能单向串行地训练模型,对语言特征的提取的精度和速度都受到限制;语法感知结合覆盖率信息能大幅提高代码覆盖率,然而生成的测试用例没有考虑语义层面的逻辑性,影响模糊测试的效率。
发明内容
为解决现有的JavaScript引擎模糊测试工具在测试用例生成质量和覆盖率信息利用上的不足,本发明基于自然语言处理的JavaScript引擎定向模糊测试技术,提出一种基于自然语言处理的JavaScript引擎定向模糊测试方法及系统,实现了针对JavaScript引擎的定向模糊测试工具JSBFuzz(JavaScript Sub-Bert Fuzz),JSBFuzz将语料库中的JavaScript种子文件解析成抽象语法树(AST)子树作为BERT语言模型的预训练输入Vocab,下游任务微调(fine-tuning)阶段利用残差网络与掩码语言模型(MLM)相结合,训练得到的语言模型能够生成符合JavaScript语法和语义的高效测试用例并作为以AFLGo为基础的定向模糊测试的输入,最终能够保证JSBFuzz既拥有高效的初始测试用例输入,又能够利用覆盖率信息对JavaScript引擎进行全面快速的测试,从而发现更多的漏洞。经过实验发现JSBFuzz与Montage、Superion、CodeAlchemist等相比,覆盖率、漏洞触发率等均有显著提升。
为了实现上述目的,本发明采用以下技术方案:
本发明一方面提出一种基于自然语言处理的JavaScript引擎定向模糊测试方法,包括:
步骤1:将语料库中的JavaScript种子文件解析为抽象语法树AST树,删除有语法错误的种子文件;
步骤2:遍历AST树,构建高度为2的AST子树序列,并基于AST子树序列构建BERT语言模型词汇库vocab和BERT语言模型分句sentence;
步骤3:将vocab和sentence作为BERT语言模型预训练输入,得到BERT预训练模型;
步骤4:基于AST子树序列得到AST子树的父节点序列,利用BERT预训练模型将AST子树的父节点序列作为残差网络的输入,结合掩码语言模型MLM进行微调,得到JavaScript测试用例生成模型;
步骤5:比较各版本JavaScript引擎源文件信息,将补丁位置作为敏感位置,对JavaScript引擎源文件进行插装编译;
步骤6:利用JavaScript测试用例生成模型生成JavaScript测试用例作为定向模糊测试输入文件,对JavaScript引擎进行定向模糊测试。
进一步地,所述步骤2包括:
定义初始化种子的AST子树序列astlist,句子sentence和段落paragraph为空列表,用travel函数对AST树进行递归遍历,构建AST子树序列、分句sentence和段落paragraph并将相关信息保存;travel函数首先对AST树进行递归遍历,对每个节点依次进行判断,如果节点的父节点类型为“Program”,则说明该节点为一个语句的起始节点,把上一句添加到段落paragraph中,并重新初始化句子sentence;如果目标节点node有子节点,则把该节点的修剪子树和父节点信息以及父节点类型信息添加到astlist中,把单独的修剪子树添加到sentence中,并对该node进行遍历;如果该节点没有子节点,说明该节点已经是终结符的内容表示,此时更新vocab后退出当前递归。
进一步地,所述步骤3包括:
将vocab和sentence作为BERT语言模型预训练输入,对BERT模型进行简化用于保证训练过程中不出现过拟合现象,从sentence集合中按比例选择相邻和不相邻的句子对,BERT输入序列的嵌入是词元嵌入、句子嵌入和位置嵌入之和,每个词元、句子标记和位置标记都转化为一个固定维数维的向量,输入数据通过简化的BERT模型,通过BERT模型中MLM和下一句预测这两个预训练任务进行特征提取,学习JavaScript语言的语法和语义信息,最终得到BERT预训练模型。
进一步地,所述步骤4包括:
在BERT预训练模型的基础上,增加微调结构,所述微调结构包括两个线性神经网络层,及两个神经网络层之间的ReLU函数;两个神经网络层的大小分别为{输入长度*BERT模型隐藏维度}和{BERT模型隐藏维度*1024};该微调结构的输出与BERT预训练模型中MLM输出段的输出叠加;所述MLM输出段与微调结构组成相同;
将AST子树序列、AST子树的父节点序列分别输入简化的BERT模型、微调机构进行处理,最终BERT预训练模型中MLM输出段的输出、微调机构输出叠加后经过ReLU激活和层归一化,归一化结果使用大小为{1024*vocab长度}的线性层统一输出,输出的结果为预测的下一个词的在vocab上的概率分布。
进一步地,所述步骤6包括:
随机选择一个AST子树序列,选择一定比例的点位进行变异替换,依次对替换点进行处理,对于替换点,先获取替换点的父节点和子节点,将替换点和子节点全部删除,从父节点开始运用JavaScript测试用例生成模型生成子节点,所述子节点从生成的TOP-K个预选节点中选取,如果该子节点为非终结符,继续从该子节点生成下一个节点,限定生成的子树高度阈值,超过子树高度阈值的节点强制生成一个终结符来结束生成程序,并以此保证生成子树的合法性;将变异后的AST树还原成JavaScript测试用例作为定向模糊测试的输入,对JavaScript引擎进行定向模糊测试。
本发明另一方面提出一种基于自然语言处理的JavaScript引擎定向模糊测试系统,包括:
解析模块,用于将语料库中的JavaScript种子文件解析为抽象语法树AST树,删除有语法错误的种子文件;
构建模块,用于遍历AST树,构建高度为2的AST子树序列,并基于AST子树序列构建BERT语言模型词汇库vocab和BERT语言模型分句sentence;
预训练模块,用于将vocab和sentence作为BERT语言模型预训练输入,得到BERT预训练模型;
微调模块,用于基于AST子树序列得到AST子树的父节点序列,利用BERT预训练模型将AST子树的父节点序列作为残差网络的输入,结合掩码语言模型MLM进行微调,得到JavaScript测试用例生成模型;
插装编译模块,用于比较各版本JavaScript引擎源文件信息,将补丁位置作为敏感位置,对JavaScript引擎源文件进行插装编译;
模糊测试模块,用于利用JavaScript测试用例生成模型生成JavaScript测试用例作为定向模糊测试输入文件,对JavaScript引擎进行定向模糊测试。
进一步地,所述构建模块具体用于:
定义初始化种子的AST子树序列astlist,句子sentence和段落paragraph为空列表,用travel函数对AST树进行递归遍历,构建AST子树序列、分句sentence和段落paragraph并将相关信息保存;travel函数首先对AST树进行递归遍历,对每个节点依次进行判断,如果节点的父节点类型为“Program”,则说明该节点为一个语句的起始节点,把上一句添加到段落paragraph中,并重新初始化句子sentence;如果目标节点node有子节点,则把该节点的修剪子树和父节点信息以及父节点类型信息添加到astlist中,把单独的修剪子树添加到sentence中,并对该node进行遍历;如果该节点没有子节点,说明该节点已经是终结符的内容表示,此时更新vocab后退出当前递归。
进一步地,所述预训练模块具体用于:
将vocab和sentence作为BERT语言模型预训练输入,对BERT模型进行简化用于保证训练过程中不出现过拟合现象,从sentence集合中按比例选择相邻和不相邻的句子对,BERT输入序列的嵌入是词元嵌入、句子嵌入和位置嵌入之和,每个词元、句子标记和位置标记都转化为一个固定维数维的向量,输入数据通过简化的BERT模型,通过BERT模型中MLM和下一句预测这两个预训练任务进行特征提取,学习JavaScript语言的语法和语义信息,最终得到BERT预训练模型。
进一步地,所述微调模块具体用于:
在BERT预训练模型的基础上,增加微调结构,所述微调结构包括两个线性神经网络层,及两个神经网络层之间的ReLU函数;两个神经网络层的大小分别为{输入长度*BERT模型隐藏维度}和{BERT模型隐藏维度*1024};该微调结构的输出与BERT预训练模型中MLM输出段的输出叠加;所述MLM输出段与微调结构组成相同;
将AST子树序列、AST子树的父节点序列分别输入简化的BERT模型、微调机构进行处理,最终BERT预训练模型中MLM输出段的输出、微调机构输出叠加后经过ReLU激活和层归一化,归一化结果使用大小为{1024*vocab长度}的线性层统一输出,输出的结果为预测的下一个词的在vocab上的概率分布。
进一步地,所述模糊测试模块具体用于:
随机选择一个AST子树序列,选择一定比例的点位进行变异替换,依次对替换点进行处理,对于替换点,先获取替换点的父节点和子节点,将替换点和子节点全部删除,从父节点开始运用JavaScript测试用例生成模型生成子节点,所述子节点从生成的TOP-K个预选节点中选取,如果该子节点为非终结符,继续从该子节点生成下一个节点,限定生成的子树高度阈值,超过子树高度阈值的节点强制生成一个终结符来结束生成程序,并以此保证生成子树的合法性;将变异后的AST树还原成JavaScript测试用例作为定向模糊测试的输入,对JavaScript引擎进行定向模糊测试。
与现有技术相比,本发明具有的有益效果:
本发明利用自然语言处理技术通过BERT语言模型提取JavaScript语言语法和语义信息,用残差网络和掩码语言模型相结合的技术进行微调,并结合定向模糊测试技术对JavaScript引擎进行定向模糊测试。BERT语言模型的双向序列处理能力提升了特征提取的精度,残差网络进一步提升了语言模型的准确性,定向模糊测试利用覆盖率信息,提升了漏洞发现的速度和模糊测试的代码覆盖率。
本发明兼顾了测试用例生成效率和覆盖率信息利用,大幅度提高了有效测试用例生成率的同时也提高了模糊测试的代码覆盖率。
附图说明
图1为本发明实施例一种基于自然语言处理的JavaScript引擎定向模糊测试方法的基本流程图;
图2为本发明实施例一种基于自然语言处理的JavaScript引擎定向模糊测试系统架构示意图;
图3为本发明实施例JSBFuzz的处理流程图;
图4为本发明实施例AST子树序列、BERT输入词汇vocab和分句sentence的构建伪代码;
图5为本发明实施例JSBFuzz预训练阶段处理流程图;
图6为本发明实施例JSBFuzz fine-tuning阶段工作过程图;
图7为本发明实施例测试用例生成算法伪代码;
图8为本发明实施例JSBFuzz预训练损失变化;
图9为本发明实施例JSBFuzz fine-tuning训练损失变化;
图10为本发明实施例JavaScript引擎模糊测试工具运行在JavaScriptCore上的覆盖率信息;
图11为本发明实施例各模糊测试工具的测试用例生成能力。
具体实施方式
下面结合附图和具体的实施例对本发明做进一步的解释说明:
如图1所示,一种基于自然语言处理的JavaScript引擎定向模糊测试方法,包括:
步骤S101:将语料库中的JavaScript种子文件解析为抽象语法树AST树,删除有语法错误的种子文件;
步骤S102:遍历AST树,构建高度为2的AST子树序列,并基于AST子树序列构建BERT语言模型词汇库vocab和BERT语言模型分句sentence;
步骤S103:将vocab和sentence作为BERT语言模型预训练输入,得到BERT预训练模型;
步骤S104:基于AST子树序列得到AST子树的父节点序列,利用BERT预训练模型将AST子树的父节点序列作为残差网络的输入,结合掩码语言模型MLM进行微调,得到JavaScript测试用例生成模型;
步骤S105:比较各版本JavaScript引擎源文件信息,将补丁位置作为敏感位置,对JavaScript引擎源文件进行插装编译;
步骤S106:利用JavaScript测试用例生成模型生成JavaScript测试用例作为定向模糊测试输入文件,对JavaScript引擎进行定向模糊测试。
进一步地,所述步骤S102包括:
定义初始化种子的AST子树序列astlist,句子sentence和段落paragraph为空列表,用travel函数(该函数是一个递归函数,目的是对节点及其子节点进行遍历)对AST树进行递归遍历,构建AST子树序列、分句sentence和段落paragraph并将相关信息保存;travel函数首先对AST树进行递归遍历,对每个节点依次进行判断,如果节点的父节点类型为“Program”,则说明该节点为一个语句的起始节点,把上一句添加到段落paragraph中,并重新初始化句子sentence;如果目标节点node有子节点,则把该节点的修剪子树和父节点信息以及父节点类型信息添加到astlist中,把单独的修剪子树添加到sentence中,并对该node进行travel(遍历);如果该节点没有子节点,说明该节点已经是终结符的内容表示,此时更新vocab后退出当前递归。
进一步地,所述步骤S103包括:
将vocab和sentence作为BERT语言模型预训练输入,对BERT模型进行简化用于保证训练过程中不出现过拟合现象,从sentence集合中按比例选择相邻和不相邻的句子对,BERT输入序列的嵌入是词元嵌入、句子嵌入和位置嵌入之和,每个词元、句子标记和位置标记都转化为一个固定维数维的向量,输入数据通过简化的BERT模型,通过BERT模型中MLM和下一句预测这两个预训练任务进行特征提取,学习JavaScript语言的语法和语义信息,最终得到BERT预训练模型。
进一步地,所述步骤S104包括:
在BERT预训练模型的基础上,增加微调结构,所述微调结构包括两个线性神经网络层,及两个神经网络层之间的ReLU函数;两个神经网络层的大小分别为{输入长度*BERT模型隐藏维度}和{BERT模型隐藏维度*1024};该微调结构的输出与BERT预训练模型中MLM输出段的输出叠加;所述MLM输出段与微调结构组成相同;
将AST子树序列、AST子树的父节点序列分别输入简化的BERT模型、微调机构进行处理,最终BERT预训练模型中MLM输出段的输出、微调机构输出叠加后经过ReLU激活和层归一化,归一化结果使用大小为{1024*vocab长度}的线性层统一输出,输出的结果为预测的下一个词的在vocab上的概率分布。
进一步地,所述步骤S106包括:
随机选择一个AST子树序列,选择一定比例的点位进行变异替换,依次对替换点进行处理,对于替换点,先获取替换点的父节点和子节点,将替换点和子节点全部删除,从父节点开始运用JavaScript测试用例生成模型生成子节点,所述子节点从生成的TOP-K个预选节点中选取,如果该子节点为非终结符,继续从该子节点生成下一个节点,限定生成的子树高度阈值,超过子树高度阈值的节点强制生成一个终结符来结束生成程序,并以此保证生成子树的合法性;将变异后的AST树还原成JavaScript测试用例作为定向模糊测试的输入,对JavaScript引擎进行定向模糊测试。
在上述实施例的基础上,如图2所示,本发明另一方面提出一种基于自然语言处理的JavaScript引擎定向模糊测试系统(简称为JSBFuzz),包括:
解析模块,用于将语料库中的JavaScript种子文件解析为抽象语法树AST树,删除有语法错误的种子文件;
构建模块,用于遍历AST树,构建高度为2的AST子树序列,并基于AST子树序列构建BERT语言模型词汇库vocab和BERT语言模型分句sentence;
预训练模块,用于将vocab和sentence作为BERT语言模型预训练输入,得到BERT预训练模型;
微调模块,用于基于AST子树序列得到AST子树的父节点序列,利用BERT预训练模型将AST子树的父节点序列作为残差网络的输入,结合掩码语言模型MLM进行微调,得到JavaScript测试用例生成模型;
插装编译模块,用于比较各版本JavaScript引擎源文件信息,将补丁位置作为敏感位置,对JavaScript引擎源文件进行插装编译;
模糊测试模块,用于利用JavaScript测试用例生成模型生成JavaScript测试用例作为定向模糊测试输入文件,对JavaScript引擎进行定向模糊测试。
进一步地,所述构建模块具体用于:
定义初始化种子的AST子树序列astlist,句子sentence和段落paragraph为空列表,用travel函数对AST树进行递归遍历,构建AST子树序列、分句sentence和段落paragraph并将相关信息保存;travel函数首先对AST树进行递归遍历,对每个节点依次进行判断,如果节点的父节点类型为“Program”,则说明该节点为一个语句的起始节点,把上一句添加到段落paragraph中,并重新初始化句子sentence;如果目标节点node有子节点,则把该节点的修剪子树和父节点信息以及父节点类型信息添加到astlist中,把单独的修剪子树添加到sentence中,并对该node进行遍历;如果该节点没有子节点,说明该节点已经是终结符的内容表示,此时更新vocab后退出当前递归。
进一步地,所述预训练模块具体用于:
将vocab和sentence作为BERT语言模型预训练输入,对BERT模型进行简化用于保证训练过程中不出现过拟合现象,从sentence集合中按比例选择相邻和不相邻的句子对,BERT输入序列的嵌入是词元嵌入、句子嵌入和位置嵌入之和,每个词元、句子标记和位置标记都转化为一个固定维数维的向量,输入数据通过简化的BERT模型,通过BERT模型中MLM和下一句预测这两个预训练任务进行特征提取,学习JavaScript语言的语法和语义信息,最终得到BERT预训练模型。
进一步地,所述微调模块具体用于:
在BERT预训练模型的基础上,增加微调结构,所述微调结构包括两个线性神经网络层,及两个神经网络层之间的ReLU函数;两个神经网络层的大小分别为{输入长度*BERT模型隐藏维度}和{BERT模型隐藏维度*1024};该微调结构的输出与BERT预训练模型中MLM输出段的输出叠加;所述MLM输出段与微调结构组成相同;
将AST子树序列、AST子树的父节点序列分别输入简化的BERT模型、微调机构进行处理,最终BERT预训练模型中MLM输出段的输出、微调机构输出叠加后经过ReLU激活和层归一化,归一化结果使用大小为{1024*vocab长度}的线性层统一输出,输出的结果为预测的下一个词的在vocab上的概率分布。
进一步地,所述模糊测试模块具体用于:
随机选择一个AST子树序列,选择一定比例的点位进行变异替换,依次对替换点进行处理,对于替换点,先获取替换点的父节点和子节点,将替换点和子节点全部删除,从父节点开始运用JavaScript测试用例生成模型生成子节点,所述子节点从生成的TOP-K个预选节点中选取,如果该子节点为非终结符,继续从该子节点生成下一个节点,限定生成的子树高度阈值,超过子树高度阈值的节点强制生成一个终结符来结束生成程序,并以此保证生成子树的合法性;将变异后的AST树还原成JavaScript测试用例作为定向模糊测试的输入,对JavaScript引擎进行定向模糊测试。
具体地,JSBFuzz利用BERT语言模型对JavaScript测试用例的AST子树序列进行预训练,通过残差网络和MLM相结合进行fine-tuning,最终得到的语言模型用来生成JavaScript语言文件作为基于AFLGO的定向模糊测试系统的种子文件。BERT语言模型构建于神经网络之上,是一个基于双向transformer的语言模型,分为预训练和下游任务微调两部分。BERT语言模型主要运用了双向机制和多头注意力机制,解决了自然语言处理中信息关注不全面和并行处理问题。BERT语言模型生成的JavaScript语言文件符合JavaScript语言语法规则和语义逻辑,能够作为高质量的测试用例在定向模糊测试阶段进行变异,使得JSBFuzz拥有更高的代码覆盖率和更高的漏洞发现能力。图3展示了JSBFuzz的完整系统架构和工作流程。
具体地,JSBFuzz的处理流程主要包括如下四个阶段:
1.JSBFuzz预处理阶段
JSBFuzz的预处理阶段的主要任务是把语料库中的种子文件分解为高度为2的AST子树序列,由于通过解析JavaScript语言程序文件得到的AST树具有严密的结构和逻辑特征,其AST子树按照先序排列得到的AST子树序列拥有类似于自然语言的结构特征,因此每个AST子树可以作为BERT语言模型的输入词汇,整个AST子树序列可以作为BERT语言模型的输入段落Paragraph,算法1展示了AST子树序列和BERT输入词汇vocab和分句sentence的构建,如图4所示。
算法1的输入为语料库中的所有种子文件seeds和JavaScript语法文件。算法首先对输入的种子进行解析,得到AST树并存储相应的变量映射,变量映射可以保证种子变异不会出现变量混淆。如果种子无法解析,则将有错误的种子文件抛弃(1-6行)。接下来我们定义初始化本种子的子树序列astlist,句子sentence和段落paragraph为空列表,用travel函数对AST树进行递归遍历,构建AST子树序列、分句sentence和段落paragraph并将相关信息保存(7-9行)。
10-28行是travel函数的具体实现。travel函数首先对ast树进行递归遍历,对每个节点依次进行判断,如果节点的父节点类型为“Program”,则说明该节点为一个语句的起始节点,我们把上一句添加到段落paragraph中,并重新初始化句子sentence(11-15行)。如果这个节点node有子节点,则把这个节点的修剪子树和父节点信息以及父节点类型信息添加到astlist中,把单独的修剪子树添加到sentence中,并对这个node进行travel(16-24行)。如果此节点没有子节点,说明这个节点已经是终结符的内容表示,此时更新vocab后退出当前递归。
2.JSBFuzz训练阶段
训练阶段的任务是通过机器学习训练出能够自动生成符合JavaScript语法规则和语义逻辑的测试用例的BERT语言模型,训练阶段分为预训练和下游任务微调两个部分。
2.1.JSBFuzz训练阶段之预训练
预训练阶段我们首先要对BERT模型进行简化,BERTbase模型拥有12层和12个注意力头,隐藏层输出维度768,总参数数量110M,BERTLARGE拥有24层和16个注意力头,隐藏层维度1024,总参数数量340M,BERT训练词汇总数3300M,然而JSBFuzz的vocab中只有2.17M词汇,12.32万个句子,需要简化BERT模型来保证训练过程中不出现过拟合现象,通过大量实验,本发明选定的模型使用6个双向transformer Encode层,6个注意力头,输入维度和隐藏层输出维度设置为128和256,总参数数量为1.17M。图5展示了预训练阶段的处理过程。
本发明从sentence集合中按照50%的概率选择相邻和不相邻的句子对,BERT输入序列的嵌入是词元嵌入、句子嵌入和位置嵌入之和,每个词元,句子标记和位置标记都转化为一个128维的向量,输入数据通过简化的BERT模型,通过BERT模型中MLM和下一句预测(NSP)这两个预训练任务进行特征提取,学习JavaScript语言的语法和语义信息。
2.2.JSBFuzz训练阶段之fine-tuning(微调)
通过预训练我们得到了一个拥有JavaScript语法和语义特征的初始BERT模型,然而这个BERT模型中的MLM没有匹配AST子树的父节点信息,导致预测的TOP-K片段虽然符合语法规则和语义逻辑但多数无法匹配原序列,从而降低了测试用例的生成效率,为了解决这个问题,我们使用残差网络和MLM相结合进行fine-tuning。大量实验和研究表明,在适当深度的模型中增加更多的层会导致更高的训练误差,这些训练误差并不是由于过拟合引起。残差网络(ResNet)可以很容易地从神经网络深度的增加中获得精度增益,解决了神经网络深度增加而导致更高训练误差的问题。运用残差网络既可以在fine-tuning过程中保证预训练模型提取的特征不被破坏,保留模型的语法语义能力,又能利用子树的父节点信息,从而提高片段预测的准确性。图6展示了fine-tuning阶段的工作过程。
如图6左侧所示,我们首先将AST子树序列输入预训练好的BERT模型,BERT模型的输出接入两个线性神经网络层,该结构是预训练中MLM的输出段,神经网络层的大小分别为(输入长度*BERT模型隐藏维度)和(BERT模型隐藏维度*1024),神经网络层之间采用ReLU作为激活函数,输出与右边的神经网络输出叠加。图6右边的神经网络是对左边输入的AST子树序列的父节点信息处理过程,以AST子树的父节点序列作为输入,经过与图6左边同样结构的神经网络,最终左右两边的神经网络输出叠加后经过ReLU激活和层归一化,归一化结果使用大小为(1024*vocab长度)的线性层统一输出,输出的结果为预测的下一个词的在vocab上的概率分布。由于左边和右边的神经网络叠加使用了残差网络的原理处理,右边的父节点信息处理不会降低预训练模型的精度,下游任务的训练加入了父节点信息提升了整体模型的预测能力。
3.JSBFuzz插装编译阶段
对被测试程序进行插装编译是获取覆盖率信息的基础,而敏感位置标记是进行定向模糊测试的必要过程。
根据研究发现,每个补丁都会增加bug出现的概率,我们用diff工具对比当前版本与过往版本的JavaScript引擎源代码,将补丁位置作为敏感位置标记,用AFLGO的编译工具插装编译生成带有敏感位置信息的插装版本JavaScript引擎程序。本发明通过该JavaScript引擎运行测试用例并获取覆盖率信息。
4.JSBFuzz定向模糊测试阶段
预处理、训练和插装编译三个阶段为模糊测试的准备阶段,定向模糊测试阶段主要任务是使用训练好的BERT语言模型生成大量种子文件作为定向模糊测试的输入。根据图6的工作流程,我们从AST子树序列库中随机选择一个AST子树序列,选择15%的点位进行变异替换,算法2展示了具体的测试用例生成算法,如图7所示。我们依次对替换点进行处理,对于替换点,我们先获取替换点的父节点和子节点,将替换点和子节点全部删除(1-8行),从父节点开始运用JavaScript测试用例生成模型生成子节点,子节点从生成的TOP-K个预选节点中选取,如果这个子节点为非终结符,我们继续从该子节点生成下一个节点(9-20行),为了避免无限递归生成,我们限定生成的子树高度为50,超过子树高度的节点我们使用语法规则强制生成一个终结符来结束生成程序,并以此保证生成子树的合法性(22行)。变异后的AST树还原成JavaScript测试用例(24行)作为定向模糊测试的输入,定向模糊测试我们采用与AFLGO相同的模拟退火算法,AFLGO作为成熟的定向模糊测试工具,模拟退火算法作为其核心算法保证了JSBFuzz定向模糊测试的稳定性和有效性。
为了验证JSBFuzz的可行性和有效性,本实施例用JSBFuzz与开源JavaScript引擎测试工具Montage、CodeAlchemist和Superion在JerryScript、ChakraCore和JavaScriptCore上分别对漏洞发现能力、代码覆盖率、测试用例生成速度和有效测试用例生成率四个方面进行对比。本实施例的模型训练和模糊测试都在一台CPU为AMD5950X-16核32线程,物理内存为DDR-4-3600MHz-64GB,显卡为NVIDIA-RTX3080TI-12G的服务器上。操作系统为Ubuntun 20.04Server。
(1)模型训练
JSBFuzz训练需要大量的输入文本,我们从GitHub、ECMA项目、TEST262项目等网站共收集JavaScript文件4万余个,这些文件包含了当前版本的JavaScript引擎能够解析的所有语法规则,保证了模糊测试的全面性。
预处理阶段,本实施例使用esprima4.0.1分32个线程解析JavaScript种子文件,经过18分钟的解析和处理,共得到2172843个词汇和123207个句子,通过对词汇的清洗和去重处理,我们得到的vocab中包含有13252个唯一词汇。
预训练阶段,本实施例选用pytorc1.10.1+CUDA11.3作为建立语言模型基础支持,选定的模型使用6个双向transformer Encode层,6个注意力头,输入维度和隐藏层输出维度设置为128和256,总参数数量为1.17M。为了平衡性能和显存不足之间的矛盾,本实施例设置batch-size为256,总训练步设置为2M。为了提高训练质量,加快收敛的同时不发生梯度消失的现象,本实施例选用Adam训练优化器,设置学习率为10-3,采用交叉熵函数分别计算MLM和NSP训练损失,两个模型的损失相加作为训练总损失,通过反向传播进行参数更新。JSBFuzz预训练时间耗时30小时,图8展示了JSBFuzz预训练过程中MLM和NSP的损失变化。经过200万步的训练最终MLM的损失降为0.43,NSP的损失降为0.21。
fine-tuning阶段,本实施例采用和预训练相同的方法进行训练,为了保证预训练和下游任务有更好的兼容性,各项训练参数均保持不变,我们进行了10万步的下游任务训练,图9展示了下游任务训练过程中的损失变化情况。经过2小时的下游任务微调后,预测模型的损失从0.43下降到0.28。
(2)漏洞发现能力
本实施例使用JSBFuzz、Montage、CodeAlchemist和Superion分别在JerryScript2.4.0、ChakraCore1.11.0和JavaScriptCore2.27.4上进行了72小时的测试,表1列出了JSBFuzz与其他几个JavaScript引擎模糊测试工具的运行结果对比。结果显示,72小时内JSBFuzz总共发现了9个BUG,比Montage和Superion提高了80%和28.5%,表2列出了JSBFuzz发现的Bug列表,实验结果表明,比起没有使用覆盖率信息的Montage和CodeAlchemist,JSBFuzz和Superion的BUG发现率明显提高,覆盖率信息在JavaScript引擎模糊测试中发挥着重要的作用。
表1JSBFuzz与其他模糊测试工具运行结果对比
表2JSBFuzz发现的BUG列表
(3)代码覆盖能力
本实施例在JavaScripCore上对比JSBFuzz、Montage、CodeAlchemist和Superion的24小时代码覆盖情况,覆盖率信息用afl-cov搜集,图10是以上4个JavaScript引擎模糊测试工具运在JavaScriptCore上的覆盖率信息的具体数据。根据图10所示,JSBFuzz在行覆盖率上比Montage和CodeAlchemist分别提高了30.02%和39.7%;在函数覆盖率上比Montage和CodeAlchemist分别提高了17.97%和25.63%,然而JSBFuzz的行覆盖率和函数覆盖率均低于Superion,这是因为AFLGO的定向模糊技术更多的考虑如何快速逼近目标区域而忽略了整体覆盖率,所以JSBFuzz的运行覆盖率低于Superion。
(4)测试用例生成能力
测试用例生成能力包括测试用例生成速度和测试用例有效性两部分,图11展示了JSBFuzz、Montage、CodeAlchemist和Superion的测试用例生成能力。在测试用例生成速度方面,JSBFuzz和Montage的生成速度明显低于CodeAlchemist和Superion,这是因为JSBFuzz和Montage都是使用自然语言模型生成测试用例,自然语言处理的额外开销影响了测试用例的生成。然而在测试用例有效性方面,JSBFuzz生成的有效测试用例比Montage、CodeAlchemist和Superion提高了17.14%,73.22%和299%,BERT语言模型对JavaScript测试用例生成做出了积极的贡献。
本发明提出了一种基于自然语言处理的JavaScript引擎定向模糊测试方法及系统(JSBFuzz)。JSBFuzz使用简化的BERT语言模型训练JavaScript种子文件的AST子树序列,自动提取JavaScript文件中的语法和语义特征,下游任务的输入增加了AST子树序列对应的父节点序列,使用残差网络和MLM相结合方法进一步提高模型提取JavaScript语法语义特征的准确性,最后结合定向模糊测试技术提升漏洞挖掘的速度和模糊测试的全面性。实验结果表明,JSBFuzz提升了测试用例生成的效率,获得了更高的代码覆盖率,并且发现了9个BUG。
综上,本发明利用自然语言处理技术通过BERT语言模型提取JavaScript语言语法和语义信息,用残差网络和掩码语言模型相结合的技术进行fine-tuning,并结合AFLGO的定向模糊测试技术对JavaScript引擎进行定向模糊测试。BERT语言模型的双向序列处理能力提升了特征提取的精度,残差网络进一步提升了语言模型的准确性,定向模糊测试利用覆盖率信息,提升了漏洞发现的速度和模糊测试的代码覆盖率。本发明兼顾了测试用例生成效率和覆盖率信息利用,大幅度提高了有效测试用例生成率的同时也提高了模糊测试的代码覆盖率。
以上所示仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种基于自然语言处理的JavaScript引擎定向模糊测试方法,其特征在于,包括:
步骤1:将语料库中的JavaScript种子文件解析为抽象语法树AST树,删除有语法错误的种子文件;
步骤2:遍历AST树,构建高度为2的AST子树序列,并基于AST子树序列构建BERT语言模型词汇库vocab和BERT语言模型分句sentence;
步骤3:将vocab和sentence作为BERT语言模型预训练输入,得到BERT预训练模型;
步骤4:基于AST子树序列得到AST子树的父节点序列,利用BERT预训练模型将AST子树的父节点序列作为残差网络的输入,结合掩码语言模型MLM进行微调,得到JavaScript测试用例生成模型;
步骤5:比较各版本JavaScript引擎源文件信息,将补丁位置作为敏感位置,对JavaScript引擎源文件进行插装编译;
步骤6:利用JavaScript测试用例生成模型生成JavaScript测试用例作为定向模糊测试输入文件,对JavaScript引擎进行定向模糊测试。
2.根据权利要求1所述的一种基于自然语言处理的JavaScript引擎定向模糊测试方法,其特征在于,所述步骤2包括:
定义初始化种子的AST子树序列astlist,句子sentence和段落paragraph为空列表,用travel函数对AST树进行递归遍历,构建AST子树序列、分句sentence和段落paragraph并将相关信息保存;travel函数首先对AST树进行递归遍历,对每个节点依次进行判断,如果节点的父节点类型为“Program”,则说明该节点为一个语句的起始节点,把上一句添加到段落paragraph中,并重新初始化句子sentence;如果目标节点node有子节点,则把该节点的修剪子树和父节点信息以及父节点类型信息添加到astlist中,把单独的修剪子树添加到sentence中,并对该node进行遍历;如果该节点没有子节点,说明该节点已经是终结符的内容表示,此时更新vocab后退出当前递归。
3.根据权利要求1所述的一种基于自然语言处理的JavaScript引擎定向模糊测试方法,其特征在于,所述步骤3包括:
将vocab和sentence作为BERT语言模型预训练输入,对BERT模型进行简化用于保证训练过程中不出现过拟合现象,从sentence集合中按比例选择相邻和不相邻的句子对,BERT输入序列的嵌入是词元嵌入、句子嵌入和位置嵌入之和,每个词元、句子标记和位置标记都转化为一个固定维数维的向量,输入数据通过简化的BERT模型,通过BERT模型中MLM和下一句预测这两个预训练任务进行特征提取,学习JavaScript语言的语法和语义信息,最终得到BERT预训练模型。
4.根据权利要求1所述的一种基于自然语言处理的JavaScript引擎定向模糊测试方法,其特征在于,所述步骤4包括:
在BERT预训练模型的基础上,增加微调结构,所述微调结构包括两个线性神经网络层,及两个神经网络层之间的ReLU函数;两个神经网络层的大小分别为{输入长度*BERT模型隐藏维度}和{BERT模型隐藏维度*1024};该微调结构的输出与BERT预训练模型中MLM输出段的输出叠加;所述MLM输出段与微调结构组成相同;
将AST子树序列、AST子树的父节点序列分别输入简化的BERT模型、微调机构进行处理,最终BERT预训练模型中MLM输出段的输出、微调机构输出叠加后经过ReLU激活和层归一化,归一化结果使用大小为{1024*vocab长度}的线性层统一输出,输出的结果为预测的下一个词的在vocab上的概率分布。
5.根据权利要求1所述的一种基于自然语言处理的JavaScript引擎定向模糊测试方法,其特征在于,所述步骤6包括:
随机选择一个AST子树序列,选择一定比例的点位进行变异替换,依次对替换点进行处理,对于替换点,先获取替换点的父节点和子节点,将替换点和子节点全部删除,从父节点开始运用JavaScript测试用例生成模型生成子节点,所述子节点从生成的TOP-K个预选节点中选取,如果该子节点为非终结符,继续从该子节点生成下一个节点,限定生成的子树高度阈值,超过子树高度阈值的节点强制生成一个终结符来结束生成程序,并以此保证生成子树的合法性;将变异后的AST树还原成JavaScript测试用例作为定向模糊测试的输入,对JavaScript引擎进行定向模糊测试。
6.一种基于自然语言处理的JavaScript引擎定向模糊测试系统,其特征在于,包括:
解析模块,用于将语料库中的JavaScript种子文件解析为抽象语法树AST树,删除有语法错误的种子文件;
构建模块,用于遍历AST树,构建高度为2的AST子树序列,并基于AST子树序列构建BERT语言模型词汇库vocab和BERT语言模型分句sentence;
预训练模块,用于将vocab和sentence作为BERT语言模型预训练输入,得到BERT预训练模型;
微调模块,用于基于AST子树序列得到AST子树的父节点序列,利用BERT预训练模型将AST子树的父节点序列作为残差网络的输入,结合掩码语言模型MLM进行微调,得到JavaScript测试用例生成模型;
插装编译模块,用于比较各版本JavaScript引擎源文件信息,将补丁位置作为敏感位置,对JavaScript引擎源文件进行插装编译;
模糊测试模块,用于利用JavaScript测试用例生成模型生成JavaScript测试用例作为定向模糊测试输入文件,对JavaScript引擎进行定向模糊测试。
7.根据权利要求6所述的一种基于自然语言处理的JavaScript引擎定向模糊测试系统,其特征在于,所述构建模块具体用于:
定义初始化种子的AST子树序列astlist,句子sentence和段落paragraph为空列表,用travel函数对AST树进行递归遍历,构建AST子树序列、分句sentence和段落paragraph并将相关信息保存;travel函数首先对AST树进行递归遍历,对每个节点依次进行判断,如果节点的父节点类型为“Program”,则说明该节点为一个语句的起始节点,把上一句添加到段落paragraph中,并重新初始化句子sentence;如果目标节点node有子节点,则把该节点的修剪子树和父节点信息以及父节点类型信息添加到astlist中,把单独的修剪子树添加到sentence中,并对该node进行遍历;如果该节点没有子节点,说明该节点已经是终结符的内容表示,此时更新vocab后退出当前递归。
8.根据权利要求6所述的一种基于自然语言处理的JavaScript引擎定向模糊测试系统,其特征在于,所述预训练模块具体用于:
将vocab和sentence作为BERT语言模型预训练输入,对BERT模型进行简化用于保证训练过程中不出现过拟合现象,从sentence集合中按比例选择相邻和不相邻的句子对,BERT输入序列的嵌入是词元嵌入、句子嵌入和位置嵌入之和,每个词元、句子标记和位置标记都转化为一个固定维数维的向量,输入数据通过简化的BERT模型,通过BERT模型中MLM和下一句预测这两个预训练任务进行特征提取,学习JavaScript语言的语法和语义信息,最终得到BERT预训练模型。
9.根据权利要求6所述的一种基于自然语言处理的JavaScript引擎定向模糊测试系统,其特征在于,所述微调模块具体用于:
在BERT预训练模型的基础上,增加微调结构,所述微调结构包括两个线性神经网络层,及两个神经网络层之间的ReLU函数;两个神经网络层的大小分别为{输入长度*BERT模型隐藏维度}和{BERT模型隐藏维度*1024};该微调结构的输出与BERT预训练模型中MLM输出段的输出叠加;所述MLM输出段与微调结构组成相同;
将AST子树序列、AST子树的父节点序列分别输入简化的BERT模型、微调机构进行处理,最终BERT预训练模型中MLM输出段的输出、微调机构输出叠加后经过ReLU激活和层归一化,归一化结果使用大小为{1024*vocab长度}的线性层统一输出,输出的结果为预测的下一个词的在vocab上的概率分布。
10.根据权利要求6所述的一种基于自然语言处理的JavaScript引擎定向模糊测试系统,其特征在于,所述模糊测试模块具体用于:
随机选择一个AST子树序列,选择一定比例的点位进行变异替换,依次对替换点进行处理,对于替换点,先获取替换点的父节点和子节点,将替换点和子节点全部删除,从父节点开始运用JavaScript测试用例生成模型生成子节点,所述子节点从生成的TOP-K个预选节点中选取,如果该子节点为非终结符,继续从该子节点生成下一个节点,限定生成的子树高度阈值,超过子树高度阈值的节点强制生成一个终结符来结束生成程序,并以此保证生成子树的合法性;将变异后的AST树还原成JavaScript测试用例作为定向模糊测试的输入,对JavaScript引擎进行定向模糊测试。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210801485.9A CN115237760A (zh) | 2022-07-08 | 2022-07-08 | 一种基于自然语言处理的JavaScript引擎定向模糊测试方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210801485.9A CN115237760A (zh) | 2022-07-08 | 2022-07-08 | 一种基于自然语言处理的JavaScript引擎定向模糊测试方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115237760A true CN115237760A (zh) | 2022-10-25 |
Family
ID=83671003
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210801485.9A Pending CN115237760A (zh) | 2022-07-08 | 2022-07-08 | 一种基于自然语言处理的JavaScript引擎定向模糊测试方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115237760A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116701235A (zh) * | 2023-08-04 | 2023-09-05 | 上海安般信息科技有限公司 | 一种基于语法正确变异和语义有效实例化的模糊测试方法 |
CN117033248A (zh) * | 2023-10-08 | 2023-11-10 | 中国海洋大学 | 一种基于程序状态反馈和控制流图的Web模糊测试方法 |
CN117634459A (zh) * | 2024-01-24 | 2024-03-01 | 山东海量信息技术研究院 | 目标内容生成及模型训练方法、装置、系统、设备及介质 |
CN117687902A (zh) * | 2023-11-20 | 2024-03-12 | 北京计算机技术及应用研究所 | 一种面向模糊测试的种子挖掘方法 |
CN117762415A (zh) * | 2023-11-17 | 2024-03-26 | 北京计算机技术及应用研究所 | 一种面向模糊测试的抽象语法树变异方法 |
-
2022
- 2022-07-08 CN CN202210801485.9A patent/CN115237760A/zh active Pending
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116701235A (zh) * | 2023-08-04 | 2023-09-05 | 上海安般信息科技有限公司 | 一种基于语法正确变异和语义有效实例化的模糊测试方法 |
CN116701235B (zh) * | 2023-08-04 | 2023-10-31 | 上海安般信息科技有限公司 | 一种基于语法正确变异和语义有效实例化的模糊测试方法 |
CN117033248A (zh) * | 2023-10-08 | 2023-11-10 | 中国海洋大学 | 一种基于程序状态反馈和控制流图的Web模糊测试方法 |
CN117033248B (zh) * | 2023-10-08 | 2024-01-26 | 中国海洋大学 | 一种基于程序状态反馈和控制流图的Web模糊测试方法 |
CN117762415A (zh) * | 2023-11-17 | 2024-03-26 | 北京计算机技术及应用研究所 | 一种面向模糊测试的抽象语法树变异方法 |
CN117687902A (zh) * | 2023-11-20 | 2024-03-12 | 北京计算机技术及应用研究所 | 一种面向模糊测试的种子挖掘方法 |
CN117634459A (zh) * | 2024-01-24 | 2024-03-01 | 山东海量信息技术研究院 | 目标内容生成及模型训练方法、装置、系统、设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN115237760A (zh) | 一种基于自然语言处理的JavaScript引擎定向模糊测试方法及系统 | |
Brockschmidt et al. | Generative code modeling with graphs | |
Bille et al. | Random access to grammar-compressed strings and trees | |
CN112215013B (zh) | 一种基于深度学习的克隆代码语义检测方法 | |
CN112416806B (zh) | 一种基于标准文档分析的js引擎模糊测试方法 | |
Sakakibara | Learning context-free grammars using tabular representations | |
CN109857458B (zh) | 基于ANTLR的AltaRica 3.0的扁平化的转化方法 | |
CN114816517B (zh) | 一种层次语义感知的代码表示学习方法 | |
He et al. | Compact reachability labeling for graph-structured data | |
CN115543437B (zh) | 一种代码注释生成方法和系统 | |
CN115048141A (zh) | 一种基于图引导的Transformer模型代码注释自动生成方法 | |
CN113487024A (zh) | 交替序列生成模型训练方法、从文本中抽取图的方法 | |
Yuan et al. | From local to global semantic clone detection | |
CN115630368A (zh) | 基于自然语言处理与深度森林的Java漏洞分类方法 | |
Xiong et al. | Transferable natural language interface to structured queries aided by adversarial generation | |
CN115168402A (zh) | 训练序列生成模型的方法及装置 | |
CN117573084B (zh) | 一种基于逐层融合抽象语法树的代码补全方法 | |
CN112148879B (zh) | 一种自动给代码打数据结构标签的计算机可读存储介质 | |
JP5734917B2 (ja) | 並べ替えモデル学習装置、方法、及びプログラム、並びに翻訳装置、方法、及びプログラム | |
CN114254657A (zh) | 一种翻译方法及其相关设备 | |
CN111859929A (zh) | 一种数据可视化方法、装置及其相关设备 | |
Saha | Faster language edit distance, connection to all-pairs shortest paths and related problems | |
Zvada et al. | Improving grammar-based evolutionary algorithms via attributed derivation trees | |
KR20050065015A (ko) | 프로그램의 복제 여부를 검사하는 방법 및 시스템 | |
CN112650680B (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 |