图像分类白盒对抗攻击技术总结

作者&编辑 | WYH、小风_

1.对抗攻击背景知识

在图像分类任务中,给定一个深度学习模型 y = f ( x ) y=f(x) y=f(x) x ∈ R m x \in \mathbf{R}^{\mathrm{m}} xRm 为模型的输入, y ∈   Y y \in \ Y y Y为针对当前输入 x x x的模型输 出。模型 f ( . ) f (.) f(.) 一般还包含一组训练好的权重参数 θ \theta θ ,为方便说明,对模型描述时省略该参数。对抗攻击技术描述为在针对目标模型 f ( . ) f (.) f(.) 的输入 x x x上寻找一个小的噪声数据 r r r ,当 r r r叠加在 x x x上输入目标模型后,使得 f ( x + r ) ≠ f ( x ) f(x+r) \neq f(x) f(x+r)=f(x);在目标攻击中,使得 f ( x + r ) = y t f(x+r)=y^t f(x+r)=yt, y t y^t yt为需要让模型输出的目标类目。

为了用 l 2 l_2 l2 范数来约束扰动大小时,在目标攻击中,对抗样本的生成问题描述为如下的优化形式:
 Minimize  ∥ r ∥ 2  s.t. 1.  f ( x + r ) = y t  2.  x + r ∈ R m \text { Minimize }\|r\|_{2} \\ \text { s.t. 1. } f(x+r)=y^{\mathrm{t}} \\ \text { 2. } x+r \in \mathbf{R}^{\mathrm{m}}  Minimize r2 s.t. 1. f(x+r)=yt 2. x+rRm
y t y^t yt是要攻击的目标类别, x x x是原始输入样本, r r r表示扰动噪声, x + r x+r x+r表示得到的对抗样本,后文也用 x A x^A xA表示.

2.白盒攻击技术

2.1 基于直接优化得攻击方法

特点: 这类攻击方法通过算法对目标函数直接优化生成的对抗扰动相对较小,但存在优化时间长, 算法需花费大量时间寻找合适超参数的问题。

2.1.1 基于 Box-constrained L-BFGS 的攻击

原理: 利用拉格朗日松弛法将其中的 f ( x + r ) = y t f(x+r)=y^{\mathrm{t}} f(x+r)=yt限制条件简化为 loss ⁡ f ( x + r , y t ) \operatorname{loss}_{f}\left(x+r, y^{\mathrm{t}}\right) lossf(x+r,yt)进行优化, loss ⁡ f \operatorname{loss}_{f} lossf表示交叉熵损失函数。最终得到的优化目标如下:
M i n i m i z e c ∥ r ∥ 2 + loss ⁡ f ( x + r , y t )  s.t.  x + r ∈ [ 0 , 1 ] m Minimize c\|r\|_{2}+\operatorname{loss}_{f}\left(x+r, y^{\mathrm{t}}\right)\\ \text { s.t. } x+r \in[0,1]^{\mathrm{m}} Minimizecr2+lossf(x+r,yt) s.t. x+r[0,1]m
其中,输入图像被归一化在[0,1] 之间,以满足凸优化方法中的箱型约束条件,使得上述目标可以利用 L-BFGS 算法进行求解。

求解思路: 该算法为目标攻击算法,使用该算法求 解的思路是先固定超参数 c 来优化当前参数值下的最优解, 再通过对 c 进行线性搜索即可找到满足 f ( x + r ) = y t f(x+r)=y^{\mathrm{t}} f(x+r)=yt 条件的 最优对抗扰动 r r r ,最终得到的对抗样本为 x + r x+r x+r

特点: 是最早被设计的对抗攻击算法,该算法首次将生成对抗样本的过程抽象为一个凸优化的问题处理,是重要的基于优化方法的对抗攻击算法。

2.1.2 C&W 攻击

