翻译

Universal Litmus Patterns: Revealing Backdoor Attacks in CNNs

代码链接:https://umbcvision. github.io/Universal-Litmus-Patterns/

摘要:

深度神经网络在许多应用中取得了空前的成功,使这些网络成为对抗性开发的主要目标。 在本文中,我们介绍了一种基准技术,用于检测深度卷积神经网络(CNN)上的后门攻击(比如木马攻击)。 我们介绍了通用石蕊模式(ULP)的概念,该概念通过将这些通用模式馈送到网络并分析输出(即,将网络分类为“干净”或“损坏”)来揭示后门攻击。 这种检测速度很快,因为它仅需要通过CNN进行几次前向传递。 我们证明了ULP可以检测具有数千种不同架构的网络上的后门攻击的有效性,这些网络在四个基准数据集(德国交通标志识别基准(GTSRB),MNIST,CIFAR10和Tiny-ImageNet)上进行了训练。

Introduction

深度神经网络(DNN)已成为众多机器学习应用程序的标准构件,包括计算机视觉[10],语音识别[2],机器翻译[34]和机器人操纵[16],从而实现了最先进的状态 极难完成的任务具有一流的表现。 这些网络的广泛成功使它们成为在敏感域中部署的主要选择,包括但不限于医疗保健[25],金融[7],自动驾驶[3]和与国防相关的应用[23]。

与其他机器学习模型类似,深度学习架构容易受到对抗性攻击。 这些漏洞引起了围绕这些模型的安全性担忧,从而导致了一个广阔的研究领域。 对DNN的对抗攻击以及针对此类攻击的防御措施。 对这些模型的一些经过深入研究的攻击包括规避攻击(又名推理或摄动攻击)[32、8、4]和中毒攻击[24、19]。 在规避攻击中,对手对图像或对象施加数字或物理扰动,以对模型进行有针对性或无针对性的攻击,这将导致错误的分类或普遍较差的性能(例如,在回归应用程序中)。

另一方面,中毒攻击可分为两种主要类型:1)碰撞攻击和2)后门攻击(又称特洛伊木马),它们具有不同的用途。在碰撞攻击中,对手的目标是将受感染的样本(例如,带有错误的类别标签的样本)引入训练集中,以降低训练模型的测试性能。碰撞攻击会阻碍受害者训练可部署的机器学习模型的能力。另一方面,在后门攻击中,对手的目标是在训练集中引入触发器(例如,贴纸或特定的配件),以使特定触发器的出现使训练过的模型变得愚蠢。后门攻击更隐蔽,因为被攻击的模型在典型的测试示例上表现良好,并且仅在存在触发器的情况下才会表现异常。作为可能造成致命后果的后门攻击的示例,请考虑以下自动驾驶场景。接受过交通标志检测培训的CNN可能被后门感染。训练深层CNN的耗时性质导致了一种普遍的做法,即使用预先训练的模型作为较大模型的整体或一部分(例如用于感知前沿)。 由于预训练的模型通常来自第三方(可能是未知的),因此识别预训练的模型的完整性至关重要。 但是,鉴于后门攻击的隐秘性质,仅评估干净测试数据的模型是不够的。 此外,原始训练数据通常不可用。 在这里,我们提出一种检测CNN的后门攻击的方法,而无需:1)访问训练数据或2)对干净数据进行测试。 相反,我们使用一小组通用测试模式来探查后门模型。

受通用对抗扰动[21]的启发,我们引入了通用石蕊模式(ULP),它们是经过优化的输入图像,网络的输出可以很好地指示网络是否干净或是否包含后门攻击。 我们在数千个经过训练的网络(参见图1a)和四个数据集上证明了ULP的有效性:德国交通标志识别基准(GTSRB)[29],MNIST [15],CIFAR10 [13]和Tiny-ImageNet [1] 。 ULP的检测速度很快,因为每个ULP仅需要通过网络的一个前向通过。 尽管如此简单,但令人惊讶的是,ULP在检测后门攻击,建立新的性能基线方面具有竞争优势:ROC曲线下的面积在CIFAR10和MNIST上均接近1,在GTSRB上为0.96(对于ResNet18),在Tiny-ImageNet上为0.94。

Related Work

