图片隐写
F5隐写
安恒杯月赛
题目提示浏览图片的时候能不能F5刷新呢?
- GitHub上的现成工具:git clone https://github.com/matthewgao/F5-steganography
- 进入F5_steganography目录 java Extract 图片文件路径 -p password
然后会出现一个flag.txt但是打开为乱码
看文件头是zip 看后缀名解压拿flag
flag{96efd0a2037d06f34199e921079778ee}
xor隐写
巅峰极客 loli
hint:0xFF 想到用0xFF异或整个文件1
2
3
4
5
6
7
8
9
10
11#!/usr/bin/env python
# coding=utf-8
def xor():
with open('./1.png', 'rb') as f, open('xor.png', 'wb') as wf:
for each in f.read():
wf.write(chr(ord(each) ^ 0xff))
if __name__ == '__main__':
xor()
得到新的png文件,用hex看文件有提示
将png分离出来可以用foremost或者直接修改16进制文件
观察png文件,可以看到色块分为11列,每列隔行的色块永远是黑色,这说明应该横向读取图片,而列中的横长条由8个小色块组成,显然其代表的是一个字节的数据。
提取信息1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27import matplotlib.image as mpimg
res_str = []
res = []
def readpng():
png = mpimg.imread('./00006777.png')
yy, xx, depth = png.shape
for y in range(yy):
if y % 2 == 0:
for x in range(1, xx - 1, 9):
_str = "0b" + str(int(png[y][x][0])) + str(int(png[y][x + 1][0])) + str(int(png[y][x + 2][0])) + str(int(png[y][x + 3][0])) + str(int(png[y][x + 4][0])) + str(int(png[y][x + 5][0])) + str(int(png[y][x + 6][0])) + str(int(png[y][x + 7][0]))
res_str.append(_str)
res.append(bin2hex(_str))
print res_str
with open('res.bin', 'wb') as f:
for each in res:
f.write(chr(each))
def bin2hex(_bin="0b101"):
return int(_bin, 2) ^ 0xFF
if __name__ == '__main__':
readpng()
打开就能看到flag
flag{e0754197-e3ab-4d0d-b98f-96174c378a34}
LSB隐写
巅峰极客 warmup
判断方法大概就是用Stegsolve打开看red plane 0,blue plane 0, green plane 0是不是大致相同,如果是那多半是LSB隐写
分别提取红绿蓝三个通道的最低位
分别是ook 和brainfuck编码 然后解码拼一起就完事
flag{db640436-7839-4050-8339-75a972fc553c}
安恒月赛 女神
题目提示弱口令,会误以为压缩包密码为弱口令,结果是隐写口令为弱口令
打开压缩包发现有密码,旁边有备注
复制备注到sublime,发现是tab和空格,于是猜测为摩斯码,空格为点,tab为横线
解码得到密码,解压后得到图片,用Stegoslove分析应该是LSB隐写,用cloacked-pixel解出flag,密码为弱口令
flag{jsy09-wytg5-wius8}
反色二维码
有些简单题目用stegsolve就能出二维码不过是反色的
比如这种
whalectf Find
这时候发送到QQ上点击选中就可以扫了
word隐写
第一种是在word内容里隐藏文字
勾选上隐藏文字就可以看到隐写内容。
当然也有把文字颜色改为和背景色一样的,还有用图片覆盖的。
第二种是在xml文件中隐藏
用binwalk查看文件或者将文件后缀名改为zip可以解压出xml文件
未完待添加。。。。。。