对历年来国内外CTF中常见的题型图片隐写的一些总结,本文长期更新,及时补充新的题型。
对历年来国内外CTF中常见的题型图片隐写的一些总结
赛题
XMAN-qualifiers-2017 : Misc/SimpleGIf
考察点Gif文件头
隐写相关技巧
Python 脚本编写
工具010Editor
Linux identify命令
Visual Studio Code
附件
Writeup
GIF头补全
首先用file查看下这个文件:
ctf@ubuntu:~/Desktop$ file '/home/ctf/Desktop/100_KHf05OI.gif'
/home/ctf/Desktop/100_KHf05OI.gif: data
binwalk再看下:
ctf@ubuntu:~/Desktop$ binwalk '/home/ctf/Desktop/100_KHf05OI.gif'
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
可以看出没有识别出什么文件,这里推测它就是一个gif文件,现在来补上gif头。
GIF文件头:47 49 46 38 39 61
得到Gif,什么都没有发现,看来题目没有这么简单:
分析Gif
使用identify命令去拆解Gif,发现每一帧存在规律。
ctf@ubuntu:~$ identify -format "%s %T \n" '/home/ctf/Desktop/100_KHf05OI.gif'
0 66
1 66
2 20
3 10
4 20
5 10
6 10
7 20
8 20
9 20
10 20
11 10
...
提取每一帧的间隔并进行转化:
ctf@ubuntu:~$ identify -format "%T\n" '/home/ctf/Desktop/100_KHf05OI.gif'
66
66
20
10
20
10
10
20
20
20
20
10
20
...
这里有2种可能:
20 & 10 分别代表 0 & 120 & 10 分别代表 0 & 1
20 & 10 分别代表 1 & 0
使用Visual Studio Code来进行批量替换:
去掉最前面2个66,一共是304行,304÷8=38 8个二进制为一组分组。
最后替换是这个样子:
数据处理这里20代表0,10代表1,写一个脚本来进行转换,二进制先转换为10进制,10进制转换为ascii码,asscii转换为相应的字符串。# coding:utf-8
# blog:www.sqlsec,com
import re
def file():
text = raw_input("pleast enter your file pa