【信息隐写】


《CTF安全竞赛入门》启明星辰网络空间安全学院
信息隐写指 数据信息的隐藏,是将秘密信息隐藏在另一个非保密的信息载体中,载体可以是 图像、音频、视频、文本。在CTF中,信息隐写类题目要求选手掌握各式各样的信息隐藏技巧并灵活运用各种隐写类工具,再加上脑洞大开的思维,才能从容应对

1.1 隐写术介绍

指不让除预期的接收者之外的任何人知晓信息的传递事件或内容

1.1.1 隐写术概述

信息明明就在你的面前,你却对它视而不见

1.1.2 隐写术应用

中国古代的明矾书
德国焦点传输技术

1.1.3 CTF隐写术分类

CTF中经常利用下面的几种信息载体进行flag信息的隐写
图片文件:.jpg、.png、.gif、.bmp
文本文件:.docx、.pdf、.zip
音频文件:.wav、.mp3、.mp4

1.1.4 CTF隐写术现状

一是隐写套路比较规范,二是比赛工具较为成熟
图片隐写“三板斧”:binwalk+winhex方向分析文件结构与内部数据;stegsolve方向分析LSB隐写;stegdetect方向检测特殊工具隐写

1.1.5 隐写术基础知识

每种类型的文件都有自己特定的文件头,系统也是根据文件头标识文件的类型
在这里插入图片描述
注释:1.7-ZIP Compressed File:压缩文件;2.Windows Bitmap:BMP文件是微软公司所开发的一种交换和存储数据的方法,各个版本的windows都支持BMP格式的文件,windows提供了快速、方便的存储和压缩BMP文件的方法;3.BZIP Archive:压缩文件;4. Win32 Executable:可移植可执行文件;5. Graphics Interchange Format File:图形交换格式;6. Gzip Archive File:压缩文件,windows常见的压缩文件有.zip/.rar,linux常见的压缩文件有.gz/.tar/tgz/bz2;7. JPG Graphic File:图形文件;8. MPEG-1 Audio Layer 3 Audio File:音频文件;9. PNG Image File:图像文件;10. RAR Archive File:压缩文件;11. Wave File:波形文件;12. ZIP Archive:压缩文件
各种文件类型及文件头标识大全

1.2 隐写实战

图片/文本/音频/其它

1.2.1 图片隐写

根据隐写手法进行分类,可分为插入与替换两种
插入:利用文件格式的无关数据或者在空白区域放置需要的数据不会改变原始数据,只会增加隐写的内容
替换:经典的例子是LSB替换方法,把每一字节的最低有效位进行变换不会改变文件大小,但是源文件会发生变化
注释:LSB(Least Significant Bit)最低有效位:LSB替换隐写基本思想是用嵌入的秘密信息取代载体图像的最低比特位,原来的7个高位平面与替代秘密信息的最低位平面组合成含隐藏信息的新图形

1.图片尾部插入字符串

工具:Winhex十六进制编辑器

隐藏数据和查找隐藏数据功能;智能搜索和替换功能,进行替换时,如果替换字符大于或小于原始字符时可进行选择性操作
在使用Winhex时首先打开一个需要处理的文件,窗口中显示十六进制Hex格式的数值和地址,在旁边的区域显示文件名称、大小、创建时间、最后修改日期、窗口属性以及相关信息。
Winhex具有强大的查找搜索功能,可以查找和替换文本或者Hex值。选择搜索菜单中的联合搜索项,弹出搜索对话框,先输入该文件要搜索的十六进制值选择通配符和搜索范围就可以开始搜索了,可以选择在整个文件中搜索,也可以选择仅在区块中进行有条件的搜索。
winhex下载地址
winhex使用入门
在这里插入图片描述

题目1-1:steg1

