ctfshow misc入门wp

这篇具有很好参考价值的文章主要介绍了ctfshow misc入门wp。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

图片篇(基础操作)

misc1

misc2

misc3

misc4

图片篇(信息附加)

misc5

misc6

misc7

misc8

​misc9

misc10

misc11

misc12

​misc13

misc14

misc15

misc16

misc17

misc18

misc19

misc20

misc21

misc22

misc23

misc41

图片篇(文件结构)

misc24

misc25

misc26

misc27

misc28

misc29

misc30

​misc31

misc32

misc33

misc34

misc35

misc36

​misc37

misc38

misc39

misc40

misc42

misc43

misc44

misc45

misc46

misc47

misc48

misc49

图片篇(颜色通道)

misc50

misc51

misc52

misc53

misc54

​misc55

misc56

参考文章


图片篇(基础操作)

misc1

压缩包解压之后得到一张图片,里面就是flag

misc2

将txt拖到winhex中查看,发现文件头为89 50 4E 47,说明是png格式,直接修改后缀为.png,得到flag

ctfshow misc入门wp

misc3

发现为.bpg格式文件,使用bpgview.exe打开,在命令行输入bpgview.exe misc3.bpg,即可得到flag

ctfshow misc入门wp

misc4

将解压得到的6个txt全部改为图片后缀即可,如.jpg .png等。将他们拖进winhex查看,发现1.txt的文件头是89 50 4E 47,为png格式;2.txt的文件头是FF D8 FF,为jpg格式;3.txt的文件头是42 4D,为bmp格式;4.txt的文件头是47 49 46 38,为gif格式;5.txt的文件头是49 49 2A 00,为tif格式;6.txt的文件头是52 49 46 46,可修改为webp格式。

图片篇(信息附加)

misc5

将图片拖进winhex,搜索ctfshow,发现在结尾处有flag

ctfshow misc入门wp

misc6

与上一题一样,用winehx打开搜索ctfshow,发现flag

ctfshow misc入门wp

misc7

与上一题一样

misc8

打开winhex查看,发现中间有很多00字段,猜测可能包含了另一个文件

ctfshow misc入门wp

打开kali使用binwalk命令分析,发现存在另一个文件,用foremost分离得到另一张图片,打开就是flag

binwalk misc8.png

foremost misc8.png

ctfshow misc入门wp

misc9

winhex打开搜索ctfshow,得到flag

ctfshow misc入门wp

misc10

在kali中使用binwalk -e命令分离出隐藏文件,得到flag

binwalk misc10.png

binwalk -e misc10.png

ctfshow misc入门wp

ctfshow misc入门wp 

misc11

用tweakpng.exe打开发现有两个数据块,根据提示删除第一个数据,再另存为图片,得到flag

ctfshow misc入门wp

ctfshow misc入门wp 

misc12

也是用tweakpng.exe打开删除前8个数据块即可

ctfshow misc入门wp

misc13

根据提示,用winhex打开,拉到结尾处找到一段像flag的值,隔位取值,得到flag

ctfshow misc入门wp

misc14

用winhex打开,发现有大量00数据

ctfshow misc入门wp打开kali,用binwalk命令分析一下,发现在2103处还有数据为jpg图片,使用dd命令分离出该图片

binwalk -e misc14.jpg

dd if=misc14.jpg of=flag.jpg skip=2103 bs=1

ctfshow misc入门wp

misc15

winhex打开搜索ctfshow

ctfshow misc入门wp

misc16

用binwalk命令分离出隐藏文件,得到flag

binwalk -e misc16.png

ctfshow misc入门wp

misc17

在kali中使用zsteg命令,再用binwalk对1.txt进行分离,得到flag

zsteg -E "extradata:0" misc17.png > 1.txt

binwalk -e 1.txt

ctfshow misc入门wp

ctfshow misc入门wp 

misc18

根据提示,右击属性,找到详细信息

ctfshow misc入门wp

ctfshow misc入门wp 

misc19

在kali中利用exiftool查看图片,将文档名和主机拼起来就是flag

exiftool misc19.tif

 ctfshow misc入门wp

 也可以打开在线网站https://exif.tuchong.com/进行查看

