下载的得到一个图片
首先右键查看属性、用winhex打开没发现隐藏的信息,然后用StegSlove打开,在最低位通道发现,很可能是LSB隐写
选项如下时,发现隐写了一个png文件
导出之后发现文件头多了一些东西,删去后发现是半个二维码
分辨率是280 * 140,所以改成280 * 280,png图片的宽高修改还是比较方便的,把右边的数据改成和左边一致
发现这个二维码的颜色不对劲,把黑白反色(借助StegSlove)后扫码得到一个网盘地址:https://pan.baidu.com/s/1pLT2J4f
,下载之后得到flag.rar,里面有一个flag.txt,打开即被调戏
这个题是比赛原题,当时有一个hint是NTFS
,buuoj中没有给出
扫描发现flag.txt中隐藏了一个pyc文件,导出,放到pyc在线反编译网站
得到一个加密脚本
#!/usr/bin/env python
# visit http://tool.lu/pyc/ for more information
import base64
def encode():
flag = '*************'
ciphertext = []
for i in range(len(flag)):
s = chr(i ^ ord(flag[i]))
if i % 2 == 0:
s = ord(s) + 10
else:
s = ord(s) - 10
ciphertext.append(str(s))
return ciphertext[::-1]
ciphertext = [
'96',
'65',
'93',
'123',
'91',
'97',
'22',
'93',
'70',
'102',
'94',
'132',
'46',
'112',
'64',
'97',
'88',
'80',
'82',
'137',
'90',
'109',
'99',
'112']
分析一下写个解密脚本就跑出flag了
压缩包是加密的,注释信息处有线索
复制到记事本里,用notepad++打开,猜想是摩斯密码
把tab
换成-
空格
换成.
得到.... . .-.. .-.. ----- ..-. --- .-. ..- --
,在线解密得到压缩包密码HELL0FORUM
压缩包里有一个图片,用Stegsolve打开发现lsb隐写痕迹,Data Extract功能没有结果,结合题目描述和题目名,可以推断是以弱口令为密码的lsb隐写
D:\lsb隐写>python2 lsb.py extract C:\Users\17422\Desktop\女神.png flag.txt 123456
[+] Image size: 500x500 pixels.
[+] Written extracted data to flag.txt.
得到flag
下载附件得到文件夹read、加密的压缩包和一张图片,先看压缩包
给了解压密码的提示,那个算式算出来结果是7,所以提示:FLAG IN 7+NNULLULL,
,开始以为IN后面的就是密码,结果不是,几经测试后发现密码是七个数字+NNULLULL,
的形式,于是掩码爆破
打开得到的decode.txt
给出了解密的规则:
a = dIW
b = sSD
c = adE
d = jVf
e = QW8
f = SA=
g = jBt
h = 5RE
i = tRQ
j = SPA
k = 8DS
l = XiE
m = S8S
n = MkF
o = T9p
p = PS5
q = E/S
r = -sd
s = SQW
t = obW
u = /WS
v = SD9
w = cw=
x = ASD
y = FTa
z = AE7
再结合文件夹给出的大量文本,可以知道考察的是字频隐写
。给出的图片,使用foremost分离出两张看似一模一样的图片,很明显是盲水印,解出信息提示字频隐写在11.txt
(我的py2出了点问题不能演示了)。
再加上文件夹中有一个hint.txt
hint:取前16个字符
所以分析11.txt中最高频
的前十六个字母
,附上脚本
f=open("11.txt","r")
d={
}
s=""
for line in f.readlines():
line=line.lower().replace(" ","")
for i in line:
if 'a'<=i<='z':
d[i]=d.get(i,0)+1
d1=sorted(d.items(), key = lambda kv:(kv[1], kv[0]),reverse=True)
for j in range(16):
print(d1[j][0],end="")
f.close()
得到这十六个字母etaonrhsidluygw
,按照规则替换得到QW8obWdIWT9pMkFSQWtRQjVfXiE/WSFTajBtcw==
,base64解密得到Ao(mgHY?i2ARAkQB5_^!?Y!Sj0ms
,base85解密得到flag{have_a_good_day1}
下载得到一个txt,内容是
a2FuYmJyZ2doamx7emJfX19ffXZ0bGFsbg==
这里用CyberChef,先base64解密一次,然后再栅栏加密一次(key=7)
最后就是凯撒解码,把前面的xman换成flag即可
得到一个流量包,用wireshark
打开,没发现什么
用tshark
命令看一下
tshark -r out.pcap -T fields -e data > 1.txt
打开1.txt,发现大量十六进制数值,且有重复的
写脚本去重,再把每一行的十六进制转字符。
写脚本去除多余字符,剩下的像是base64编码,写脚本
import base64
f = open("3.txt","rb").read()
f1 = open("x","wb")
f1.write(base64.b64decode(f))
得到的是一个zip文件,打开得到一个gif,这里是gif帧数间隔隐写
把20换成0、50换成1,得到011011010100010000110101010111110011000101110100
转为十六进制后再转字符,然后md5加密,最后得到flag{f0f1003afe4ae8ce4aa8e8487a8ab3b6}
给了一些看不太懂的东西,结合题目名,应该是要画出来
cs pu lt 90 fd 500 rt 90 pd fd 100 rt 90 repeat 18[fd 5 rt 10] lt 135 fd 50 lt 135 pu bk 100 pd setcolor pick [ red orange yellow green blue violet ] repeat 18[fd 5 rt 10] rt 90 fd 60 rt 90 bk 30 rt 90 fd 60 pu lt 90 fd 100 pd rt 90 fd 50 bk 50 setcolor pick [ red orange yellow green blue violet ] lt 90 fd 50 rt 90 fd 50 pu fd 50 pd fd 25 bk 50 fd 25 rt 90 fd 50 pu setcolor pick [ red orange yellow green blue violet ] fd 100 rt 90 fd 30 rt 45 pd fd 50 bk 50 rt 90 fd 50 bk 100 fd 50 rt 45 pu fd 50 lt 90 pd fd 50 bk 50 rt 90 setcolor pick [ red orange yellow green blue violet ] fd 50 pu lt 90 fd 100 pd fd 50 rt 90 fd 25 bk 25 lt 90 bk 25 rt 90 fd 25 setcolor pick [ red orange yellow green blue violet ] pu fd 25 lt 90 bk 30 pd rt 90 fd 25 pu fd 25 lt 90 pd fd 50 bk 25 rt 90 fd 25 lt 90 fd 25 bk 50 pu bk 100 lt 90 setcolor pick [ red orange yellow green blue violet ] fd 100 pd rt 90 arc 360 20 pu rt 90 fd 50 pd arc 360 15 pu fd 15 setcolor pick [ red orange yellow green blue violet ] lt 90 pd bk 50 lt 90 fd 25 pu home bk 100 lt 90 fd 100 pd arc 360 20 pu home
后面百度了一波,得知这个是logo语言
,可以参考这个贴子
直接到这个在线网站运行即可
用Stegsolve打开图片,在红色通道
隐写了东西
save bin保存为png图片,给了zip压缩包的密码!@#$%67*()-+
,题目给的是rar,所以还需要找出这个zip
直接foremost,提取出zip,用密码解密,得到的out.txt中由几种数字组成
把这些数字分别转为八位的二进制,发现后面六位都是1,只有前两位有区别,写脚本把所有组的前两位连起来,再转字符。
f = open("out.txt","r")
flag=y=x=""
for line in f.readlines():
x = bin(int(line))[2:].zfill(8)
y += x[:2]
f.close()
for i in range(len(y)//8):
flag += chr(int(y[i*8:(i+1)*8],2))
print(flag)
得到rar的密码 rar-passwd:0ac1fe6b77be5dbe
,得到的新zip很明显是一个doc文件,改后缀为doc
最下面有一些透明字,把颜色改深就可以看到
得到的这些像是base64编码,分别解码得到一串二进制
这里不能这样看,把结果平均分为六行,再把1替换成空格就能看到flag
flag{He1Lo_mi5c~}
拿到三个文件
先看一下wav,文件名提示让看一下文件的尾部,所以用010打开看一下
U2F开头,很明显是AES了,需要秘钥,在这个文件里找了一下没找见
再去看一下那个图片,直接binwalk一把梭,拿到一个图片,内容就是前面需要的秘钥: Tokyo
解得key=CCGandGulu
拿得到的key去解压压缩包,得到一个wav文件,这里是比较坑的,没找到提示,尝试了一遍发现要用SilentEye
流量包,wireshark打开分析,追踪TCP流时发现线索
直接binwalk分离出压缩包,密码是:supercomplexpassword
,解压拿到flag
下载的jpg打不开,拖进winhex里看一下,发现里面都是明文
所以用notepad打开,ctrl+f搜索一下flag、key等关键字
然后找到了utflag{fil3_ext3nsi0ns_4r3nt_r34l}
曹操的私生子曹小明因为爸爸活着的时候得罪太多人,怕死后被抄家,所以把财富保存在一个谁也不知道的地方。曹小明比较喜欢屈原,于是把地点藏在他的诗中。三千年后,小明破译了这个密码,然而却因为担心世界因此掀起战争又亲手封印了这个财富并仿造当年曹小明设下四个可疑文件,找到小明喜欢的DBAPP标记,重现战国辉煌。(答案为正确值(不包括数字之间的空格)的小写32位md5值) 注意:得到的 flag 请包上 flag{} 提交
鬼脑洞题…
下载得到四个doc文件,都打不开,winhex看一下,注意到这里
新建一个doc文档,对比一下
所以把红框位置对应的十六进制全部改成F
,就能正常打开了
乍一看,四个文件的内容好像是一样的
但是仔细对比会发现行距不一样
把每一行右键→段落,查看行距,把1.5倍行距换成1、单倍行距换成0
ABCD对应的分别是
A 100111100010
B 100100100001
C 100100100001
D 010100100001
挨个测试,最后正确的是C对应的二进制值转md5
flag{d473ee3def34bd022f8e5233036b3345}