产生后门攻击:Gu等[9]和刘等[20,19]显示了强大而隐秘的后门的可能性。Gu等人使用的感染样本。 [9]依靠一个可以将任意输入标签对注入训练集中的对手。 如果人们可以使用中毒的训练设备,则可以可靠地检测到此类攻击,例如通过目视检查或自动异常值检测。 这种弱点导致了对设计更细微的后门攻击的后续工作[33,17]。 Munoz-Gonz〜alez等。 [´22]使用反梯度优化,并将中毒攻击扩展到多个类别。 Suciu等。 [31]研究了中毒攻击的一般性和可转移性。 Koh等。 [12]提出了一种更强大的攻击方式,将中毒的数据彼此靠近,以避免被异常检测器检测到。

规避后门攻击:Liu等。 [18]假设存在清洁/信任测试数据,并研究了修剪和微调作为防御后门攻击的两种可能策略。修剪是指在显示干净数据时消除DNN中处于休眠状态的神经元。作者然后证明,通过设计“可感知修剪”攻击可以逃避修剪防御。最后,他们表明,对少量干净数据进行微调与修剪相结合,可以提供抵御“修剪意识”攻击的更可靠防御。尽管[18]中提出的方法很有希望,但它是以降低已训练模型在干净数据上的准确性为代价的。高等[6]通过扰动或叠加输入图像来识别测试时的攻击。Shan等。[26]通过主动将活板门注入模型来进行防御。但是,此类方法不一定检测到后门攻击的存在。

检测后门攻击:文献中用于后门攻击检测的现有工作通常依赖于中毒训练数据集的统计分析[30、33、20]或该数据集的DNN的神经激活[5]。 特纳等。 [33]表明,异常标记机制可以很容易地检测出标记错误的样本(例如,[9]或[20]中使用的攻击),并且需要更复杂的后门攻击来避免这种异常检测机制。Steinhardt等[30]为离群攻击的有效性(即损失的上限)提供了理论上的限制,这时就需要采用异常清除防御措施。

Chen等。[5]遵循的原理是,干净目标样品的神经激活依赖于网络从目标类中学到的特征。但是,对后门触发的输入样本(即从源类)进行的这些激活将依赖于网络从源类中学到的功能以及触发功能。然后,作者利用这种激活差异来对网络的神经激活进行聚类分析,以检测感染的样本。

上面提到的防御措施基于两个关键假设:1)干净数据集中的异常值(未感染)对模型没有实质性影响; 2)更重要的是,用户可以访问感染的训练数据集。这些假设对于特定场景可能是有效的,例如,当用户基于第三方提供的数据集训练她/他的模型时。在用户将模型训练外包给不受信任的第三方(例如机器学习即服务(MLaaS)提供程序)的环境中,或者当用户从不受信任的来源下载经过预先训练的模型时,将假定具有访问权限被感染的数据集无效。最近,有一些出色的论文考虑了这种情况,用户只能访问模型和干净的数据[35]。

一种方法是神经净化[35],作者建议通过优化使愚蠢的预训练模型的触发条件最优化来检测攻击。这里的基本原理是,后门触发器是一致的扰动,会对源类S中的任何输入图像产生对目标类T的分类结果。因此,作者寻求使模型对图像中的图像进行分类的最小扰动。源类作为目标类。因此,最佳扰动可能是潜在的后门触发器。这种有前途的方法在计算上要求很高,因为受攻击的源类别可能不是先验已知的,并且需要为潜在的所有成对的源类别和目标类别计算这种最小扰动。此外,需要在后门触发器类型上有很强的先验性,以便能够将可能良性的最小扰动与实际后门触发器区分开。

与[35]相似,我们也寻求一种无需感染训练数据即可检测后门攻击的方法。但是,我们从另一个角度解决了这个问题。简而言之,我们学习通用且可转移的一组模式,这些模式可作为石蕊测试来识别包含后门/特洛伊木马攻击的网络,因此我们将其称为通用石蕊木纹。为了检测模型是否中毒,将ULP通过网络馈送,并对相应的输出(即Logits)进行分类以揭示后门攻击(见图1b)。

Methods

Threat Model

我们感兴趣的威胁模型类似于[9,19,35],在该模型中,对手将目标后门插入DNN模型。简而言之,对于给定的干净训练图像源类别,攻击者选择一部分数据并通过向图像添加小触发器(补丁)并对这些中毒图像分配目标标签来中毒它们。然后,只要触发器出现在输入中,网络就会学会将目标标签指定给源图像。换句话说,网络学会了将源类特征与触发特征的存在关联到目标类。

