3.根据解码的结果可以得到key:/%nsfocusXSStest%/,输入请求框验证答案
隐写术
1.自己动手丰衣足食
1. 先用stegsolve查看一下,其他的LSB之类的并没有发现什么问题,然后看了一下结构发现,有一些异常的IDAT块。如下图所示:
2. 可以看到,正常的块的length是在65524的时候就满了,而倒数第二个IDAT块长度是45027,最后一个长度是138,很明显最后一个IDAT块是有问题的,因为他本来应该并入到倒数第二个未满的块里。
3.我们使用Python来编程,先把这段数据处理一下,保存成16进制的,前面的4字节是长度,然后是标志位IDAT,然后开始是数据,直到D9 CF A5 A8是常crc32校验位,所以实际的数据是:
789C5D91011280400802BF04FFFF5C75294B5537738A21A27D1E49CFD17DB3937A92E7E603880A6D485100901FB0410153350DE83112EA2D51C54CE2E585B15A2FC78E8872F51C6FC1881882F93D372DEF78E665B0C36C529622A0A45588138833A170A2071DDCD18219DB8C0D465D8B6989719645ED9C11C36AE3ABDAEFCFC0ACF023E77C17C7897667
4.用Python来写zlib解压。 import zlib import binascii IDAT =
\DB3937A92E7E603880A6D485100901FB0410153350DE83112EA2D51C54CE2E585B15A2FC78E8872F51C6FC1881882F93D372DEF78E665B0C36C529622A0A45588138833A170A2071DDCD18219DB8C0D465D8B6989719645ED9C11C36AE3ABDAEFCFC0ACF023E77C17C7897667\ result = binascii.hexlify(zlib.decompress(IDAT)) print result
5.发现解出来一些3031的字符串,30和31是hex的0和1的编码,再解一次hex得到一串625长度的01字符串。
1111111000100001101111111100000101110010110100000110111010100000000010111011011101001000000001011101101110101110110100101110110000010101011011010000011111111010101010101111111000000001011101110000000011010011000001010011101101111010101001000011100000000000101000000001001001101000100111001111011100111100001110111110001100101000110011100001010100011010001111010110000010100010110000011011101100100001110011100100001011111110100000000110101001000111101111111011100001101011011100000100001100110001111010111010001101001111100001011101011000111010011100101110100100111011011000110000010110001101000110001111111011010110111011011 6.得到的01串的长度是625,除以8或7都无法整除,也就是说没法直接转换成ascii码,经过分析发现625=25*25,刚好是正方形,尝试一下把这些01组成一个正方形看看是什么,可以用Python的PIL编程可以很方便的画图。
import Image MAX = 25
pic = Image.new(\ str =
\000010111011011101001000000001011101101110101110110100101110110000010101011011010000011111111010101010101111111000000001011101110000000011010011000001010011101101111010101001000011100000000000101000000001001001101000100111001111011100111100001110111110001100101000110011100001010100011010001111010110000010100010110000011011101100100001110011100100001011111110100000000110101001000111101111111011100001101011011100000100001100110001111010111010001101001111100001011101011000111010011100101110100100111011011000110000010110001101000110001111111011010110111011011\ i=0
for y in range (0,MAX):
for x in range (0,MAX): if(str[i] == '1'):
pic.putpixel([x,y],(0, 0, 0)) else:
pic.putpixel([x,y],(255,255,255)) i = i+1
2.SB!SB!SB!
1.这是一个寻找LSB隐藏痕迹的题目,从网上下载一个叫Stegsolve神器,下载地址:http://www.caesum.com/handbook/Stegsolve.jar
2. 打开之后,使用Stegsolve—Analyse—Frame Browser这个可以浏览三个颜色通道中的每一位,可以在红色通道的最低位,发现一个二维码,然后可以扫描得到key:flag{AppLeU0}。
pic.show()
pic.save(\
7.发现一个二维码,扫描得到key:SCTF{(121.518549,25.040854)}
3.当眼花的时候,会显示两张图
1.在Kali Linux下使用binwalk命令确定该文件中含有两个PNG文件,由binwalk知,文件偏移值为0x1D55DC,用winhex将文件分离,保存为1.PNG和2.PNG
(1.PNG)
(2.PNG)