ctfshow misc入门wp

misc20

与上题一样也是exif,将内容转成字母,得到flag

ctfshow{c97964b1aecf06e1d79c21ddad593e42}

ctfshow misc入门wp

misc21

也是exif,查看信息,得到序列号为686578285826597329,提交发现错误,尝试转成十六进制形式,发现得到提示,按顺序将xy转化成十六进制

ctfshow misc入门wp

ctfshow misc入门wp 转换脚本:

n = [3902939465, 2371618619, 1082452817, 2980145261]
flag=''
for i in n:
    a=str(hex(i))
    flag+=a[2:]
print(flag)

misc22

在kali中使用exiftool命令查看图片,可以看到存在缩略图,再以二进制形式提取缩略图信息,并写入flag.jpg中

exiftool misc22.jpg

exiftool -ThumbnailImage -b misc22.jpg > flag.jpg

ctfshow misc入门wp

ctfshow misc入门wp 

或者使用MagiExif软件打开,可以直接看到缩略图

ctfshow misc入门wp

misc23

kali中使用exiftool命令查看到有四个时间

exiftool misc23.psd

ctfshow misc入门wp

使用在线工具https://tool.lu/timestamp/,将四个时间转化为时间戳

ctfshow misc入门wp

最终得到874865822,2699237688,2156662245,460377706,用21题的脚本跑一下,即可得到flag

misc41

在010Edito中搜索F0 01,使其高亮,就可以看到flag了

ctfshow misc入门wp

图片篇(文件结构)

misc24

右击属性可以看到目前像素是900 x 153=137700,而文件头占了53字节,文件结尾在675053字节处。又因为每个像素点由三个字节表示,每个字节控制一种颜色,分别为红、绿、蓝三种颜色。所以文件真实像素大小为(675053-53)/3=225000。根据提示本题的宽度是没问题的,所以只需要修改高度即可。高度=225000/900=250

ctfshow misc入门wp

ctfshow misc入门wp

修改高度为FA,右键另存为图片,得到flag

ctfshow misc入门wp ctfshow misc入门wp

misc25

这题是crc校验问题,关于png图片结构和crc校验的问题可以看我之前的文章:png图片的结构和crc校验_红烧大鸡块的博客-CSDN博客

这里直接上爆破宽高的脚本:

import binascii
import struct
 
 
 
crcbp = open("misc25.png", "rb").read()    #打开图片
crc32frombp = int(crcbp[29:33].hex(),16)     #读取图片中的CRC校验值
print(crc32frombp)
 
for i in range(4000):                        #宽度1-4000进行枚举
    for j in range(4000):                    #高度1-4000进行枚举
        data = crcbp[12:16] + \
            struct.pack('>i', i)+struct.pack('>i', j)+crcbp[24:29]
        crc32 = binascii.crc32(data) & 0xffffffff
        # print(crc32)
        if(crc32 == crc32frombp):            #计算当图片大小为i:j时的CRC校验值,与图片中的CRC比较,当相同,则图片大小已经确定
            print(i, j)
            print('hex:', hex(i), hex(j))
            exit(0)

ctfshow misc入门wp

得到正确的宽高,在winhex中修改高度,另存为新的图片,这样就可以看到flag了

ctfshow misc入门wp 

ctfshow misc入门wp

misc26

与上一题一样,用脚本跑出正确的宽高,修改之后得到flag

ctfshow misc入门wp

misc27

修改图片高度为FF,得到flag

ctfshow misc入门wp

 ctfshow misc入门wp

misc28

修改高度96 00 为FF 00,另存为新的图片,因为是gif格式不方便查看,打开StegSolve查看图片,即可得到flag

ctfshow misc入门wp

 ctfshow misc入门wp

misc29

使用winhex搜索中的替换功能,将96 00全部替换为FF 00,即可得到flag

ctfshow misc入门wp 

ctfshow misc入门wp

misc30

将图片宽度修改为950的16进制值03 B6,因为大多数的BMP文件都是倒向的位图,所以这里要倒着写。另存为图片,得到flag

ctfshow misc入门wp

misc31