考察点:在文件尾部插入字符
通过Winhex查看文件头信息判断文件类型,打开.jpg发现文件头是FF D8 FF E0 00,文件尾是FF D9,文件尾后面有一串字符ZmxhZ3t3ZWxjb21ldG92ZW51c30=。由于该字符由大小写字母加数字组成,并且结尾有等号填充,因此大概率是Base64加密算法,利用解密工具CTFCrack进行解密,解码方式为base64到字符串,得到flag{welcometovenus}
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注释:Base64加密特征:1.字符集:Base64编码使用了64个不同的字符,包括大写字母A-Z,小写字母a-z,数字0-9以及两个特殊字符+和/,26+26+10+2=64。如果数据中包含其它字符,那么可能没有经过Base64编码。2.字符数量:Base64编码后的数据通常比原始数据长度略长,增加了约三分之一的长度。如果数据的长度增长了,可能是经过Base64编码。3.局部填充字符:Base64编码要求原始数据长度是3的倍数,如果不满足,会使用填充字符“=”进行补齐。如果数据以一个或者两个“=”字符结尾,那么可能是经过Base64编码。4.可打印字符:Base64编码后的数据只包含可打印的ASCII字符,不包含控制字符或非ASCII字符。如果数据中包含非ASCII字符,可能没有经过Base64编码。

2.在图片中间插入字符串

题目1-2:steg2

考察点:在图片标记码之间插入字符
标记码的高字节固定为0xFF,标记码之间有冗余字节,如果在标记码之间插入隐秘数据,不会影响图片正常打开,能够达到隐藏数据的效果。并不是所有标记码之间都能插入隐秘数据,FF C0作为帧图像开始的地方,如果在这后面进行插入,可能会破坏图像的帧图像,导致图片无法正常打开
在这里插入图片描述
注释:冗余:指多余的重复或啰嗦内容,包括信息、语言、代码等

3.文件分离

工具:binwalk+foremost

Binwalk是用于搜索给定二进制镜像文件获取嵌入的文件和代码的工具,它被设计用于识别嵌入固件镜像内的文件和代码。Binwalk使用libmagic库,因此它与Unix文件实用程序创建的魔数签名兼容。Binwalk还包括一个自定义魔数签名文件,其中包含常见的诸如压缩/存档文件、固件头、Linux内核、引导加载程序、文件系统等固件映像中常见文件的改进魔数签名。常见的应用场景:隐写术文件分析、流量包内含压缩文件包分析、信息收集固件分析。Binwalk识别文件原理:通过自带的强大的magic特征集,扫描固件中文件系统初始地址的特征码,若匹配成功,则将该段数据dump下来
binwalk使用教程
Binwalk常用命令详解
1.扫描选项:
-B,-- signature 扫描目标文件的常见文件签名
-R,–raw = 扫描目标文件的指定字符序列
-A,–opcodes扫描目标文件中常见可执行代码
-m,–magic = 指定要使用的自定义魔数签名文件
-b,–dumb 禁用智能签名关键字
-I,–invalid显示结果标记为无效
-x,–exclude = 排除与匹配的结果
-y,–include = 只显示匹配的结果
2.提取选项:
-e,–extract自动提取已知的文件类型
-D,–dd = type:ext:cmd提取签名,为文件扩展名为,然后执行
-M,–matryoshka 递归扫描提取的文件
-d,–depth = 限制matryoshka递归深度(默认值:8级深)
-C,–directory = 将文件/文件夹提取到自定义目录(默认值:当前工作目录)
-j,–size = 限制每个提取的文件的大小
-n,–count = 限制提取文件的数量
-r,–rm 提取后删除刻录文件
-z,–carve从文件中读取数据,但不执行提取实用程序
3.熵分析选项:
-E,–entropy 计算文件熵
-F,–fast计算更快,但不太详细的熵分析
-J,–save将熵图保存为PNG图像
-Q,–nlegend 从熵图图中省略图例
-N,–nplot 不生成熵图
-H,–high = 设置上升沿熵触发阈值(默认值:0.95)
-L,–low = 设置下降沿熵触发阈值(默认值:0.85)
4.原始压缩选项:
-X, --deflate扫描原始deflate压缩流
-Z, --lzma 扫描原始LZMA压缩流
-P, --partial浅度扫描,速度更快
-S, --stop 找到第一个结果后停止扫描
5.二进制差异选项:
-W,–hexdump 执行文件或文件的hexdump/diff
-G,–green 只显示包含所有文件中相同字节的行
-i,–red 仅显示包含所有文件中不同字节的行
-U,–blue只显示一些文件中包含不同字节的行
-w,–terse 只显示第一个文件的十六进制转储
6.一般选项:
-l,–length = 要扫描的字节数
-o,–offset = 以此偏移开始扫描
-O,–base = 向所有打印的偏移量添加基址
-K,–block = 设置文件块大小
-g,–swap = 扫描前每n个字节反转一次
-f,–log = 将结果记录到文件
-c,–csv 将结果记录到CSV格式的文件中
-t,–term格式化输出以适合终端窗口
-q,–quiet 禁止输出
-v,–verbose 详细输出
-h,–help显示帮助
-a,–finclude = 只扫描名称与此正则表达式匹配的文件
-p,–fexclude = 不扫描名称与此正则表达式匹配的文件
-s,–status = 启用指定端口上的状态服务器
Foremost是一个控制台程序,用于根据页眉、页脚和内部数据结构恢复文件。Foremost可以处理图像文件,例如由dd,Safeback,Encase等生成的图像文件,或直接在驱动器上。页眉和页脚可以由配置文件指定,也可以使用命令行开关指定内置文件类型,这些内置类型查看给定文件格式的数据结构,从而实现更可靠更快速的恢复。在数字取证和CTF中常用来恢复、分离文件,它默认支持19种类型文件jpg/gif/png/bmp/avi/exe/mpg/mp4/wav/riff/
wmv/mov/pdf/ole/doc/zip/rar/html/cpp等文件的扫描识别恢复,还可以通过配置它的配置文件foremost.conf增加新的支持类型。Foremost分离文件原理:根据文件内的文件头和文件尾对一个文件进行分离,或者识别当前文件是什么文件
foremost使用教程