我们考虑的情况是,对手是为受感染DNN提供后门的第三方。所获得的模型在用户可用的干净测试数据集上表现良好,但是当出现包含特定和预定义触发器的输入时,则会表现出针对性的错误分类。攻击者会故意训练模型以提供干净数据时具有不可怀疑的行为,并在存在特定触发器的情况下有针对性地分类错误。

Defense Goals

我们对检测预训练卷积神经网络(CNN)中的后门攻击感兴趣。我们的目标是大规模识别不受信任的第三方(即提供受感染模型的各方)。就有关攻击的知识而言,我们不假设目标类或攻击者使用的触发器具有先验知识。此外,我们假设无法访问中毒的训练数据集。

Baselines

Noise Input

对于我们的第一个基线以及作为消融研究以证明优化ULP的效果,我们提供了随机生成的模式(每个像素的通道采用[0,255]中的随机整数值)。然后,我们将干净且中毒的训练网络的对数连接起来,并在其上学习softmax分类器。通过与ULP共享池和分类器,此方法可以选择联合优化输入模式的效果。我们证明了令人惊讶的是,这种简单的检测方法可以成功地揭示简单数据集(例如MNIST)中的后门攻击,而无法在更具挑战性的数据集(即GTSRB和Tiny-ImageNet)上提供可靠的性能。

Attack-Based Detection

对于我们称为“ NeuralCleanse”的第二种基线方法,我们设计了一种类似于NeuralCleanse [35]的技术。给定一个训练有素的模型,不管它有毒与否,我们选择一对来源和目标类别,并使用通用补丁(触发)执行针对性的躲避攻击。我们优化了一个触发器,可以将一组干净的输入图像的预测从源类更改为目标类。这样做的理由是,在中毒的模型中,找到可以可靠地欺骗所有干净源图像的模型的通用触发器是容易的。换句话说,如果这样的攻击成功,则意味着给定的模型可能有后门。因此,我们迭代所有可能的源类和目标类对,并选择最成功的一对对的损失作为模型清洁度的分数。 [35]中的方法假设触发器大小未知。因此,它在损失中使用掩模及其ℓ1范数来减小触发面积。但是,掩码的ℓ1只能减少非零值的数量(即,增加稀疏度),而不能阻止触发信号散布到整个图像上。为简化起见,我们假定触发器的大小已知,并在我们的过程中删除了掩码的规范。

Experiments

我们在计算机视觉中试验了四个基准数据集,即手写数字数据集MNIST [14],CIFAR10数据集[13],德国交通标志识别基准(GTSRB)数据集[29]和TinyImageNet [1]。对于每个数据集,我们训练了约2000个深层CNN,这些数据集在这些数据集上的性能接近最先进的水平。一半的CNN经过后门触发器训练。我们确保中毒模型和干净模型在干净数据上的性能相似,而中毒模型的攻击成功率很高(>90%)在被投毒的输入上。我们为Tiny-ImageNet生成了20个大小为7×7像素的触发器,其他数据集为5×5像素。为了进行培训和测试,我们使用了20个中的10个随机选择的触发器的非重叠组。图2显示了GTSRB的触发器以及样本中毒模型对干净和中毒数据的操作。

我们对所有数据集进行了中毒模型的检测。表1显示了两个基线的ROC曲线下面积以及我们在所有数据集上建议的ULP。ULP始终以较大的幅度超过基准。下面,我们解释每个实验的细节。

MNIST Experiments

对于MNIST实验,我们训练了900个清洁模型和900个中毒模型。 对于每个模型,我们使用与VGG网络[27]类似的架构。 每个中毒模型都经过训练,可以包含从一个源类别到一个目标类别的有针对性的后门攻击(MNIST具有十个类别,因此总共有90对源和目标)。 对于每对来源和目标,我们使用二进制触发器训练十个模型。 训练期间中毒图像与干净图像的默认比率50%为用于所有实验。 MNIST实验的触发器被随机分配到图像的四个角之一。 干净和有毒的模型分为50/50比率的训练和测试模型,其中有毒模型的触发器被选择为在火车和测试模型之间是互斥的。 以这种方式,仅在看不见的测试触发条件下对经过训练的ULP进行测试。 图4a展示了ULP在检测中毒网络方面的性能。 如果M = 10个ULP,我们可以获得的曲线下面积(AUC)接近1。此外,ULP的性能优于两个基线。