和misc24一样,计算图片的宽高,像素是900 x 153=137700,真实像素大小为(487251-54)/3=162399。又因为高度正确,所以宽度=162399/150=1082.66。修改宽度为1082的16进制值04 3A即可。

ctfshow misc入门wp

ctfshow misc入门wp

misc32

也是crc校验问题,用misc25的脚本爆破出正确宽高,修改即可

ctfshow misc入门wp

misc33

与上题一样

ctfshow misc入门wp

misc34

由于crc校验也被改了,根据题目提示宽度不对,所以修改一下脚本,遍历宽度生成图片,找到正常的图片,最终发现正确宽度为1123

import struct

filename = "misc34.png"
with open(filename, 'rb') as f:
    data = f.read()
    for i in range(901,1200):
        name = str(i) + ".png"
        f1 = open(name,"wb")
        new = data[:16]+struct.pack('>i',i)+data[20:]
        f1.write(new)
        f1.close()

ctfshow misc入门wp

misc35

这题需要先修改图片的高度,这里我改到600,之后再遍历宽度得到正确的图片,宽度在993~1000范围内的图片都是正常的

ctfshow misc入门wp

脚本:

import struct
filename = "misc35.jpg"
with open(filename, 'rb') as f:
    data = f.read()
    for i in range(901,1000):
        name = str(i) + ".jpg"
        f1 = open(name,"wb")
        new = data[:159]+struct.pack('>h',i)+data[161:]
        f1.write(new)
        f1.close()

misc36

先修改图片高度为300,再利用脚本遍历,得到正确宽度为941

ctfshow misc入门wp

脚本:

import struct
filename = "misc36.gif"
with open(filename, 'rb') as f:
    data = f.read()
    for i in range(920,951):
        name = str(i) + ".gif"
        f1 = open(name,"wb")
        new = data[:38]+struct.pack('>h',i)[::-1]+data[40:]
        f1.write(new)
        f1.close()

misc37

将图片后缀改为png,使用APNG Disassembler对其进行分离或者打开在线网站https://tu.sioe.cn/gj/fenjie/,分离gif帧,可以看到在第9,14,21,31,34帧有flag,拼起来提交即可。

ctfshow misc入门wp

ctfshow misc入门wp 

ctfshow misc入门wp 

ctfshow misc入门wp 

ctfshow misc入门wp 

misc38

用APNG Disassembler或 Honeyview打开图片,一帧一帧查看就可以得到flag

ctfshow misc入门wp

ctfshow misc入门wp 

ctfshow misc入门wp 

ctfshow misc入门wp 

misc39

这里是利用不同帧之间的间隔时间来隐写的。打开kali利用identify命令提取出来

identify -format "%T " misc39.gif > 1.txt

得到的一串36和37,考虑把37换成1、36换成0,就得到长度为287的二进制字符串,考虑每7位转一个字符(正常是8位一组),得到flag。

脚本:

s="11000111110100110011011100111101000110111111101111111011011010101100100111000011000101100101100110110011001110010111001011010111001101100010011011111000101100101011001001101100111000110010001110010110110011001111000010111001110010111000101100011110000101100000110100011010101110011111101"
flag=""
for i in range(41): #287//7
    flag += chr(int(s[7*i:7*(i+1)],2))
print(flag)

 ctfshow misc入门wp

misc40

用APNG Disassembler打开,分离出各个帧。可以看到除了分离出图片外,每个图片还有个txt文档,里面有我们要的内容。写脚本提取出来.

ctfshow misc入门wp

脚本:

flag=""
for i in range(28,69): #flag内容从28位开始
    f = open('apngframe'+str(i)+'.txt')
    s = f.read()
    flag += chr(int(s.split("/")[0][6:]))
print(flag)

ctfshow misc入门wp 

misc42

用tweakpng打开,发现这几个数转字符串就是ctfshow,将剩下的全部转成字符得到flag。

ctfshow{078cbd0f9c8d3f2158e70529f8913c65}

ctfshow misc入门wp

misc43

用tweakpng打开 发现报错,用pngdebugger打开进行分析,发现很多错误的crc值,根据提示提取出来转成字符串得到flag

ctfshow misc入门wp

ctfshow misc入门wp 

misc44

根据提示应该还是crc错误,用PNGDebugger将信息提取到1.txt中

