bugku昨天才更新的这道题,先将文件下载下来并改后缀png,
通常做图片隐写的题,大概都是先右键查看属性,看下有没有一些特殊的信息,没有就放binwalk看下有没有隐藏什么文件,又或者直接stegsolve分析一波,这题一开始我都试了一遍,无果。但是总不能就这样放弃吧,应该还是漏了点东西。然后折腾了快一个小时,好像有点发现,
在RGB里都发现了这奇怪的一段,然后就试着分析一波,
打算生成一个新的图片,不过要改下文件头
打开winhex将前面的FFFE移除,
保存之后出现惊喜,看到半张二维码的图片,接下来就可以考虑改一下图片的高度
这图是280*140的,那就改成280*280的试试,用winhex将高度改为01 18
得出一张完整的二维码
这二维码看着不大对劲,用画图反色(ctrl+shift+i),得出正确的二维码
扫一下,发现有个百度网盘的地址。。。
下载下来是一个压缩包,解压。发现解压出错
更气人的是。。。
真TM。。。无语
后来特意去查了下ctf隐写的各种信息,了解到还有一种ntfs文件流的东西
反正看起来各种高大上,我呢。。肯定就看不懂。。。
只能屁颠屁颠地去找了下某大佬,在被他一顿无情嘲讽之后,他告诉我这是今年安恒杯的赛题,好像还有writeup。。
。。。。。。。。
。。。。。。。。
行吧。。百度搜了下,发现另一位老铁写的writeup
https://www.jianshu.com/p/abc44c54857a
接下来。。就按照大佬的做法。。用NtfsStreamsEditor查看数据流,然后导出,
PS:flag.rar这个压缩文件一定要用winrar来解压才能找得到数据流。。。
.pyc文件,直接丢到这。。https://tool.lu/pyc/
下载之后写解密的脚本。。。
def decode():
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']
ciphertext.reverse()
flag = ''
for i in range(len(ciphertext)):
if i % 2 == 0:
s = int(ciphertext[i]) - 10
else:
s = int(ciphertext[i]) + 10
s=chr(i^s)
flag += s
return flag
def main():
flag = decode()
print(flag)
if __name__ == '__main__':
main()
最后得出 flag{Y@e_Cl3veR_C1Ever!}