特点: 该攻击算法可以使 用 l 0 l_0 l0 l 2 l_2 l2 l ∞ l_\infty l范数分别对扰动进行限制生成对抗样本,是目前较为强大的目标攻击算法之一。属于直接优化的攻击算法,是基于基于 Box-constrained L-BFGS 算法的改进版。

  • 改进1: C&W 攻击算法考虑了攻击目标类和其他类别之间的关系,选择了更好的损失函数:
    loss ⁡ f , t ( x A ) = max ⁡ ( max ⁡ { Z ( x A ) i : i ≠ t } − Z ( x A ) t , − k ) \operatorname{loss}_{f, t}\left(x^{\mathrm{A}}\right)= \max \left(\max \left\{Z\left(x^{\mathrm{A}}\right)_{i}: i \neq t\right\}-Z\left(x^{\mathrm{A}}\right)_{t},-k\right) lossf,t(xA)=max(max{Z(xA)i:i=t}Z(xA)t,k)
    其中, Z ( x A ) = Logits ⁡ ( x A ) Z\left(x^{\mathrm{A}}\right)=\operatorname{Logits}\left(x^{\mathrm{A}}\right) Z(xA)=Logits(xA)表示目标网络 Softmax 前一 层的输出,i 表示标签类别,t 表示目标攻击的标签类,k 表示对抗样本的攻击成功率, k 越大,生成的对抗样本的攻击成功率越高。

  • 改进2: 去除了上式中的 Box-constrained 限定条件,使该优化问题转化为无约束的凸优化问题,方便利用梯度下降法动量梯度下降法Adam等算法求解。为实现该目的,提供两种有效的方法:

    • 采用投影梯度下降法的思路将每次迭代过程中得到的 x + r x+r x+r裁剪在 [ 0 , 1 ] m [0,1]^{\mathrm{m}} [0,1]m范围内,以去除 x + r x+r x+r的区间约束条件。

      • 优点:生成的对抗样本攻击能力较强

      • 缺点:引入变量进行优化的方法生成的对抗扰动较小,对x+r行裁剪时会带来梯度信息的损失

    • 引入新的变量 ω \omega ω ,令 ω ∈ [ − ∞ , + ∞ ] \omega \in[-\infty,+\infty] ω[,+] 区间,构造一个映射函数将 ω \omega ω [ − ∞ , + ∞ ] [-\infty,+\infty] [,+]区间映射到 [0,1] 区 间 , 通过优化 ω \omega ω 去 掉 方 法 ① 中 由 x + r ∈ [ 0 , 1 ] m x+r \in[0,1]^{\mathrm{m}} x+r[0,1]m 条件引起的优化误差。

  • 在优化算法的选择上,梯度下降,动量梯度下降和 Adam 等优化方法都可以生成相同质量的对抗样本,但 Adam 算法的收敛速度要比其他两种快。

优点: 能够生成对蒸馏防御网络具有较好攻击能力的对抗样本。C&W 攻击算法生成的对抗样本针对蒸馏防御的模型攻击能力很好,是目前较为强大的白盒攻击算法,也是用于评估模型鲁棒性的主要测试算法之一。

2.2 基于梯度优化的攻击方法

核心思想: 在模型损失函数变化的方向上对输入样本进行扰动,来使模型误分类输入样本或使模型分类输样本到指定的不正确目标类别上。

优点: 这类攻击方法的优点是方法实现简单,且白盒对抗攻击成功率较高。是目前一种主要的对抗攻击技术。

2.2.1 FGSM 攻击(基于一步梯度计算的对抗样本生成算法)

原理:使对抗扰动的变化量与模型损失梯度变化的方向保持一致。具体来说,在无目标攻击中,使模型损失函数关于输入 x 的梯度在上升的方向上变化扰动达到让模型误分类的效果。

算法描述: FGSM 算法描述为:
x A = x + α sign ⁡ ( ∇ x J ( θ , x , y ) ) x^{\mathrm{A}}=x+\alpha \operatorname{sign}\left(\nabla_{x} J(\theta, x, y)\right) xA=x+αsign(xJ(θ,x,y))
其中为 α \alpha α超参数,表示为一步梯度的步长, sign(.) 为符 号函数,故该方法生成的扰动为在 l ∞ l_{\infty} l范数约束下的对抗扰动。

优点: 生成的对抗样本具有较好的迁移攻击能力,且这项工作意义深远,后来出现的基于梯度优化的大部分攻击算法是FGSM 算法的变种。