为了检查我们的检测方法对攻击强度的敏感性,我们降低了中毒图像与干净图像的比率为25%、12%、5%、1%,以训练中毒模型,直觉是,以较低的中毒与干净样本比率训练的模型包含更细微的后门攻击,这可能更难以检测。 为了研究这种效果,我们重复了不同比例的中毒图像到清洁图像的检测实验。 我们在图3中显示了成功攻击的可能性和所有检测方法的AUC。在此实验中,我们为ULP和噪声输入使用了固定数量的输入模式M = 5。我们的方法即使在感染比例很低的情况下依然保持了95%以上的准确率,然而对于噪声输入在感染比例为1%时准确率跌至60%。

CIFAR10 Experiments

在CIFAR10数据集上,我们在CIFAR10数据集上训练了500个干净模型,在一组触发器上训练了400个中毒模型,在另一组触发器上训练了100个中毒模型进行测试。 我们使用了与VGG网络类似的模型架构[27]。 每个中毒模型都包含在随机来源和目标对之间的针对性攻击,以及来自相互排斥的训练和测试触发器集中的随机触发器。 对于MNIST实验,将触发器随机分配给图像的四个角之一。 我们使用800个模型来训练我们的ULP,使用200个模型来测试我们学习到的ULP。 再次选择触发器,使其在火车模型和测试模型之间互斥。 图4b显示了结果。

GTSRB Experiments

对于GTSRB,我们训练了两组2,000个模型,其中每个模型包含1,000个干净模型和1,000个中毒模型。 第一组包含类似于VGG的模型[27],在模型的感知前端具有添加的空间变压器网络(STN)[11],第二组包含具有添加的STN的ResNetlike体系结构[10]。 两组的训练模型在干净测试数据的平均准确率达到99.4%。 对于攻击,我们在交通标志表面的随机位置附加了触发器,以模仿类似贴纸的物理世界攻击(图2)。训练集数据和测试举数据的比例为50/50。重要的是,训练和测试集的源对和目标对是互斥的,因此测试模型不仅包括新的触发器,而且仅包含针对未看见的源对和目标对的后门攻击。

我们在训练集上训练了我们的ULP,并在图4c中报告了VGG模型并在图6(a)中报告了ResNet。 在VGG模型上,我们显示ULP能够检测M = 10模式的AUC = 0.9的中毒模型,而NC基线仅达到AUC = 0.74。 但是,NC比我们提出的方法(90,000倍)要慢得多。 图5显示了针对ULP,噪声图像和NC方法的中毒和清洁VGG模型的分布。

Tiny-ImageNet Experiments

对于Tiny-ImageNet数据集,我们训练了1,000个清洁模型和1,000个中毒模型。 对于模型,我们在模型的感知方面使用了类似ResNet的架构[10],并添加了空间变压器网络[11]。 经过训练的模型在干净的测试数据上平均达到了45.1%的top-1准确性。 对于后门攻击,我们在图像中的随机位置附加了一个7x7触发器。 与GTSRB实验类似,模型分为训练集和测试集,其中训练和测试的触发器是互斥的。 而且,训练和测试中毒模型具有互斥的源对和目标对。

我们在训练集上训练了ULP,并在图6中报告了M = 1、5和10的结果。我们观察到ULP能够检测M = 5模式的AUC = 0.94的中毒模型。 检测精度为95.8%。图7显示了在Tiny-ImageNet上训练的M = 10个ULP。

Computational cost

     与NC基线相比,ULP允许快速检测。 基线需要O(K2)优化,其中每个优化都涉及代价高昂的有针对性的躲避攻击(涉及来自一类的所有图像的向前和向后传递的几个时期,例如MNIST数据集为1000)。 相比之下,我们提出的ULP仅花费通过网络的O(M)个前向通行证。 与基线相比,单个P100 GPU上单个网络的检测时间与ULP相比要快许多个数量级:约20毫秒vs. GTSRB约30分钟,约18毫秒vs. CIFAR10约4分钟,以及约10 毫秒与MNIST的约3分钟。 由于其巨大的计算负担,因此未在Tiny-ImageNet上执行NC基线。

Generalizability of ULPs