PNGDebugger.exe misc44.png > 1.txt

将文本前10行和最后4行没用的删掉。然后写脚本,把CRC OK的替换成1,CRC FAILED替换成0

脚本:

f=open("1.txt","r")
s=f.read()
f.close()
flag=""
for i in s.split():
    if "OK!" == i:
        flag += "1"
    elif "FAILED" ==i:
        flag += "0"
print(flag)
#11111111111111110110001101110100011001100111001101101000011011110111011101111011011000110110001100110001011000010110011000110011001100100110001001100110001110010011011000110011001100000011100001100110011000110011000100110010001101100011001100110010001100110011000101100010011001010011011100111000001100110110011000110110001110010110010101111101
print(len(flag)) #344
for i in range(43):
    print(chr(int(flag[8*i:8*(i+1)],2)),end="")

misc45

exif,binwalk都没有什么有效的信息,按照提示可能是换一种文件格式。去在线网站:https://cdkm.com/cn/png-to-bmp,将图片转换成bmp格式。然后在kali中使用binwalk命令进行分析,发现存在flag.png,提取出来得到flag

binwalk misc45.bmp

ctfshow misc入门wp

ctfshow misc入门wp

misc46

kali中使用identify命令提取出信息存到1.txt中

identify misc46.gif > 1.txt

然后就用gif每一帧的偏移量作为坐标来画图

ctfshow misc入门wp

脚本:

from PIL import Image
import matplotlib.pyplot as plt
f = open('1.txt')
pp = []
while 1:
    c = f.readline()
    if c:
        s = eval(c.split('+')[1]+','+c.split('+')[2][:2])
        pp.append(s)
        print(s)
        # print(c)
    else:
        break
img = Image.new('RGB',(400,70),(255,255,255))
for i in pp:
    new = Image.new('RGB',(1,1),(0,0,0))
    img.paste(new,i)
plt.imshow(img)
plt.show()

ctfshow misc入门wp

misc47

给了一个png,打开发现没内容,用浏览器打开,确认是apng。对于apng格式每一个IDAT块前面都会有一个fcTL块,它其中就包含水平垂直偏移量。

脚本:

import struct
from PIL import Image
import matplotlib.pyplot as plt
f = open('misc47.png','rb')
c = f.read()
c = c[c.index(bytes.fromhex('6663544C00000001')):]
pp = []
for i in range(1,1124,2):
    start = c.index(bytes.fromhex('6663544C0000')+struct.pack('>h',i))
    # start = c.index(bytes.fromhex('6663544C000000'+hex(i)[2:]))
    # print(start)
    fc = c[start:start+30]
    print(fc[18:20],fc[22:24])
    print(struct.unpack('>h',fc[18:20])+struct.unpack('>h',fc[22:24]))
    pp.append(struct.unpack('>h',fc[18:20])+struct.unpack('>h',fc[22:24]))
    # print(fc.index(b'\xb6'),fc.index(b'\x34'))
# print(c[:100])
img = Image.new('RGB',(400,70),(255,255,255))
for i in pp:
    new = Image.new('RGB',(1,1),(0,0,0))
    img.paste(new,i)
plt.imshow(img)
plt.show()

ctfshow misc入门wp

misc48

用winhex打开图片,发现右侧有提示:1、统计FF的数量再减一;2、ctfshow{}中包含32个字符。

ctfshow misc入门wp

因为flag长度为32位,所以只统计前32个FF的数量,得到

0 12 11 0 7 10 13 13 9 0 9 13 0 13 6 0 10 9 2 1 0 1 10 8 11 5 12 7 2 2 3 10

转为16进制得到,ctfshow{0cb07add909d0d60a92101a8b5c7223a}

misc49

脑洞题,winhex打开图片,发现能看到很多字符串,而且这些字符串前面都出现过FFE,将FFE后的那个字符提取出来就是flag了

ctfshow misc入门wp

 最终得到ctfshow{0c618671a153f5da3948fdb2a2238e44}

图片篇(颜色通道)

misc50

考察StegSolve的使用,直接StegSolve打开,拼起来得到flag

ctfshow misc入门wp

ctfshow misc入门wp 