缺点: 由于只计算一次梯度,其攻击能力有限,并且该方法成功应用的前提条件是损失函数的梯度变化方向在局部区间内是线性的。在非线性的优化区间内,沿着梯度变化方向进行大步长优化生成的对抗样本并不能保证攻击成功。

2.2.2 I-FGSM 攻击(迭代的FGSM算法)

原理: 提出迭代的FGSM算法,通过把优化区间变小来使线性假设近似成立。

算法描述: I-FGSM 算法的无目标攻击描述为:
x 0 A = x , x i + 1 A = Clip ⁡ ( x i A + α sign ⁡ ( ∇ x J ( θ , x i A , y ) ) ) x_{0}^{\mathrm{A}}=x, x_{i+1}^{\mathrm{A}}=\operatorname{Clip}\left(x_{i}^{\mathrm{A}}+\alpha \operatorname{sign}\left(\nabla_{x} J\left(\theta, x_{i}^{\mathrm{A}}, y\right)\right)\right) x0A=x,xi+1A=Clip(xiA+αsign(xJ(θ,xiA,y)))
其中 x i + 1 A x_{i+1}^{\mathrm{A}} xi+1A为第 i 次迭代后得到的对抗样本,为超 α \alpha α参数,表示为迭代过程中每步梯度的步长,操 Clip ⁡ ( . ) \operatorname{Clip}(.) Clip(.)作把超过合法范围的 x A x^{\mathrm{A}} xA裁剪在规定的范围内。

优点: 较 FGSM 算法生成的对抗样本攻击能力更强

缺点: 其生成的对抗样本迁移攻击能力却不如 FGSM 算法

2.2.3 PGD攻击(迭代的 FGSM 算法,与 I-FGSM 攻击类似)

原理: 与 I-FGSM 算法相比,PGD 算法的迭代次数更多,在迭代过程中对上一版本得到的 x A x^{\mathrm{A}} xA随机地进行了噪声初始化,以此避免优化过程中可能遇到的鞍点。

优点:是目前公认为最强的白盒攻击方法,也是用于评估模型鲁棒性的基准测试算法之一。使用 PGD 算法生成的对抗样本攻击能力比 I-FGSM 攻击能力强

缺点: 同样具有的迁移攻击能力弱的问题

2.2.4 MI-FGSM 攻击(基于动量的迭代生成对抗样本的 MI-FGSM 算法)

原理: 在 I-FGSM 算法 的迭代过程中引入动量技术,以此在损失梯度变化的方向上累计速度矢量以稳定梯度的更新方向,使得优化过程不容易陷入局部最优。

算法描述: 该算法描述为:
g i + 1 = μ g i + ∇ x J ( x i A , y ) ∥ ∇ x J ( x i A , y ) ∥ 1 x i + 1 A = x i A + α sign ⁡ ( g i + 1 ) g_{i+1} = \mu g_{i}+\frac{\nabla_{x} J\left(x_{i}^{\mathrm{A}}, y\right)}{\left\|\nabla_{x} J\left(x_{i}^{\mathrm{A}}, y\right)\right\|_{1}} \\ x_{i+1}^{\mathrm{A}}=x_{i}^{\mathrm{A}}+\alpha \operatorname{sign}\left(g_{i+1}\right) gi+1=μgi+xJ(xiA,y)1xJ(xiA,y)xi+1A=xiA+αsign(gi+1)
其中, g i + 1 g_{i+1} gi+1表示在第 i 次迭代后累计的梯度动量, μ \mu μ为动量项的衰减因子;当 μ \mu μ= 0 ,则上述形式为 I-FGSM 算法的形式。由于多次迭代中得到的梯度不在一个量级,将每次迭代中得到的当前梯度 ∇ x J ( x i A , y ) \nabla_{x} J\left(x_{i}^{\mathrm{A}}, y\right) xJ(xiA,y)通过其自身的 l 1 l_{1} l1距离进行归一化。

优点: 在具有较好攻击能力的基础上还保留了一定的迁移攻击能力,是目前常用的白盒对抗攻击方法

2.3 基于决策边界分析的攻击方法

核心思想: 是一类特殊的对抗攻击方法。通过逐步减小样本与模型决策边界的距离来使模型对该样本误分类,故其生成的对抗样本一般较小,但这类攻击方法不具备目标攻击能力。