题目1-3:steg3

考察点:ZIP格式文件分离
使用Winhex打开new.jpg发现文件尾不是FF D9,查找十六进制数值FFD9,发现FF D9后面存在.zip格式文件的文件头标识50 4B 03 04,并且压缩包里包含1.txt,因此猜测flag在该.txt文件中
提取该压缩包有三种方式,第一种是将压缩包的十六进制数值提取出来,另存为.zip格式文件就能得到压缩文件;第二种是直接更改文件扩展名,例如将new.jpg更改为new.zip,然后解压缩分离出图片中的压缩数据;第三种方式是在kali下使用binwalk发现目标文件中包含的所有可识别的文件类型,从new.jpg中发现.jpg和.zip两个文件,使用foremost分离new.jpg中的文件,output文件夹里面是分离出来的文件。解压.zip文件得到1.txt,1.txt中包含flag{welcometovenus}
在这里插入图片描述
在这里插入图片描述

题目1-4:steg4

使用Winhex打开new.jpg发现FF D9后面存在.jpg格式文件的文件头标识FF D8 FF E0,说明是两张图片合并隐写,因此猜测第二张图片存在flag字符串或者提示
在这里插入图片描述
不同文件的分离提取可以借助Kali中的binwalk和foremost工具。binwalk可以识别文件结构,从new.jpg中发现了两个.jpg文件;foremost可以分离文件,获取隐秘数据,使用foremost分离new.jpg中的文件,output文件夹里面是分离出来的文件,flag如下
在这里插入图片描述
在这里插入图片描述

4.LSB隐写

注释:PNG格式图片中的像素一般由RGB三原色(红、绿、蓝)组成,每种颜色占用8位,取值范围为0x00~0xFF,即有256种颜色。它一共包含256的3次方种颜色,即16 777 216种颜色,而人类的眼睛可以区分约1000万种不同的颜色,这就意味着人类无法区分余下的约6 777 216种颜色。LSB隐写修改RGB颜色分量的最低二进制位,也就是最低有效位,

