tips:
- png图片高宽隐写不一定是小的改小
- 对于这种无规律字符集,在没有找到编码的情况下最后都可以使用字符统计的方法进行尝试
1.认真你就输了
binwalk+foremost+搜索
2.just_a_rar
rar爆破+图片属性
3.你猜我是个啥
查看hex,flag位于最后
4.开场曲
mikutab…
5.寂静之城
。。。羊踹玉兔
https://weibo.com/p/230418bb4702370102w4oa
6.一叶障目
(windows打得开,linux打不开存在长宽隐写)
高宽更改隐写,按照一般情况下改写宽度
结果导致图片改变,所以改变高度
得到flag
7.黄金六年
打开是一个视频
逐帧播放有二维码,发现不是flag
hex打开视频文件,文件末尾存在base64编码(注意复制时用Winhex打开确认一番)
在线解密:https://www.sojson.com/base64.html
发现是rar文件,解压缩需要密码
密码是视频中的二维码
(最后一张二维码死活看不见,电脑亮度调最大,屏幕往前拉,俯视看视频!!!)
8.john-in-the-middle
文件-导出HTTP对象-save all
logo图片存在隐写
(一般来说没有flag相关文件,需要查看图片)
9.拉胯的三条命令
wireshark tcp
10.间谍启示录
装载镜像
修改.exe后缀为rar
解压得到flag.exe
运行得到flag
11.伟大的侦探
解压密码.txt提示密码编码未知
将后缀改为doc,并打开预览选择编码
解压发现图片为跳舞小人,福尔摩斯跳舞小人密码
对照表:
12.gakki
binwalk+foremost分离得到rar压缩包
没有密码提示,爆破得到密码
解压得到flag.txt
(对于这种无规律字符集,在没有找到编码的情况下最后都可以使用字符统计的方法进行尝试)
字频统计代码:
# gakki_exp.py# Author : imaginalphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()_+- ={}[]"f = open("flag.txt", "r")data = f.read()result = {d:0 for d in alphabet}def sort_by_value(d):items = d.items()backitems = [[v[1],v[0]] for v in items]backitems.sort(reverse=True)return [ backitems[i][1] for i in range(0,len(backitems))]for d in data:for alpha in alphabet:if d == alpha:result[alpha] = result[alpha] + 1res=sort_by_value(result)for i in res:print(i,end="")
13.纳尼
解压得到6.gif
补全文件头GIF98a
分帧得到base64,解码得flag
14.鸡你太美
补全篮球副本.gif文件头
得到flag
15.黑客帝国
HxD hex写入文件
rar爆破解压
图片前缀更改为JPG前缀
打开图片得到flag
16.你有没有好好看网课?
解压得到两个压缩包文件
flag3.zip注释提示6位密码,爆破
解压缩得到flag.docx和一段视频文件
doc文档里有两个数字520,711
去视频里寻找对应的帧数
敲击码
20.SXMgdGhpcyBiYXNlPw==
base64隐写,具体看:https://www.tr0y.wang/2017/06/14/Base64steg/index.html
加密脚本:
# -*- coding: cp936 -*-import base64flag = 'Tr0y{Base64isF4n}' #flagbin_str = ''.join([bin(ord(c)).replace('0b', '').zfill(8) for c in flag])base64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'with open('0.txt', 'rb') as f0, open('1.txt', 'wb') as f1: #'0.txt'是明文, '1.txt'用于存放隐写后的 base64for line in f0.readlines():rowstr = base64.b64encode(line.replace('\n', ''))equalnum = rowstr.count('=')if equalnum and len(bin_str):offset = int('0b'+bin_str[:equalnum * 2], 2)char = rowstr[len(rowstr) - equalnum - 1]rowstr = rowstr.replace(char, base64chars[base64chars.index(char) + offset])bin_str = bin_str[equalnum*2:]f1.write(rowstr + '\n')
解密脚本:
# -*- coding: cp936 -*-b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'with open('1.txt', 'rb') as f:bin_str = ''for line in f.readlines():stegb64 = ''.join(line.split())rowb64 = ''.join(stegb64.decode('base64').encode('base64').split())offset = abs(b64chars.index(stegb64.replace('=','')[-1])-b64chars.index(rowb64.replace('=','')[-1]))equalnum = stegb64.count('=') #no equalnum no offsetif equalnum:bin_str += bin(offset)[2:].zfill(equalnum * 2)print ''.join([chr(int(bin_str[i:i + 8], 2)) for i in xrange(0, len(bin_str), 8)]) #8 位一组
17.
