Misc是英文Miscellaneous的前四个字母,杂项、混合体、大杂烩的意思。
通常分为四个小块
题意:解密图片
挖掘作者FUZTII
个人博客
图片
在数学和数字电路中指以2为基数的记数系统,以2为基数代表系统是二进位制的。这一系统中,通常用两个不同的符号0(代表零)和1(代表一)来表示
Base64是一种编码方式,是一种可逆的的编码方式,编码后的数据是一个字符串,包含的字符为
A-Z,a-z,0-9,+/
共64个字符:26+26+10+1+1=64
不过其实是65个字符,”=”是填充字符
字符对应ASCII转换成八位二进制
base64的基础单位是38bit的二进制,若是不够38bit则在后面添加0字节(padding)直至满足38bit的二进制转换成46bit的二进制
46bit的二进制转换成十进制
对照base64表把十进制转换成字符
检查base64编码后面有几个等于号
把字符串按照base64表转换成46的倍数位数二进制
删除等于号的个数*8的bit
按照6个bit一组转成字符
用python的base64包 API
import base64
base64.b64encode();
base64.b32encode();
base64.b16encode();
base64.b58encode();
命令根据文件头(魔法字节)去识别一个文件的文件类型,linux自带工具(由于有些文件可能没有文件后缀)
打印文件中可打印的字符,经常用来发现文件中的一些提示信息或是一些特殊的编码信息,常常用来发现题目的突破口。
010是一个非常好用的工具,除了是一个查看和修改文件的编译器外,还有很多自带的脚本可以帮助我们辅助分析文件格式
可以检查png中的数据块
提取图片信道信息
PNG定义了两种类型的数据块,一种是称为关键数据块(critical chunk),这是标准的数据块,另一种叫做辅助数据块(ancillary chunks),这是可选的数据块。关键数据块定义了4个标准数据块,每个PNG文件都必须包含它们,PNG读写软件也都必须要支持这些数据块。
CRC(cyclic redundancy check)域中的值是对Chunk Type Code域和Chunk Data域中的数据进行计算得到的。
文件头数据块IHDR(header chunk):它包含有PNG文件中存储的图像数据的基本信息,由13字节组成,并要作为第一个数据块出现在PNG数据流中,而且一个PNG数据流中只能有一个文件头数据块
//png的CRC检余码,由从IDCH到IHOR的十七位字节进行crc计算得到
import os
import binascii
import struct
misc=open("misc4.png","rb").read()
for i in range(1024):
data=misc[12:16]+struct.pack(">1",1)+misc[20:29]
crc32=binascii.crc32(data)& Oxffffffff
if crc32 == 0x932f8a6b:
print i
图像数据块IDAT(image data chunk):它存储实际的数据,在数据流中可包含多个连续顺序的图像数据块。
最后的数据块138本可以并入前一个,是异常数据块,010editor打开后导出处理
import zlib
import binascii
IDAT=("789C5D91011288480882BF84FFFF5"+
"C7529485537738A21A27D1E49CFD17DB39"+
"37A92E7E603888A6D485180901FB841015"+
"3358DE83112EA2DS1C54CE2E585B15A2FC"+
"78E8872F51C6FC1881882F93D372DEF78E"+
"665B8C36C529622A8A45588138833A170A"+
"2071D0CD18219D88C8D465088698971964"+
"5ED9C11C36AE3ABDAEFCFCBACF023E77C1"+
"7C7897667").decode("hex")
# print IDAT
result=binascii.hexlify(zlib. decompress(IDAT))
print result
是zlib压缩方式,用zlib解压
转换成3031字符串
哈希解密
图像结束数据IEND(image trailer chunk):它用来标记PNG文件或者数据流已经结束,并且必须要放在文件的尾部。
00 00 00 00 49 45 4E 44 AE 42 60 82
使用工具StegSlove
FFD9开头
把FFD9改为FFD8恢复图片
apt -get instal1 steghide
steghide info 1.jpg
提取图片中隐戴内容(有密码)
steghide extract -sf 1.jpg -p 123456
提取投密码的还是会提示输入密码直援回车即可)
steghide extract -sf 1.jpg
将safe6.tXt文件隐藏到text.jpg中:
steghide erbed -cf tast.jpg -ef safe6.txt -p 123456
GIF署名(Signature)和版本号(Version)
GIF署名用来确认一个文件是否是GIF格式的文件,这一部分由三个字符组成:”GIF”:文件版本号也是由三个字节组成,可以为”87a”或”89a”
Logical Screen Descriptor(逻辑屏幕描述符)紧跟在header后面。这个块告诉decoder(解码器)图片需要占用的空间。它的大小固定为7个字节,以canvas width(画布宽度)和canvas height(画布高度)开始
GIF格式可以拥有global color table,或用于针对每个子图片集,提供local color table。
每个color table由一个RGB(就像通常我们见到的(255,0,0)红色那种)列表组成。
一个GIF文件一般包含多个图片。之前的图片渲染模式一般是将多个图片绘制到一个大的(virtual canvas)虚拟画布上,而现在一般将这些图片集用于实现动画。
每个image都以一个image descriptor block(图像描述块)作为开头,这个块固定为10字节。
由于GIF的动态特性,由一帧帧的图片构成,所以每一帧的图片,多帧图片间的结合,都成了隐藏信息的一种载体。
对于需要分离的GIF文件,可以使用convert命令将其每一帧分割开来
root in -/Desktop/tmp 入 convert cake.gif cake.png
root in ~/Desktop/tmp 入 ls
cake-0.png cake-1.png cak0e-2.png cake-3.png cake.gif
使用identify命令去拆解Gif,发现每一帧存在规律。
提取每一帧的间隔并进行转化:
encode-E hidden_text.txt-P pass svega.wav svega_stego.mp3
decode -X -P pass svega_stego.mp3
decode.exe -X ISCC2016.mp3 -P bfsiscc2016
通常来说,波形方向的题,在观察到异常后,使用相关软件(Audacity,Adobe Audition)观察波形规律,将波形进一步转化为01字符串等,从而提取转化出最终的flag。
音频中的频谱隐写是将字符串隐藏在频谱中,此类音频通常会有一个较明显的特征,听起来是一段杂音或者比较刺耳。
文件格式
压缩源文件数据区中每一个压缩的源文件/目录都是一条记录,其中
Central directory核心目录
名称 | 大小 | 描述 |
---|---|---|
HEAD_CRC | 2 | 全部块或块部分的CRC |
HEAD_TYPE | 1 | 块类型 |
HEAD_FLAGS | 2 | 阻止标志 |
HEAD_SIZE | 2 | 块大小 |
ADD_SIZE | 4 | 可选字段-添加块大小 |
Rar压缩包的文件头为 0x 52 61 72 21 1A 07 00
紧跟着文件头(0x526172211A0700)的是标记块(MARK_HEAD),其后还有文件头(File Header)
FieidName | size(aytes) | Possibities |
---|---|---|
HEAD_CRC | 2 | Always 0x30c4 |
HEAD_TYPE | 1 | Header type;0x7b |
HEAD_FLAGS | 2 | Aways 0x4000 |
HEAD_SIZE | 2 | Block size=0x0007 |
常用的协议
AVI、MP4较为常见,使用Ourstrect
常见的磁盘分区格式有以下几种
VMDK文件本质上是物理硬盘的虚拟版,也会存在跟物理硬盘的分区和扇区中类似的填充区域,我们可以利用这些填充区域来把我们需要隐藏的数据隐藏到里面去,这样可以避免隐藏的文件增加了VMDK文件的大小(如直接附加到文件后端),也可以避免由于VMDK文件大小的改变所带来的可能导致的虚拟机错误。而且VMDK文件一般比较大,适合用于隐藏大文件。
snow.exe是一款在html嵌入隐写信息的软件,它的原理是通过在文本文件的末尾嵌入空格和制表位的方式嵌入隐藏信息,不同空格与制表位的组合代表不同的嵌入信息。
NES模拟器直接打开开金手指游戏通关获得flag