工具:StegSolve

StegSolve常用来检测LSB隐写痕迹的工具,对图片不同通道进行查看
File Format:文件格式,会看见图片的具体信息以及隐藏的flag
Data Extract:数据提取,
左边主要讲Alpha透明度、Red红色、Green绿色、Blue蓝色的颜色通道。Alpha就是透明度,该通道用256级灰度来记录图像中的透明度信息,定义透明、不透明和半透明区域,Alpha的值为0就是全透明,值为255就是不透明。RGB就是红绿蓝,数字越大代表亮度越高,数字越小代表亮度越低。
右边就是Extra By额外的、Bit Order位顺序和Bit Plane Order位平面顺序
1).Extra By(额外的):分为row行和column列
每个像素用R,G,B三个分量表示,那么一张图片就像一个矩阵,矩阵的每个单位就是(0255,0255,0~255)
2).Bit Order(位顺序):MSB是一串数据的最高位,LSB是一串数据的最低位。
3)Bit Plane Order(位平面的顺序):一般图片是24位,也就是3个8,大家可以想像成三明治,比如BGR就是B为三明治第一层,G为第二层,R为第三层。
Steregram Solve:立体试图可以左右控制偏移
Frame Browser:帧浏览器,主要是对GIF之类的动图进行分解
Image Combiner:拼图,图片拼接
StegSolve使用教程

题目1-5:小猪

考察点:LSB隐写二维码
使用StegSolve 打开ste.png,利用Frame Browser功能浏览RGB三种颜色的每一个通道,一般情况下会在0通道进行隐写
在这里插入图片描述
Red plane 0通道隐藏了一张二维码图片,利用二维码扫描工具CQR.exe扫描后得到flag{AppLeU0}
在这里插入图片描述

题目1-6:extract me

考察点:LSB隐写ASCII码
使用StegSolve打开flag.png,利用Data Extract模块查看RGB三种颜色的每一个通道,并且按照一定的排列顺序显示每个通道的Hex和ASCII码字符。勾选RGB三原色的最低位,单击Preview按钮查看Hex和ASCII码字符
如果是比较简单的题目,ASCII码中会出现flag字符,或者改变RGB的排列顺序,也能得到一些提示和线索。但是Hex值中的50 4B 03 04是.zip压缩文件的文件头标识,点击Save Bin将文件另存为flag.zip格式文件
在这里插入图片描述
利用WinRAR.exe将flag.zip解压缩显示压缩文件格式未知或者数据已经被损坏
在这里插入图片描述
利用WinRAR.exe对flag.zip进行修复生成rebuit.flag.zip,解压该压缩包会得到一个没有扩展名的文件1
在这里插入图片描述
利用(file 1)命令分析没有扩展名文件1的文件类型,根据分析结果判断该文件是Linux下的可执行文件,这意味着可以直接运行。使用(ls -l)命令查看文件权限(ls -l命令允许以列格式打印出有关目录内容的详细信息,包括文件/目录权限、链接数、所有者的姓名、文件所属组的名称、以字节为单位的文件大小、最后修改日期、文件/目录名称),发现没有运行权限。利用chmod命令赋予执行权限并运行得到hctf{dd0gf4c3tok3yb0ard4g41n~~~}
在这里插入图片描述
注释:ls命令:列出文件是普通Linux用户和系统管理员最常承担的任务之一,在Linux中ls命令是list的缩写,用于列出或显示目录的内容
Linux中的20个基本“ls”命令示例 - 知乎 (zhihu.com)
ls -m 列出以逗号分隔的目录内容
ls -Q 显示用引号括起来的目录内容
ls -l 以长列表格式显示文件
ls -lh 以人类可读的格式显示文件大小
ls -g 省略组所有权列
ls -F 向目录添加正斜杠
ls -i 显示文件和目录的inode数量
ls -a 先后所有文件,包括隐藏文件
ls *. 根据文件扩展名过滤文件
ls -la 以长列表格式显示所有文件和目录
ls -R 递归显示文件和目录
ls -r 反向排序文件
ls -X 按文件扩展名的字母顺序对文件进行排序
ls -tl 根据文件创建日期和时间显示文件
ls -n 列出UID和GID
注释:chmod命令:Linux系统对文件的权限有着严格的控制,如果对某个文件执行某种操作,必须有对应的权限才能执行成功。Linux文件的权限类型包括读r、写w、执行x。Linux权限的粒度有拥有者、群组、其它组三种,每个文件都可以针对三个粒度设置不同的读写执行权限。Linux通常使用chmod命令对文件的权限进行设置和更改
规定数字4、2、1表示读、写、执行权限,即r=4、w=2、x=1。其它的权限组合可以用其它的八进制数字表示出来,即rwx=4+2+1=7,rw=4+2=6,rx=4+1=5,如果要同时设置rwx可读写运行权限,则将该权限位设置为7,如果要同时设置r-w可读可运行不可写权限,则将该权限位设置为5
规定3个八进制数字分别表示拥有者、群组、其它组的权限情况,使用chmod直接加3个八进制数字的方式直接改变文件权限,语法格式为chmod file,设置所有人可读写执行chmod 777 file(等价于chmod u=rwx,g=rwx,o=rwx file或chmod a=rwx file)
Linux权限详解