到目前为止,我们已经表明,ULP能够在看不见的中毒攻击(即未知触发器)下检测中毒模型,但是对于固定架构(即已知模型类型)而言。 一个自然的问题是,关于不同模型体系结构的ULP如何通用化。 为此,我们在GTSRB上进行了其他实验。 在GTSRB上,我们使用类似VGG的随机架构训练了300个中毒模型和300个干净模型,并在其中通过随机化深度,卷积内核数和完全连接单元数来强制网络随机性。 此外,我们使用类似ResNet18的随机体系结构训练了200个中毒模型和200个干净模型,其中类似地,我们在卷积核的深度和数量上强制执行随机性。

然后,我们在随机架构上测试了经过训练的ULP(在固定架构上进行训练)。图8显示了在这些随机模型上ULP的可推广性结果,为了便于比较,我们还包括了固定架构的ROC曲线。在固定模型上训练的ULP仍然可以推广到随机体系结构。此外,有趣的是,我们观察到在固定VGG或ResNet架构上训练的ULP也可以推广到其他架构类型,尽管会损失一些灵敏度。因此,最好在与检测相同的体系结构类型上训练ULP。最后,为了衡量GTSRB数据集上不同大小的触发器上网络的可概括性,我们在具有7×7触发器的中毒模型上训练了ULP(M = 5)。然后,我们在检测包含5×5触发攻击的中毒模型时测试了ULP。 ULP成功识别出0.83 AUC的中毒模型。从5×5推广到7×7时,AUC为0.80。

Adaptive Attacker

我们还针对自适应对手进行了实验,攻击者可以完全使用ULP和相应的二进制分类器。 然后,攻击者利用检测器输出的交叉熵和纯净类的一热向量来规化中毒损失,以欺骗ULP检测器。 毫不奇怪,我们观察到,经过自适应训练的中毒模型可以成功绕过ULP检测器,尽管这种类型的完全访问攻击通常是不切实际的。 但是,有趣的是,我们发现模型的响应仍然高度区分干净,中毒和适应性中毒的类:图9显示了这些模型的汇总响应的分布。 该实验表明,例如,可以通过增加二进制分类器的复杂性或使用更高级的模型增强来增强ULP防御以抵抗自适应攻击。

Discussion

我们介绍了一种检测神经网络中后门攻击的新方法:通用石蕊模式。 可下载的经过训练的神经网络的广泛使用增加了使用恶意中毒网络的风险:经过训练的网络使得图像中的视觉触发会导致有针对性的或无针对性的错误分类。 因此,需要一种有效的手段来测试经过训练的网络是否干净。

我们的ULP是在一组经过训练的中毒和干净网络模型{fn}上优化的输入图像。 在这里,我们仅需要访问这些模型的输入-输出关系。 因此,我们的方法与网络体系结构无关。 此外,与先前的工作相比,我们不需要访问培训数据本身。

令人惊讶的是,我们的结果表明,一小部分(≤10)的ULP足以以较高的准确度检测恶意网络,优于基于NC[35]的基准。 Neural Cleanse在计算上很昂贵,因为它需要测试所有可能的输入-输出类标签对。 相比之下,每个ULP仅需要通过CNN的一个前向通过。

我们在与用于优化的触发器集不相交的触发器集上以及在与源模型不同的模型上测试了ULP。 我们展示了对新触发器和新架构(即随机架构)的通用性。

我们对于为何使用ULP进行检测的直觉如下:CNN本质上学习的模式是对象的显着特征的组合,而CNN几乎不变于这些特征的位置。 当网络中毒时,它得知触发器是某个对象的关键功能。 在我们的优化过程中,每个ULP的形成都是各种触发器的集合。 因此,当呈现这样的ULP时,如果使用触发器进行训练,则网络将以高概率积极响应。 在未来的工作中,我们将研究加强针对自适应攻击的基于ULP的检测的方法。

