1.雨中龙猫
考查base64编码和图片源码隐写
题目给出答案格式whalectf{xxx},将whalectf进行base64编码:d2hhbGVjdGY=
notepad++打开源码搜索,发现并不能搜索到
因为base64编码过程会重新以6位分组,所以whalectf后面的字母可能会对whalectf的编码影响,所以搜索前几位d2hhbGVj
得到d2hhbGVjdGZ7TG
进行解密,发现并不能解码,应该是base64不完整,那么继续寻找剩余base64编码
题目还有提示最后是py,所以我们先做一个答案whalectf{aaaaaaaaaaaaaaaaaaaaaaaapy}
编码得到d2hhbGVjdGZ7YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhcHl9
(感觉题目提示有点不合适…)
同上搜索后几位得到9uZ19tYW9faXNfaGFwcHl9
拼接得到d2hhbGVjdGZ7TG9uZ19tYW9faXNfaGFwcHl9
base64解码得到flag:whalectf{Long_mao_is_happy}
2.鲸鱼日记
提示提示可能会有文件绑定
通过命令binwalk分析图片
binwalk whalediary.jpg
发现文件中除了图片还有别的文件
然后通过foremost分解文件: foremost whalediary.jpg -o 1
1位指定文件夹
打开是一个word文档,但是搜索答案格式whale没有搜到
然后全选右键字体
点击“隐藏”为空,确定之后发现每个结尾多出来一个字符.
拼接得到flag: whale{lovesea}
ps:
3.追加数据
使用pngcheck检查图片的IDAT位
发现第一个IDAT块的长度大于65524,但后面还有一个长度为193的IDAT块,判断flag存在193的IDAT块中。
用winhex打开图片文件
根据pngcheck结果找出0x17345位置的IDAT块
将长度193的数据提取出来,以十六进制复制
获取到的数据是通过zlib方式压缩的不可读数据,所以用下面脚本解压,
#codong:utf-8
import zlib
import binascii
IDAT='789CA552B911C3300C5B09D87FB99C65E2A11A17915328FC8487C0C7E17BCEF57CCFAFA27CAB749B8A8E3E754C4C15EF25F934CDFF9DD7C0D413EB7D9E18D16F15D2EB0B2BF1D44C6AE6CAB1664F11933436A9D0D8AA6B5A2D09BA785E58EC8AB264111C0330A148170B90DA0E582CF388073676D2022C50CA86B63175A3FD26AE1ECDF2C658D148E0391591C9916A795432FBDDF27F6D2B71476C6C361C052FAA846A91B22C76A25878681B7EA904A950E28887562FDBC59AF6DFF901E0DBC1AB'.decode('hex')
result = binascii.hexlify(zlib.decompress(IDAT))
bin = result.decode('hex')
print bin
print '\r\n'
print len(bin)
得到
结果为一堆二进制数据,长度为1024
1024正好为32的平方,所以这可能是一个二维码.
把01数据放到result.txt中,用脚本生成二维码
# python2
#! /usr/bin/env python
from PIL import Image
MAX = 32
pic = Image.new('RGB',(MAX*9,MAX*9))
f = open('result.txt','r')
str = f.read()
i = 0
for y in range(0,MAX*9,9):
for x in range(0,MAX*9,9):
if(str[i] == '1'):
for n in range(9):
for j in range(9):
pic.putpixel([x+j,y+n],(0,0,0))
else:
for k in range(9):
for l in range(9):
pic.putpixel([x+l,y+k],(255,255,255))
i = i+1
pic.show()
pic.save("flag.png")
f.close()
扫描二维码得到flag
ps:
4.破碎的心
有一张不完整的条形码
因为条形码中间并没有完全断裂,所以可以直接恢复
用画图打开条形码,使用矩形选择工具,选择一部分完整连续的块,按住Ctrl键在点击上下方向键慢慢使残缺部分恢复
重复动作补全条形码
打开bctester识别
得到flag
5.我们不一样
首先binwalk分析图片
发现有两张图片,用foremost命令将其分解
分
解后用compare命令比较两张图片的不同
compare命令对比后,相同部分会使用模糊表示,不同地方使用红色表示。
放大后可以看到左下角有红线,
然后通过python的image库将两张图片对比后不同的像素打印出来。
# python2
#coding:utf-8
from PIL import Image
import random
img1 = Image.open("00000000.png")
im1 = img1.load()
img2 = Image.open("00006909.png")
im2 = img2.load()
a=''
i=0
s=''
for y in range(img1.size[1]):
for x in range(img1.size[0]):
if(im1[x,y]!=im2[x,y]):
print(im1[x,y],im2[x,y])
if i == 8:
s=s+chr(int(a,2))
a=''
i=0
a=a+str(im2[x,y][2])
i=i+1
s=s+'}'
print(s)
发现rgb中b通道第二张变成了01二进制,将二进制数字8个为一组转换成字符,得到flag
上面脚本直接得到flag
6.黑白打字机
这是反色后的二维码,打开画图工具将反色操作
当然也可以直接用工具扫描二维码…
提示“你会五笔码”
图片名字为yhpargonagets
反过来是steganography,像一个单词。
百度一下,这是个工具…
利用该工具对图片解密
发现一堆乱码,应该是被加密了
点击Decrypt解密操作
发现需要密码
根据二维码内容:你会五笔码
查询这5个汉字的五笔编码
拼接得到wqiywfcugghgttfnkcg
输入密码框
得到flag:venusctf{V3nus_St3gan0graph1_1s_g00d}