题目1-7:双图对比

考察点:LSB隐写之双图对比
使用binwalk分析图片结构,发现final.png是由两张PNG格式图片合并而成的。使用foremost工具进行分离,得到两张看似相同的图片00000000.png和00003754.png。
在这里插入图片描述
Linux比较两个文件不同之处的命令是diff
在这里插入图片描述
通过Python脚本将两张图片进行比较,将不同的像素位置输出,然后每8位一组组成SACII码,得到ISG{E4sY_StEg4n0gR4pHy}
Python脚本如下:
from PIL import Image
import random
img1 = Image.open(‘00000000.png’)
im1 = img1.load()
img2 = Image.open(‘00003754.png’)
im2 = img2.load()
a = 0
i = 0
s = ‘’
for x in range(img1.size[0]):
for y in range(img1.size[1]):
if(im1[x,y]!= im2[x,y]):
print(im1[x,y],im2[x,y])
if i==8:
s= s + chr(a)
a= 0
i= 0
a= im2[x,y][0] + a*2
i= i + 1
s = s + ‘}’
print(s)
在这里插入图片描述
终端输出如下:
Microsoft Windows [版本 10.0.22621.2134]
© Microsoft Corporation。保留所有权利。
D:\CTF\CTF安全竞赛入门\chapter4-隐写\图片隐写\07 lsb3 终极双图>python 11.py
((52, 97, 182), (0, 97, 182))
((52, 97, 182), (1, 97, 182))
((52, 97, 182), (0, 97, 182))
((51, 96, 181), (0, 96, 181))
((51, 96, 181), (1, 96, 181))
((51, 96, 181), (0, 96, 181))
((51, 96, 181), (0, 96, 181))
((50, 95, 180), (1, 95, 180))
((50, 95, 180), (0, 95, 180))
((50, 95, 180), (1, 95, 180))
((50, 95, 180), (0, 95, 180))
((49, 94, 179), (1, 94, 179))
((49, 94, 179), (0, 94, 179))
((49, 94, 179), (0, 94, 179))
((49, 94, 179), (1, 94, 179))
((49, 94, 179), (1, 94, 179))
((48, 95, 177), (0, 95, 177))
((47, 94, 176), (1, 94, 176))
((47, 93, 178), (0, 93, 178))
((47, 93, 178), (0, 93, 178))
((46, 92, 178), (0, 92, 178))
((45, 91, 179), (1, 91, 179))
((45, 91, 179), (1, 91, 179))
((45, 91, 179), (1, 91, 179))
((46, 90, 179), (0, 90, 179))
((46, 90, 179), (1, 90, 179))
((46, 90, 179), (1, 90, 179))
((46, 90, 179), (1, 90, 179))
((46, 90, 179), (1, 90, 179))
((46, 90, 179), (0, 90, 179))
((46, 90, 179), (1, 90, 179))
((46, 90, 179), (1, 90, 179))
((47, 91, 178), (0, 91, 178))
((47, 91, 178), (1, 91, 178))
((47, 91, 178), (0, 91, 178))
((47, 91, 178), (0, 91, 178))
((47, 91, 178), (0, 91, 178))
((48, 92, 179), (1, 92, 179))
((48, 92, 179), (0, 92, 179))
((48, 92, 179), (1, 92, 179))
((46, 92, 178), (0, 92, 178))
((46, 92, 178), (0, 92, 178))
((47, 93, 179), (1, 93, 179))
((47, 93, 179), (1, 93, 179))
((47, 93, 179), (0, 93, 179))
((47, 93, 179), (1, 93, 179))
((48, 94, 180), (0, 94, 180))
((48, 94, 180), (0, 94, 180))
((49, 95, 181), (0, 95, 181))
((49, 95, 181), (1, 95, 181))
((49, 95, 181), (1, 95, 181))
((49, 95, 181), (1, 95, 181))
((49, 95, 181), (0, 95, 181))
((49, 95, 181), (0, 95, 181))
((49, 95, 181), (1, 95, 181))
((49, 95, 181), (1, 95, 181))
((49, 94, 179), (0, 94, 179))
((49, 94, 179), (1, 94, 179))
((48, 93, 178), (0, 93, 178))
((48, 93, 178), (1, 93, 178))
((48, 93, 178), (1, 93, 178))
((48, 93, 178), (0, 93, 178))
((47, 92, 177), (0, 92, 177))
((47, 92, 177), (1, 92, 177))
((48, 94, 180), (0, 94, 180))
((48, 94, 180), (1, 94, 180))
((47, 93, 179), (0, 93, 179))
((48, 92, 179), (1, 92, 179))
((47, 91, 178), (1, 91, 178))
((48, 89, 177), (1, 89, 177))
((47, 88, 176), (1, 88, 176))
((48, 88, 176), (1, 88, 176))
((48, 89, 177), (0, 89, 177))
((48, 89, 177), (1, 89, 177))
((48, 89, 177), (0, 89, 177))
((48, 89, 177), (1, 89, 177))
((48, 89, 177), (0, 89, 177))
((48, 89, 177), (0, 89, 177))
((48, 89, 177), (1, 89, 177))
((48, 89, 177), (1, 89, 177))
((48, 89, 177), (0, 89, 177))
((48, 89, 177), (1, 89, 177))
((48, 89, 177), (1, 89, 177))
((48, 89, 177), (1, 89, 177))
((48, 89, 177), (0, 89, 177))
((48, 89, 177), (1, 89, 177))
((48, 89, 177), (0, 89, 177))
((48, 89, 177), (0, 89, 177))
((48, 89, 177), (0, 89, 177))
((48, 89, 177), (1, 89, 177))
((48, 89, 177), (0, 89, 177))
((48, 89, 177), (0, 89, 177))
((48, 89, 177), (0, 89, 177))
((48, 89, 177), (1, 89, 177))
((48, 89, 177), (0, 89, 177))
((48, 89, 177), (1, 89, 177))
((47, 92, 177), (0, 92, 177))
((49, 91, 177), (1, 91, 177))
((50, 92, 176), (1, 92, 176))
((52, 92, 177), (0, 92, 177))
((52, 93, 175), (0, 93, 175))
((55, 93, 176), (1, 93, 176))
((56, 94, 175), (1, 94, 175))
((56, 94, 175), (1, 94, 175))
((60, 93, 170), (0, 93, 170))
((59, 95, 173), (0, 95, 173))
((60, 95, 176), (1, 95, 176))
((60, 97, 178), (1, 97, 178))
((60, 96, 180), (0, 96, 180))
((58, 95, 183), (1, 95, 183))
((57, 94, 183), (0, 94, 183))
((54, 94, 182), (0, 94, 182))
((50, 91, 179), (0, 91, 179))
((50, 91, 179), (1, 91, 179))
((50, 91, 179), (1, 91, 179))
((49, 90, 178), (0, 90, 178))
((49, 90, 178), (1, 90, 178))
((48, 89, 177), (1, 89, 177))
((48, 89, 177), (1, 89, 177))
((48, 89, 177), (0, 89, 177))
((49, 90, 178), (0, 90, 178))
((49, 90, 178), (0, 90, 178))
((49, 90, 178), (1, 90, 178))
((49, 90, 178), (1, 90, 178))
((49, 90, 178), (0, 90, 178))
((49, 90, 178), (0, 90, 178))
((49, 90, 178), (0, 90, 178))
((49, 90, 178), (0, 90, 178))
((49, 90, 178), (0, 90, 178))
((49, 90, 178), (1, 90, 178))
((49, 90, 178), (1, 90, 178))
((49, 90, 178), (0, 90, 178))
((49, 90, 178), (0, 90, 178))
((49, 90, 178), (1, 90, 178))
((49, 90, 178), (1, 90, 178))
((49, 90, 178), (1, 90, 178))
((49, 90, 178), (0, 90, 178))
((49, 90, 178), (1, 90, 178))
((49, 90, 178), (0, 90, 178))
((49, 90, 178), (1, 90, 178))
((49, 90, 178), (0, 90, 178))
((49, 90, 178), (0, 90, 178))
((49, 90, 178), (1, 90, 178))
((49, 90, 178), (0, 90, 178))
((49, 90, 178), (0, 90, 178))
((49, 90, 178), (0, 90, 178))
((49, 90, 178), (1, 90, 178))
((49, 90, 178), (1, 90, 178))
((49, 90, 178), (0, 90, 178))
((49, 90, 178), (1, 90, 178))
((49, 90, 178), (0, 90, 178))
((49, 90, 178), (0, 90, 178))
((48, 89, 177), (0, 89, 177))
((48, 89, 177), (1, 89, 177))
((48, 89, 177), (1, 89, 177))
((48, 89, 177), (1, 89, 177))
((48, 89, 177), (0, 89, 177))
((48, 89, 177), (0, 89, 177))
((48, 89, 177), (0, 89, 177))
((48, 89, 177), (0, 89, 177))
((48, 89, 177), (0, 89, 177))
((48, 89, 177), (1, 89, 177))
((48, 89, 177), (0, 89, 177))
((48, 89, 177), (0, 89, 177))
((48, 89, 177), (1, 89, 177))
((48, 89, 177), (0, 89, 177))
((48, 89, 177), (0, 89, 177))
((48, 89, 177), (0, 89, 177))
((49, 90, 178), (0, 90, 178))
((49, 90, 178), (1, 90, 178))
((49, 90, 178), (1, 90, 178))
((49, 90, 178), (1, 90, 178))
((49, 90, 178), (1, 90, 178))
((49, 90, 178), (0, 90, 178))
((49, 90, 178), (0, 90, 178))
((49, 90, 178), (1, 90, 178))
((49, 90, 178), (0, 90, 178))
((49, 90, 178), (1, 90, 178))
((49, 90, 178), (1, 90, 178))
((49, 90, 178), (1, 90, 178))
((49, 90, 178), (1, 90, 178))
((49, 90, 178), (1, 90, 178))
((49, 90, 178), (0, 90, 178))
((49, 90, 178), (1, 90, 178))
ISG{E4sY_StEg4n0gR4pHy}

认真是一种态度更是一种责任

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值