2.3.1 DeepFool 攻击(针对单个输入图像生成对抗扰动的 DeepFool 攻击算法)

特点: DeepFool 算法生成的对抗扰动非常小,该扰动一般被认为近似于最小扰动。

算法描述:

  • 针对线性二分类问题,给定一个分类器 k ^ ( x ) = sign ⁡ ( f ( x ) ) , f ( x ) = ω x + b \hat{k}(x)=\operatorname{sign}(f(x)), \quad f(x)=\omega x+b k^(x)=sign(f(x)),f(x)=ωx+b,分类器的决策边界用

F = { x : f ( x ) = 0 } F=\{x: f(x)=0\} F={x:f(x)=0}表示,如下图。要使当前数据点x0被该模型误分类到决策边界另一边,其最小扰动对于于 x 0 x_0 x0在F上的正交投影 r ∗ ( x 0 ) r_{*}\left(x_{0}\right) r(x0): r ∗ ( x 0 ) ≡ arg ⁡ min ⁡ r ∥ r ∥ 2 r_{*}\left(x_{0}\right) \equiv \underset{r}{\arg \min }\|r\|_{2} r(x0)rargminr2,根据 f ( x ) = ω x + b f(x)=\omega x+b f(x)=ωx+b,推导出 r ∗ ( x 0 ) = − f ( x 0 ) ∥ x 0 ∥ 2 2 ω r_{*}\left(x_{0}\right)=-\frac{f\left(x_{0}\right)}{\left\|x_{0}\right\|_{2}^{2}} \omega r(x0)=x022f(x0)ω,此为模型决策边界线性时计算得到的最小扰动值。

  • 针对非线性二分类问题,可通过迭代的过程来近似得到针对数据点x0 的最小扰动 r ∗ ( x 0 ) r_{*}\left(x_{0}\right) r(x0)
2.3.2 UAPs 攻击(针对目标模型和整个数据集生成通用对抗扰动的 UAPs攻击算法)

原理: Moosavi-Dezfooli 等发现深度学习模型存在与输入样本无关的通用对抗扰动这种扰动与目标模型结构和数据集特征相关。当通用对抗扰动叠加在数据集的输入样本上时得到对抗样本,得到的对抗样本大部分具有攻击能力。

算法描述: UAPs 攻击算法通过在采样的少量数据点上迭代计算生成通用对抗扰动。UAPs 攻击算法在迭代过程中的扰动计算使DeepFool 算法进行求解。最终,经过多次迭代后通过将数据点推送到模型决策边界另一边,达到对抗攻击的目的。

2.4 基于生成式神经网络生成的攻击方法

特点: 基于生成式神经网络生成的攻击方法利用自监督的方式,通过训练生成式神经网络来生成对抗样本。这类攻击方法的特点是一旦生成式模型训练完成,可非常高效的生成大量具有良好迁移攻击能力的对抗样本。

2.4.1 ATN 攻击(利用生成式神经网络生成对抗样本的攻击)

算法描述: ATN网络将一个输入样本转换为针对目标模型的对抗样本,ATN网络定义如下: g f , θ ( x ) : x ∈ X → x A g_{f, \theta}(x): x \in X \rightarrow x^{\mathrm{A}} gf,θ(x):xXxA,其中 θ \theta θ表示神经网络 g g g的参数, f f f表示要攻击的目标网络。针对目标攻击问题,对 ATN 网络 g的训练,可描述为如下的优化目标:
arg ⁡ min ⁡ θ ∑ x i ∈ x β L X ( g f , θ ( x i ) , x i ) + L Y ( f ( g f , θ ( x i ) ) , f ( x i ) ) \underset{\theta}{\arg \min } \sum_{x_{i} \in x} \beta L_{X}\left(g_{f, \theta}\left(x_{i}\right), x_{i}\right)+L_{Y}\left(f\left(g_{f, \theta}\left(x_{i}\right)\right), f\left(x_{i}\right)\right) θargminxixβLX(gf,θ(xi),xi)+LY(f(gf,θ(xi)),f(xi))
其中, L X L_X LX为视觉损失函数,可用常见的 l 2 l_2 l2范数表示; L Y L_Y LY为类别损失函数,定义为 L Y = L 2 ( y ′ , r ( y , t ) ) L_{Y}=L_{2}\left(y^{\prime}, r(y, t)\right) LY=L2(y,r(y,t)),其中 y = f ( x ) y=f(x) y=f(x) y ′ = f ( g f ( x ) ) y'=f(g_f(x)) y=f(gf(x)), t t t是目标攻击的类别, r ( . ) r(.) r(.)是重新排序函数,它对x进行修改,使 y k < y t , ∀ k ≠ t y_{k}<y_{t}, \forall k \neq t yk<yt,k=t