AI后门检测论文翻译:Universal Litmus Patterns: Revealing Backdoor Attacks in CNNs相关推荐

  1. YOLO V1 实时的目标检测 论文翻译

    YOLO V1 实时的目标检测 论文翻译 注:学习记录用 摘要 我们提出了一种新的目标检测方法 YOLO.先前关于目标检测的工作重新使用分类器来执行检测. 相反,我们将目标检测框架作为一个回归问题,以 ...

  2. Pupil dynamics for iris liveness detection 瞳孔活体检测论文翻译

    Pupil dynamics for iris liveness detection Abstract 本文的主要目的是提出一种基于瞳孔动力学的完整的眼睛活性检测方法.这种方法可以作为虹膜识别系统中呈 ...

  3. 基于DNS特征的僵尸网络攻击检测 论文翻译

    Botnets Detecting Attack based on DNS Features 2018 ACIT 摘要 僵尸网络被认为是一个威胁网络安全的严重问题.这是网络犯罪分子用来进行非法活动的一 ...

  4. [目标检测]论文翻译代码理解-SCRDet: Towards More Robust Detection for Small, Cluttered and Rotated Objects

    2019.12.10 更新 未完结 3. The Proposed Method 首先,我们在图1中概述了我们的两阶段方法: 在第一阶段,通过添加SF-Net和MDA-Net,可以期望特征图包含更多的 ...

  5. AI Composition(AI作曲)论文翻译分析——Song From PI:A MUSICALLY PLAUSIBLE NETWORKFOR POP MUSIC GENERATION

    Song From PI:A MUSICALLY PLAUSIBLE NETWORKFOR POP MUSIC GENERATION 简介 乐理知识 层级RNN进行pop music作曲 Scale的 ...

  6. 【论文阅读+】SCRDet 论文翻译学习

    SCRDet:Towards More Robust Detection for Small, Cluttered and Rotated Objects_babywang0的博客-CSDN博客_sc ...

  7. 目标检测经典论文——YOLOv2论文翻译(纯中文版):YOLO9000:更好、更快、更强

    目标检测经典论文翻译汇总:[翻译汇总] 翻译pdf文件下载:[下载地址] 此版为纯中文版,中英文对照版请稳步:[YOLOv2中英文对照版] YOLO9000:更好.更快.更强 Joseph Redmo ...

  8. 巩膜:论文翻译《一种改进的眼角检测算法》An Improved Algorithm for Eye Corner Detection

    1509.04887.pdf论文翻译 An Improved Algorithm for Eye Corner Detection Anirban Dasgupta, Anshit Mandloi, ...

  9. 【R-CNN论文翻译】目标检测经典论文R-CNN最新版本(v5版)全面中文翻译

    R-CNN目标检测的奠基性文章,学习目标检测必看的经典论文之一,后续有Fast R-CNN,Faster R-CNN一系列论文. 目前网上能找到的论文翻译版本要么不全,要么不是最新版本的(论文从201 ...

  10. 目标检测经典论文——Fast R-CNN论文翻译(中英文对照版):Fast R-CNN(Ross Girshick, Microsoft Research(微软研究院))

    目标检测经典论文翻译汇总:[翻译汇总] 翻译pdf文件下载:[下载地址] 此版为纯中文版,中英文对照版请稳步:[Fast R-CNN纯中文版] Fast R-CNN Ross Girshick Mic ...

最新文章

  1. python微信开发实例 pdf 百度网盘_用python看女神微信里的百度云资源有啥?
  2. npm环境安装linux,Node.js环境在linux上的部署教程
  3. android gradle abi mips x86,NDK android Error:Expected caller to ensure valid ABI: MIPS
  4. java string 分析_java String 可变性的分析
  5. 随记(五)--上传图片耗时问题
  6. [设计模式] javascript 之 建造者模式
  7. 强化学习(reinforcement learning)教程(后面是翻译)
  8. Word转换成PDF文档怎么转换
  9. 记忆碎片之python爬虫APP数据爬取fiddler抓包及多线程爬取流程分析(四)
  10. Admob的注意事项
  11. 总体设计--《软件工程导论》
  12. 【CISSP备考】第五章-身份与访问管理
  13. 第十五周翻译-《Pro SQL Server Internals, 2nd edition》
  14. 三维建模之太空战舰——我们的征途是星辰大海!
  15. SQL中的等号(=)、IN、LIKE三者的比较
  16. c语言中把文件看成什么流,C语言中的文件流
  17. 动画旋转360度位置不变
  18. SQL语句(六)_NUIST
  19. Photoshopcs6 自学笔记三 画笔工具
  20. 某盘客户端工具,这速度绝了!请低调使用

热门文章

  1. 数据分析之MySQL(十二)账户管理
  2. Miracle - Database Knowledge center
  3. 你应该知道的10 种跨域解决方案(附终极方案)
  4. MySql NTERVAL函数
  5. 什么叫做罗列式_申论作文写作之案例罗列式开头
  6. 打破垄断!国产服务器操作系统正式发布,微软慌了。。
  7. 117道有关大数据面试题解析,希望对你有所帮助
  8. 消息队列一|从秒杀活动开始聊起消息队列
  9. 母亲节与父亲节之我见
  10. STM32实战总结:HAL之触摸屏