解題思路
在附件里面的文件長這樣:
首先點開hint.txt
發現,直接告訴了解壓包密碼是前一個解壓包的名字。
(這句話用南昌話說更帶味)
解壓之后,發現還是有壓縮包,於是這可能就是雜項固定的套路之一——循環解壓
但是在解壓之前,要思考,題目的名字是什么意思?
百度一下,發現,extractall是python解壓庫里面的一個函數名:
extractall是一個函數,能夠解壓文件,傳入路徑,文件名和密碼就能使用
但是遇到的錯誤是,密碼必須經過編碼,也就是后面需要加上一個encode()
因為python3不自動支持ascii碼了,extractall要求輸入的是字節類型
所以使用腳本:
import zipfile
name = '[REFTQ.zip'
for i in range(100):
f = zipfile.ZipFile(name , 'r')
f.extractall(pwd=name[:-4].encode())
name = f.filelist[0].filename
print(name[:-4],end="")
f.close()
可以明顯,看出,在解壓名后面有個==,很可能是base64編碼
嘗試進行解碼:
可以解碼一部分,那肯定有一些是多余的,我們要去掉
暫且先放在這
解壓后可以得到flag.txt文件,以及一張圖片
打開flag.txt,可知答案不在這里
打開圖片extractall.png
下面一半很顯然被截取
使用winhex對圖片的高進行加長:
在winhex中,從第16位開始,每4位就是圖片的寬和高的值
直接把1改成2,如圖
得到內容:
它是哪個?識圖一下:
斐波那契。
斐波那契數列是1、1、2、3、5、8、13、21,剛剛好到21
聯想到之前的base64解碼,我們的第一,第二,和第21的碼都可以解出來,唯獨中間的碼不能解,猜想,可能需要按照斐波那契數列提取編碼
按照斐波那契提取出來后,進行解碼,得到了flag
總結
問題 | 方法 |
---|---|
腳本寫不出來 | 嘗試回歸題目尋找信息,上面使用extractall可能就是需要搜索這個信息的 |
base64解碼遇到亂碼 | 如果是部分解碼成功,那肯定在編碼中需要增加或者刪去什么,部分解碼成功的編碼要多加思考,找到規律 |
png隱寫 | 最一般的是隱寫長寬,然后還有像素、二維碼、lsb、兩圖片合成、binwalk等等 |
這題腦洞比較大吧