优点: 该方法生成对抗样本的速度较快,且其攻击能力较强

缺点: 迁移攻击能力较弱

2.4.2 UAN 攻击(基于神经网络生成通用对抗扰动的攻击)

原理: UAN 攻击通过训练一个简单的反卷积神经网络将一个在自然分布 N ( 0 , 1 ) 100 N(0,1)^{100} N(0,1)100上采样的随机噪声转换为通用对抗扰动。

算法描述: Hayes等为反卷积神经网络的训练设计了如下优化函数:
L t = max ⁡ { { max ⁡ i ≠ y ′ log ⁡ [ f ( δ ′ + x ) ] i − log ⁡ [ f ( δ ′ + x ) ] i , − k } + α ∥ δ ′ ∥ p \begin{aligned} L_{t}=\max \{&\left\{\max _{i \neq y^{\prime}} \log \left[f\left(\delta^{\prime}+x\right)\right]_{i}-\right.\left.\log \left[f\left(\delta^{\prime}+x\right)\right]_{i},-k\right\}+\alpha\left\|\delta^{\prime}\right\|_{p} \end{aligned} Lt=max{{i=ymaxlog[f(δ+x)]ilog[f(δ+x)]i,k}+αδp
其中,模型损失函数选择了与 C&W 攻击相同的边际损失函数, y T y^T yT为目标攻击选择的类别, α \alpha α控制扰动大小优化项的相对重要程度。

优点: 在实际利用 UAN 攻击方式进行攻击时,使用 l 2 l_2 l2 l ∞ l_\infty l范数均可生成攻击能力较好的通用对抗扰动,其攻击能力强于先前提出UAPs 攻击。

2.4.3 AdvGAN 攻击

原理: Xiao 等在基于神经网络生成的攻击算法中首次引入 了生成式对抗网络的思想,提出了包含生成器、鉴别器和 攻击目标模型的AdvGAN 攻击网络。AdvGAN 网络利用生成式对抗网络中的“对抗损失”项,来保证对抗样本的真实性。

算法描述: 针对 AdvGAN 网络训练的整体优化函数设计如下:
L = L adv  f + α L G A N + β L hinge  \mathcal{L}=\mathcal{L}_{\text {adv }}^{\mathrm{f}}+\alpha \mathcal{L}_{\mathrm{GAN}}+\beta \mathcal{L}_{\text {hinge }} L=Ladv f+αLGAN+βLhinge 
α \alpha α β \beta β 参数用来控制每个优化项的相对重要性,整体来说, L G A N \mathcal{L}_{\mathrm{GAN}} LGAN 损失项的目的是使生成的对抗扰动与原始样本相似, L a d v \mathcal{L}_{\mathrm{adv}} Ladv 损失项的目的是达到对抗攻击的效果。

优点: 经过训练的AdvGAN网络可以将随机噪声转换成有效的对抗样本,如下图。

2.5 其他的攻击方法

2.5.1 JSMA 攻击

类型: JSMA攻击是一种基于 l 0 l_0 l0范数约束下的攻击,其通过修改图像中的几个像素来使模型对输入样本误分类。

原理: JSMA 攻击算法利用显著图表示输入特征对预测结果的影响程度,其每次修改一个干净图像的像素,然后计算模型最后一层的输出对输入的每个特征的偏导。通过得到的前向导数,计算得出显著图。最后利用显著图找到对模型输出影响程度最大的输入特征,通过修改这些对输出影响程度较大的特征点从而得到有效的对抗样本。

2.5.2 单像素攻击

类型: 单像素攻击是一种基于差分进化算法的攻击算法。

原理: 单像素攻击算法每次只修改样本数据点的 1 个像素值试图让模型误分类。

特点: 实际应用中,这是一种极端的攻击方式。该方法对于简单的数据集有较好的攻击效果,比如 MNIST 数据集。当输入图像的像素空间较大时,1 个像素点的改变很难影响到分类结果,随着图像增大,算法的搜索空间也会迅速增大,使得算法性能下降。

2.5.3 stAdv 攻击

类型: 一种通过对图像样本进行空域变换来 产生对抗样本的 stAdv攻击算法

原理: 该算法对局部图像特征进行平移,扭曲等操作实现针对输入样本的空域变换攻击。

特点: 使用 stAdv 算法生成的对抗样本较于传统基于 l p l_p lp 范数距离度量生成的对抗样本更为真实,且针对目前采用对抗训练措施的模型具有很好的攻击效果。

2.5.4 BPDA 攻击

类型: 破碎梯度策略是一种用来针对 FGSM,I-FGSM等基于梯度攻击方法的对抗防御方法。

原理: 破碎梯度策略使用一个不可微的函数$ g(x) 预 处 理 输 入 样 本 , 使 训 练 得 到 的 模 型 预处理输入样本,使训练得到的模型 使f(g(x))$ 在 x x x 上不可微,使得攻击者计算不出用于对抗样本生成的梯度。

对抗攻击算法总结

攻击算法扰动范数攻击类型攻击强度算法优势算法劣势
L-BFGS l 2 l_2 l2单步⭐⭐⭐对抗样本有良好的迁移攻击能力,是第一 个提出的对抗攻击算法算法需要花费大量时间优化超参数 c
C&W l 2 , l ∞ l_2,l_∞ l2,l迭代⭐⭐⭐⭐针对大部分蒸馏防御模型的攻击能力强且生成的扰动小算法攻击效率低,需耗时寻找合适 的超参数
FGSM l ∞ l_∞ l单步⭐⭐⭐生成效率非常高且扰动具有良好的迁移攻击能力计算一次梯度生成对抗样本,对抗 样本的扰动强度较大
I-FGSM l ∞ l_∞ l迭代⭐⭐⭐⭐多步迭代生成对抗样本,攻击能力强容易过拟合,迁移攻击能力较差
PGD l ∞ l_∞ l迭代⭐⭐⭐⭐⭐比 I-FGSM 算法的攻击能力强迁移攻击能力较差
MI-FGSM l ∞ l_∞ l迭代⭐⭐⭐⭐兼具较好的攻击能力和迁移攻击能力,算法收敛速度更快攻击能力比 PGD 算法差
DeepFool l 2 , l ∞ l_2,l_∞ l2,l迭代⭐⭐⭐⭐精确计算得到的扰动更小不具备目标攻击能力
UAPs l 2 , l ∞ l_2,l_∞ l2,l迭代⭐⭐⭐⭐生成的通用对抗扰动具有较好的迁移攻击能力无法保证对特定数据点的攻击成功 率
ATN l ∞ l_∞ l迭代⭐⭐⭐⭐可同时针对多个目标模型进行攻击,对抗 样本更具多样性训练生成网络寻找合适的超参数
UAN l 2 , l ∞ l_2,l_∞ l2,l迭代⭐⭐⭐⭐生成扰动的速度快且攻击能力强于 UAPs算法生成模型的训练需花费一定时间
AdvGAN l 2 l_2 l2迭代⭐⭐⭐⭐生成的对抗样本在视觉上与真实样本非常 相似对抗训练过程不稳定
JSMA l 0 l_0 l0迭代⭐⭐⭐生成的对抗样本与真实样本相似度高生成的对抗样本不具备迁移攻击能 力
单像素攻击 l 0 l_0 l0迭代⭐⭐可仅修改一个像素点进行攻击计算量大,仅适用于尺寸较小的数 据集
stAdv-迭代⭐⭐⭐针对对抗训练防御有较好的攻击效果只针对特定防御策略的模型攻击效 果好
BPDA l ∞ l_∞ l迭代⭐⭐⭐可有效针对混淆梯度防御的模型进行攻击只针对混淆梯度的防御进行攻击

参考:《图像分类中的白盒对抗攻击技术综述_魏佳璇》

  • 10
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小风_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值