ctfshow misc入门wp 

misc51

统计一下每种颜色像素点的个数,发现绝大多数颜色只出现过1-3次,而(64, 96, 128)出现过282次,(128, 96, 64)出现过279次

脚本:

from PIL import Image
im=Image.open('misc51.png')
im = im.convert('RGB')
img = Image.new("RGB",(900,150))

dic = {}

for h in range(900):
    for w in range(150):
        s = im.getpixel((h,w))
        dic[s] = dic.get(s,0)+1
lt = list(dic.items())
lt.sort(key = lambda x:x[-1])
print(lt)

Image.new新建一个黑色背景的图像,再遍历一次,如果坐标(x,y)对应的颜色为上述两种其一,则把该坐标对应的像素点变成白色

脚本:

from PIL import Image
im=Image.open('misc51.png')
im = im.convert('RGB')
img = Image.new("RGB",(900,150))

for h in range(900):
    for w in range(150):
        s = im.getpixel((h,w))
        if s == (64, 96, 128) or s == (128, 96, 64):
            img.putpixel([h, w], (255, 255, 255))
img.show()

ctfshow misc入门wp

最后得到flag,ctfshow{51fcc6228d768a3acab1d05572e52133} 

misc52

大概做法和misc51一样,但是不同的是,这题颜色的出现更有规律,每种颜色的出现次数在199-585次。这里只要选择出现次数最少的十种即可,不需要猜或是爆破。

脚本:

from PIL import Image
im=Image.open('misc52.png')
im = im.convert('RGB')
img = Image.new("RGB",(900,150))
lt = [(130, 176, 116),(72, 217, 123),(146, 16, 141),(130, 241, 105),(251, 160, 136),(5, 129, 88),(167, 46, 187),(20, 65, 141),(96, 231, 225),(196, 144, 18)]
for h in range(900):
    for w in range(150):
        s = im.getpixel((h,w))
        if s in lt:
            img.putpixel([h, w], (255, 255, 255))
img.show()

ctfshow misc入门wp

misc53

LSB隐写,打开StegSolve,选择Analyse中的Data Extract,勾选上相应的选项,得到flag

ctfshow misc入门wp

ctfshow misc入门wp 

misc54

在Alpha 0,Green 0,Blue 0均发现了LSB隐写痕迹。和misc53不同的是,这里是竖向排列的,所以要改一下选项

ctfshow misc入门wp

ctfshow misc入门wp 

ctfshow misc入门wp 

misc55

注意到图片是上下翻转的,写脚本把图片翻转回来

from PIL import Image

img = Image.open('misc55.png')

img.transpose(Image.FLIP_TOP_BOTTOM).save('out.png')

观察到R0、G0、B0通道均有隐写痕迹,而且也是竖向排列

ctfshow misc入门wp

看文件头发现是zip格式,点下面的Save Bin保存为1.zip,解压后得到flag

ctfshow misc入门wp 

misc56

观察到R4、R2、R1、G4、G2、G1通道均有隐写痕迹,得到flag

ctfshow misc入门wp

参考文章

CTFShow-MISC入门篇详细wp(1-56)_ctfshow misc入门_落寞的魚丶的博客-CSDN博客

ctfshow-Misc入门 图片篇(1-49)_z.volcano的博客-CSDN博客_ctf出题文章来源地址https://www.toymoban.com/news/detail-436187.html

