ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

AI逆向工程攻防:对抗样本如何欺骗二进制分析智能体

AI逆向工程攻防:对抗样本如何欺骗二进制分析智能体 1. 项目概述当AI成为逆向工程的“双刃剑”最近在安全研究圈里一个话题的热度正在悄然攀升利用AI自动攻击那些专门用于软件逆向工程的AI智能体。这听起来有点像是“AI vs. AI”的科幻场景但背后反映的是一个非常现实且深刻的技术演进趋势。传统的软件逆向工程一直是安全研究员、恶意软件分析师和软件保护开发者之间一场旷日持久的攻防战。研究员们需要耗费大量时间手动或半自动地分析二进制代码理解其逻辑、寻找漏洞或提取算法。而近年来基于大语言模型LLM和深度学习的AI智能体正被训练来理解汇编指令、恢复伪代码、识别函数边界甚至自动挖掘漏洞极大地提升了逆向分析的效率和自动化程度。然而任何强大的自动化工具一旦被广泛应用其自身就会成为新的攻击面。这个项目的核心就是探索如何系统性地、自动化地对这些“逆向工程AI助手”发起攻击。其目标并非破坏某个具体软件而是针对AI模型在理解代码语义、结构时的固有弱点精心构造对抗性样本Adversarial Examples诱导其产生错误的、甚至是有害的分析结果。比如让一个旨在识别恶意软件的AI分析引擎将一段无害代码误判为高危或者让一个代码恢复工具输出完全错误但看似合理的伪代码逻辑。这背后的需求是多层次的。对于防御方如AI逆向工具开发者理解这些攻击手法是加固模型、提升鲁棒性的必经之路。对于攻击方如软件保护方案提供商这提供了一种新的、基于AI的混淆或对抗思路以保护核心知识产权或算法逻辑。而对于整个安全社区这更是一场关于“AI安全性”的深度实践迫使我们去思考当AI开始处理安全关键任务时我们该如何确保其决策的可靠性和抗干扰能力这个项目适合所有对软件安全、AI安全、逆向工程以及前沿攻防技术感兴趣的研究者和工程师无论你是想加固自己的AI工具还是想探索下一代软件保护技术这里都有值得深挖的干货。2. 攻击面分析与核心思路拆解要自动攻击一个逆向工程AI智能体首先得把它当成一个“黑盒”或“灰盒”系统来解构。这里的攻击面远不止于向模型输入一段代码那么简单。我们需要从数据流、任务链和模型依赖等多个维度寻找其最脆弱的环节。2.1 逆向工程AI智能体的典型工作流一个现代的、基于AI的逆向分析智能体其工作流程通常是流水线式的。它可能始于一个二进制文件如PE、ELF经过预处理反汇编、控制流恢复、符号提取后将中间表示如汇编代码块、控制流图CFG、函数调用图喂给核心的AI模型。这个AI模型可能承担多种任务函数识别与重命名、变量类型恢复、代码语义摘要、漏洞模式匹配、恶意行为分类等。最后智能体将模型的输出进行后处理生成人类可读的报告或集成到交互式反汇编工具如IDA Pro、Ghidra中。攻击点就分布在这个流水线的每一个阶段输入预处理阶段反汇编器本身可能存在歧义或可被操纵。例如通过构造特殊的指令序列或节区头可以干扰反汇编的准确性导致生成错误的汇编代码流进而污染AI模型的输入。特征表示阶段AI模型通常不直接处理原始汇编文本而是依赖于某种向量化表示如通过Word2Vec、BERT或专用指令嵌入模型将指令或基本块转换为特征向量。攻击可以针对这种嵌入空间进行。核心模型推理阶段这是最主要的攻击面。利用模型对输入扰动的敏感性通过添加难以察觉的“扰动”到输入数据中使模型产生高置信度的错误输出。在逆向工程语境下这种扰动就是对二进制代码或其中间表示的微小修改。输出后处理与决策阶段如果智能体根据AI的输出自动执行某些操作如标记函数为“危险”并隔离那么误导输出就可能触发非预期的自动化行为。2.2 自动化攻击的核心设计思路基于以上分析自动化攻击系统的设计需要遵循几个核心原则原则一黑盒优先兼顾白盒。在实际攻击场景中我们往往无法获取目标AI模型的内部架构、参数和训练数据黑盒。因此攻击方法必须主要依赖于黑盒或灰盒技术。我们可以通过查询目标智能体的API或观察其输入输出行为来构建一个替代模型Surrogate Model然后针对这个替代模型生成对抗样本并期望这些样本对原始目标模型也具有迁移性。原则二保持代码功能不变性。这是与图像、文本领域对抗攻击最大的不同。我们对二进制代码添加的扰动绝不能改变其原始的执行语义和功能。否则攻击就变成了简单的代码破坏失去了隐蔽性和针对性。因此扰动必须局限于那些不影响程序实际行为的代码区域例如在指令间隙NOP sled、未使用的数据段、或通过语义等价的指令替换来实现。原则三扰动需对传统分析透明。理想的对抗性扰动应该能被标准反汇编器、调试器正常解析不会引起人类分析师的警觉。它应该专注于欺骗AI模型对代码“语义”或“意图”的理解而不是制造低级解析错误。原则四攻击需具任务针对性。针对不同的逆向任务如漏洞挖掘、恶意软件分类、代码恢复需要设计不同的对抗目标。例如对于分类任务目标是让模型错误分类对于生成任务如代码恢复目标是让其生成逻辑混乱但语法正确的伪代码。基于这些原则一个自动化攻击系统的典型工作流是首先对目标二进制进行基础分析识别出可插入扰动的“安全区域”然后根据攻击目标如误导分类、污染恢复使用优化算法如遗传算法、基于梯度的优化——如果在白盒或替代模型上可行搜索有效的扰动模式最后将扰动应用到二进制中生成对抗样本并提交给目标AI智能体进行验证。注意所有研究和实验必须在完全合法、授权的环境下进行例如针对自己训练的开源模型或在获得明确许可的测试平台上。攻击未经授权的第三方服务或模型是非法且不道德的。3. 关键技术点与对抗样本生成方法实现有效的自动化攻击依赖于几项关键技术的组合。这些技术借鉴了机器学习对抗攻击领域的成果并针对软件二进制这一特殊领域进行了适配和创新。3.1 二进制代码的对抗扰动空间定义在图像中扰动是像素值的微小变化。在二进制中我们的“像素”是什么可行的扰动空间包括指令级替换用语义等价的指令或指令序列替换原指令。例如mov eax, 0可以替换为xor eax, eaxpush ebp; mov ebp, esp序言可以有多种变体。这需要维护一个庞大的等价指令映射表并考虑指令长度变化对跳转目标地址的影响。控制流等价变换改变控制流的结构但不改变逻辑。例如将简单的条件跳转改为通过中间跳转表实现插入永假或永真的条件分支其不可达分支中包含扰动指令。代码空洞利用在函数对齐填充、节区对齐间隙中插入无效指令NOP或等效指令。这是最安全但空间有限的方式。数据段注入在只读数据段如.rdata或未初始化数据段.bss中插入特定的字节序列这些序列可能被AI模型在分析代码交叉引用时读取从而影响其上下文理解。元信息污染修改或添加调试符号、节区名称、时间戳等PE/ELF文件头信息。一些AI模型可能会将这些元信息作为辅助特征。定义一个丰富且灵活的扰动空间是生成有效对抗样本的基础。自动化工具需要能够分析二进制识别出所有可应用上述扰动的候选位置。3.2 黑盒攻击基于遗传算法与查询优化的方法由于无法获得目标模型的梯度黑盒攻击主要依赖基于搜索的优化方法。遗传算法GA在这里非常适用。染色体编码将一个对抗样本编码为一条染色体。例如染色体可以是一个列表每个基因代表在二进制文件某个偏移处应用的一种特定扰动操作如“在偏移0x400处替换为等价指令序列B”。适应度函数这是攻击目标的核心体现。我们需要通过向目标AI智能体提交样本并解析其响应来计算适应度。对于分类任务如恶意/良性适应度函数可以是置信度(目标错误类别) - 置信度(原始正确类别)。我们的目标是最大化这个值。对于代码恢复任务适应度评估更复杂。可以定义一些指标如恢复出的伪代码与原始代码在关键变量名、控制流结构上的差异度或者引入特定错误模式如将循环条件颠倒的成功率。这可能需要结合自然语言处理技术来分析AI输出的文本。种群进化随机初始化一组染色体即一组不同的扰动方案生成对抗样本种群。对每个样本查询目标模型计算适应度。然后进行选择、交叉交换不同样本的扰动片段、变异随机改变某个扰动操作操作产生新一代种群。迭代此过程直到找到适应度足够高的个体即成功的对抗样本。查询效率优化频繁查询目标模型可能引起注意或被限流。因此需要引入一些策略如使用代理模型进行预筛选只将最有希望的样本提交给真实目标或者采用贝叶斯优化等更高效的全局搜索算法。3.3 灰盒/白盒攻击基于梯度与可微编程如果我们拥有目标模型的部分信息如模型架构即灰盒甚至完全了解其参数白盒通常只在自己的模型上用于研究就可以使用更强大、更高效的基于梯度的方法。构建可微的二进制处理管道这是最大的挑战。我们需要将离散的二进制指令序列映射到一个连续的、可微的表示空间。一种前沿的方法是使用可微编程的思想。我们可以训练一个指令嵌入层将每条指令映射为一个固定维度的向量。将二进制程序表示为指令向量的序列或者进一步通过图神经网络处理其控制流图。关键的一步是将“应用扰动”这个离散操作如替换指令建模为一个可微的采样过程。例如在某个位置我们不是硬性选择指令A或B而是计算一个选择所有可能指令的概率分布并通过Gumbel-Softmax技巧进行可微分近似使得梯度能够从模型损失反向传播到这个概率分布上。计算对抗损失与梯度定义攻击目标对应的损失函数。例如对于误导分类损失函数就是模型对正确类别的负对数似然。然后计算损失相对于指令嵌入向量或指令选择概率的梯度。生成扰动根据梯度方向更新指令嵌入或选择概率。对于嵌入可以通过在嵌入空间中添加一个小的扰动向量来实现对于指令选择则根据更新后的概率采样新的指令。由于需要保持功能等价每次更新后都需要通过一个“语义等价性验证”模块进行过滤确保修改后的代码序列与原始序列在预设的语义约束下等价。实操心得在实际操作中纯白盒攻击的研究价值大于实用价值因为很难获得商业AI逆向工具的模型。但它是理解和评估模型脆弱性的黄金标准。更实用的路径是“灰盒”攻击针对某个开源或已知架构的AI逆向模型如基于BERT的二进制代码理解模型进行白盒攻击生成对抗样本然后测试这些样本对其他未知模型黑盒的迁移攻击成功率。高迁移性意味着发现了该领域AI模型的共性弱点。3.4 功能不变性验证技术确保对抗扰动不改变程序功能是铁律。自动化系统必须集成强大的验证模块。动态执行验证在沙箱或模拟器如QEMU, Unicorn Engine中执行原始程序和对抗程序给定相同的输入种子比较它们的输出、系统调用序列、内存状态变化等。这是最直接的验证方法但覆盖所有执行路径是挑战。形式化等价性检查对于小的代码片段如单个基本块可以使用定理证明器或SMT求解器如Z3来证明修改前后的代码在数学上是等价的。例如将x86汇编指令转换为中间逻辑表示然后证明在任意初始状态下执行后得到的状态相同。符号执行结合结合符号执行来探索更多路径提高动态验证的覆盖率。但面对大型二进制时可扩展性是个问题。保守的扰动规则在设计扰动空间时就采用一组被证明是语义保持的转换规则。例如只使用经过形式化验证的指令等价替换表或者只在绝对不执行的代码区如由永假条件保护的分支插入扰动。在实际的自动化攻击工具链中通常会混合使用动态验证和保守规则。对于每个生成的候选对抗样本先应用保守规则进行快速过滤再对通过筛选的样本进行有限的动态测试以确保基本功能不变。4. 自动化攻击系统的实现架构纸上谈兵终觉浅我们来勾勒一个具备实操性的自动化攻击系统的基本架构。这个架构分为几个核心模块可以用Python作为粘合剂集成各种现有的二进制分析框架和机器学习库。4.1 系统模块组成一个典型的系统可能包含以下模块二进制加载与分析前端工具使用lief或pefile/elftools进行文件格式解析。使用capstone或keystone进行反汇编和汇编。功能加载目标二进制进行基础静态分析识别函数、基本块、指令流、控制流图可使用angr、binaryninja或Ghidra的无头模式。核心任务是构建程序的中间表示并标记出所有潜在的、安全的扰动插入点。扰动策略与生成引擎功能这是系统的核心“武器库”。它维护着多种扰动策略等价指令库一个庞大的数据库记录着不同架构x86/x64, ARM下语义等价的指令序列对。控制流混淆模板预定义的一些控制流变换模式。代码空洞扫描器精确计算二进制中各处的对齐填充空间。工作流程接收分析前端提供的“安全位置”列表根据攻击配置如扰动强度、偏好策略在这些位置上实例化具体的扰动操作生成修改后的代码块。对抗样本优化器功能实现具体的攻击算法。如果是黑盒攻击这里会实现遗传算法、贝叶斯优化的主循环。它会调用“样本评估器”来获取适应度并驱动扰动引擎生成新的候选样本。如果是灰盒/白盒研究这个模块会包含可微编程框架如PyTorch/TensorFlow实现指令嵌入层、图神经网络模型以及基于梯度的扰动生成逻辑。样本评估器功能作为与目标AI智能体交互的桥梁。它负责将生成的对抗样本二进制重新打包成可执行文件如果需要然后通过API调用、命令行工具或模拟交互的方式提交给目标逆向AI进行分析。关键任务解析AI智能体的返回结果可能是JSON格式的报告、分类标签、置信度分数、恢复的伪代码文本并根据攻击目标计算出量化的“攻击成功度”或适应度分数反馈给优化器。功能等价性验证器工具集成Unicorn Engine进行快速的动态指令级模拟或使用angr进行更复杂的符号执行。功能对原始样本和每一个候选对抗样本运行一组预定义的测试用例或进行符号执行探索比较关键寄存器、内存区域和输出的状态。只有通过验证的样本才会被提交给评估器。攻击配置与管理台功能提供命令行或简单的图形界面让用户指定目标二进制、攻击类型如误导分类为良性、目标AI智能体的接口信息、优化算法参数、迭代次数等。4.2 核心工作流程与数据流整个系统的自动化流程可以描述如下初始化用户配置攻击任务系统加载目标二进制。分析阶段分析前端对二进制进行深度扫描输出一个包含所有函数、基本块、指令列表以及安全扰动位置图谱的中间表示IR。优化循环 a.生成候选优化器根据当前策略如遗传算法中的种群指示扰动引擎在安全位置图谱上应用一系列扰动生成一个修改后的二进制内存映像候选对抗样本。 b.功能验证验证器快速测试候选样本。如果功能改变则丢弃该候选回到步骤a生成新候选如果通过进入下一步。 c.提交评估评估器将候选样本提交给目标AI智能体获取分析结果并计算适应度分数。 d.反馈与迭代优化器接收适应度分数根据算法更新其内部状态如遗传算法中进行选择、交叉、变异产生下一批候选样本的生成指令。终止与输出当达到预设的迭代次数或找到了适应度超过阈值即攻击成功的样本时循环终止。系统输出最终成功的对抗样本二进制文件以及详细的攻击报告包括应用的扰动位置、类型以及AI智能体被误导的具体输出。4.3 工具链选型与集成示例以下是一个可能的技术栈示例用于构建一个侧重于黑盒攻击的原型系统# 伪代码示例展示核心模块的交互 import lief # 二进制操作 import capstone # 反汇编 import unicorn # 功能验证 import requests # 与AI智能体API通信 import numpy as np from evolutionary_algorithm import EvolutionaryOptimizer class AutoREAttackAgent: def __init__(self, target_binary_path, target_ai_api_url): self.binary lief.parse(target_binary_path) self.api_url target_ai_api_url self.original_bytes bytearray(self.binary.get_section(.text).content) self.analyzer BinaryAnalyzer(self.binary) # 自定义分析类 self.perturbator PerturbationEngine() # 自定义扰动引擎 self.verifier UnicornVerifier() # 基于Unicorn的验证器 self.evaluator AIAgentEvaluator(self.api_url) # 评估器 def find_safe_locations(self): 分析二进制找到所有可插入扰动的安全位置如NOP空间、等价指令替换点 # 使用capstone遍历.text段识别指令边界 # 分析控制流识别不可达代码区域 # 返回一个安全位置列表每个位置包含偏移量、允许的扰动类型等元数据 return self.analyzer.analyze() def attack(self, target_classbenign, iterations100): safe_locs self.find_safe_locations() optimizer EvolutionaryOptimizer(safe_locs, self.perturbator) for i in range(iterations): population optimizer.generate_population() # 一组扰动方案 for individual in population: # 1. 应用扰动生成候选二进制 candidate_bytes self.apply_perturbations(self.original_bytes.copy(), individual) # 2. 功能验证 if not self.verifier.verify(self.original_bytes, candidate_bytes): continue # 丢弃无效个体 # 3. 评估查询AI智能体 fitness self.evaluator.evaluate(candidate_bytes, target_class) individual.fitness fitness # 记录成功样本 if fitness SUCCESS_THRESHOLD: self.save_adversarial_example(candidate_bytes, individual) # 4. 进化下一代 optimizer.evolve(population)这个框架勾勒出了一个可工作的原型。在实际开发中每一个模块如BinaryAnalyzer,PerturbationEngine都需要大量的细节实现特别是维护一个准确且全面的指令等价库以及设计高效的功能验证方案。5. 实战场景与效果评估理论和方法最终需要实战检验。我们设想几个具体的攻击场景并探讨如何评估攻击效果。5.1 场景一误导恶意软件分类AI假设有一个云端AI服务用户上传可疑二进制文件它返回一个恶意软件家族分类标签及置信度。攻击目标将一个真实的恶意软件样本如勒索软件通过添加对抗性扰动使得AI模型将其分类为“良性”或一个完全无关的、低威胁的家族。攻击步骤获取一个已知的恶意软件样本作为种子。使用自动化攻击系统以“最大化被分类为‘Benign’的置信度”为适应度函数。系统在样本的代码段中寻找安全位置尝试插入各种语义保持的扰动。每次迭代中将修改后的样本提交给目标AI服务API获取分类结果和置信度计算适应度。经过数百至数千次查询后系统输出一个对抗样本。该样本在沙箱中行为与原样本一致但AI服务却以高置信度认为它是无害的。效果评估指标攻击成功率在测试集上成功将恶意样本误分类为良性的比例。置信度偏移对抗样本在目标错误类别上的置信度提升值以及在原始正确类别上的置信度下降值。扰动隐蔽性统计添加的扰动字节数占总代码大小的比例、扰动引入的指令条数等。比例越低隐蔽性越好。功能保持度通过动态执行或符号执行验证对抗样本与原始样本在关键行为上的一致性。5.2 场景二污染代码恢复与反编译输出假设有一个集成在IDA Pro或Ghidra中的AI插件能够将汇编代码自动恢复成可读性更高的伪代码如类C代码。攻击目标让AI恢复出的伪代码包含严重的逻辑错误或误导性信息例如改变循环边界条件、混淆关键的变量关系、甚至插入不存在的API调用。攻击步骤目标是一个已知函数例如一个加密算法中的核心轮函数。适应度函数需要更复杂的设计。例如可以先用标准反编译器如Ghidra原生生成一个参考伪代码Ref。然后对于AI恢复的伪代码Adv计算两者在抽象语法树AST层面的差异度或者使用代码相似性度量如基于TF-IDF或代码嵌入的余弦相似度并设定我们希望Adv偏离Ref的方向如故意引入特定的错误模式。攻击系统优化扰动使得AI输出的Adv与Ref的差异度最大化同时Adv在语法上仍然是正确的。效果评估指标语义偏离度通过自动化工具或人工评估对比对抗样本与原始样本反编译代码在关键逻辑上的差异。可以定义一套“逻辑错误模式”进行检查。可读性迷惑性生成的错误伪代码是否在语法上看起来合理足以欺骗依赖AI输出的分析师。这可能需要人工评审打分。分析时间误导测量一个人类分析师在阅读被污染的伪代码后得出正确理解所需的时间与原伪代码相比是否显著增加。5.3 场景三对抗漏洞挖掘AI助手一些AI工具被训练用于在二进制代码中自动识别潜在的漏洞模式如栈缓冲区溢出、格式化字符串漏洞。攻击目标有两种子目标漏报攻击在一个真实存在漏洞的代码处添加扰动使AI工具无法检测到该漏洞。误报攻击在一段安全的代码处添加扰动诱导AI工具错误地报告存在漏洞。攻击步骤与分类攻击类似但适应度函数直接针对漏洞检测结果。对于漏报攻击适应度是“漏洞置信度的降低值”对于误报攻击适应度是“漏洞置信度的增加值”。效果评估指标检测率变化在包含已知漏洞的测试集上计算AI工具在原始样本和对抗样本上的漏洞检测率Recall和误报率False Positive Rate的变化。漏洞特征污染分析扰动是否故意模仿或破坏了AI模型所依赖的漏洞特征模式。实操心得评估环节最大的挑战在于获取高质量的目标模型响应。对于商业闭源AI查询次数可能受限成本高。因此前期研究多在开源模型如基于BERT的二进制代码模型或自己训练的替代模型上进行。评估时务必设计控制组确保观察到的效果确实是由对抗扰动引起而非模型本身的不稳定性或随机性。6. 防御对策与未来思考攻击技术的曝光最终是为了促进防御的进步。面对这种新兴的自动化对抗攻击逆向工程AI的开发者可以从多个层面进行加固。6.1 模型层面的防御对抗训练这是提升模型鲁棒性最直接有效的方法之一。在训练模型时不仅使用原始样本还混合加入通过上述方法生成的对抗样本并强制模型学习正确的标签。这相当于让模型“见过”这些攻击手法从而增强免疫力。但对抗训练计算成本高且可能降低模型在干净样本上的准确率。输入规范化与随机化在模型接收输入前对二进制代码进行随机的、但语义保持的变换。例如随机选择一种等价的指令序列替换原指令随机调整代码布局等。这增加了攻击者构造稳定有效对抗样本的难度因为攻击者无法确定模型实际处理的是哪种变换后的版本。集成模型与多样性部署多个不同架构、不同训练数据的AI模型进行集成分析。对抗样本通常对单一模型有效但很难同时欺骗多个差异化的模型。通过投票或平均机制可以过滤掉很多对抗性输入。检测对抗样本训练一个辅助的“检测器”模型专门用于区分正常输入和对抗性输入。这个检测器可以关注输入中不自然的统计特征或模式。6.2 系统层面的防御多模态分析与交叉验证不单纯依赖AI模型的输出。将AI分析结果与传统静态分析、动态分析、符号执行的结果进行交叉验证。当AI给出一个高置信度但反直觉的结论时系统应触发更耗时的传统分析进行复核。人类在环将AI定位为“助手”而非“决策者”。对于关键的分析结论如恶意软件判定、高危漏洞识别必须由人类分析师进行最终审核。自动化攻击可以欺骗AI但很难欺骗经验丰富的人类分析师对程序整体行为的判断。查询监控与异常检测对AI服务接口进行监控检测异常查询模式。例如短时间内来自同一来源对同一文件进行大量细微变异的查询可能就是在进行黑盒优化攻击。可以实施速率限制、请求指纹识别等机制。6.3 对软件保护与攻防生态的影响这项技术的研究反过来也会影响软件保护领域。新一代混淆技术传统的混淆技术旨在增加人类分析师的难度。现在可以设计专门针对AI模型弱点的混淆方案作为保护关键代码的新层。这种混淆可能对人类阅读影响较小但能有效干扰自动化AI分析工具。动态防御软件可以在运行时检测是否处于被AI辅助工具分析的环境例如通过检测特定的调试器或模拟器特征如果发现则激活一套专门针对AI分析的对抗性代码路径。攻防博弈升级这标志着软件安全攻防进入了一个新的维度——机器学习安全与传统软件安全的交叉点。未来的安全专家不仅需要懂汇编、懂系统还需要理解机器学习模型的基本原理和脆弱性。我个人在实际探索中的体会是这个领域正处于非常早期的阶段就像一片刚刚被发现的“新大陆”。大多数现有的逆向工程AI工具其设计初衷是提升效率并未将对抗鲁棒性作为首要考量。因此目前构造有效的对抗样本可能比我们想象的要容易。但这扇门一旦打开随之而来的将是快速的攻防迭代。作为安全研究者及早理解这些攻击原理无论是为了构建更坚固的AI防御系统还是为了评估自身软件面对新型威胁时的抵抗力都显得至关重要。最后一个小建议是从一些开源项目入手比如尝试对jTrans、CodeBERT等针对代码的预训练模型进行简单的对抗攻击实验是迈入这个领域非常实用的第一步。
返回列表