到了这里,关于ctfshow misc入门wp的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CTF-Misc基础知识之图片及各种工具

    MISC作为CTF中比较重要的一类题型,分值占比较大,为了帮助大家更好的学习MISC的做题方法,我总结了常见的图片类型中的几种题型及工具: 图片,音频,视频 首先就是大家常见的图片分析,图片修复,图片修改长宽高,图片拼接,二维码扫描,LSB隐写等等。 遇到图片类型

    2023年04月09日
    浏览(40)
  • CTFshow-pwn入门-前置基础pwn32-pwn34

    FORTIFY_SOURCE(源码增强),这个其实有点类似与Windows中用新版Visual Studio进行开发的时候,当你用一些危险函数比如strcpy、sprintf、strcat,编译器会提示你用xx_s加强版函数。 FORTIFY_SOURCE本质上一种检查和替换机制,对GCC和glibc的一个安全补丁。 目前支持memcpy, memmove, memset, strcpy, s

    2024年02月09日
    浏览(34)
  • CTF之misc-图片隐写

    隐写术是一门关于信息隐藏的技巧与科学,所谓信息隐藏指的是不让除预期 的接收者之外的任何人知晓信息的传递事件或者信息的内容。隐写术的英文 叫做Steganography,来源于特里特米乌斯的一本讲述密码学与隐写术的著 作Steganographia,该书书名源于希腊语,意为“隐秘书写

    2024年02月11日
    浏览(43)
  • 12. python从入门到精通——文件及目录操作

    目录 基本文件操作 创建和打开文件:open()函数 关闭文件:可以不关闭文件因为有垃圾回收功能 打开文件时使用with语句:不需要自己关闭文件,可以自己关闭 写入文件内容 file.write方法 file.writelines方法:可以向文件中写入字符串列表,但没有换行符和分隔符 读取文件有三种情况

    2024年02月09日
    浏览(54)
  • Windows基础命令:目录和文件操作&文本处理&网络相关操作

    方法一:打开\\\"运行\\\"对话框(Win+R),输入cmd 也可以通过cmd /c 命令和cmd /k 命令的方式来直接运行命令(/c表示执行完命令后关闭cmd窗口;/k表示执行完命令后保留cmd窗口) 方法二:在任务栏直接搜索“cmd” 显示当前目录或改变当前目录 语法规则 (1)显示目录 显示当前驱动

    2024年02月05日
    浏览(43)
  • Python 程序设计入门(025)—— 使用 os 模块操作文件与目录

    Python 内置了 os 模块及其子模块 os.path,用于对目录或文件进行操作。在使用 os 模块及其子模块 os.path 模块时,需要使用 import 导入该模块,才能使用它们提供的函数或方法。 1、os 模块提供的操作目录的函数 os 模块提供的操作目录的函数如下表所示: 函数 说明 getcwd() 返回当

    2024年02月11日
    浏览(57)
  • Linux :: 【基础指令篇 :: 文件及目录操作:(4)】:: mkdir :: 创建目录:指定路径单个目录创建及一次性创建多级目录

    前言:本篇是 Linux 基本操作篇章的内容! 笔者使用的环境是基于腾讯云服务器:CentOS 7.6 64bit。 学习集: C++ 入门到入土!!!学习合集 Linux 从命令到网络再到内核!学习合集 目录索引: 1. 基本语法及功能 2. 基本使用示例 - - 2.1 当前目录下创建指定新目录 - - 2.2 指定目录下

    2024年02月06日
    浏览(59)
  • 掌握终端基础技巧:Linux下的文件和目录复制操作

    在Linux系统中,命令行终端是一个大而高效的工具,让使用者可以通过简单的命令完成各种任务。其中,文件和目录的复制操作是日常使用频率较高的一项操作。本文将介绍Linux下的文件和目录复制基础技巧,帮助您更好地掌握命令行终端的使用。 一、复制文件: 1.cp命令:

    2024年02月08日
    浏览(52)
  • SAP ABAP基础通关百宝书【从入门到精通】目录

    本文章为《SAP ABAP基础通关百宝书》【从入门到精通】系列的目录以及关于该教程的后续写作计划表 💬【个人网站】:【芒果个人日志】​​​​​​ 💬【专栏地址】:  《SAP ABAP基础通关百宝书》【从入门到精通】 https://blog.csdn.net/weixin_59480481/category_12310781.html 💂作者简

    2023年04月27日
    浏览(46)
  • Linux :: 【基础指令篇 :: 文件及目录操作:(6)】:: rmidr / rm:删除空目录、删除非空目录及删除文件指令

    前言:本篇是 Linux 基本操作篇章的内容! 笔者使用的环境是基于腾讯云服务器:CentOS 7.6 64bit。 学习集: C++ 入门到入土!!!学习合集 Linux 从命令到网络再到内核!学习合集 目录索引: 1. rmdir / rm 基本语法及功能 2. rmdir 基本使用测试 (看操作代码) - - 2.1 创建一个空目录

    2024年02月05日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包