BUUCTF 安洵杯2019吹著貝斯掃二維碼
吹著貝斯掃二維碼
1.題目概述
2.解題過程
開啟flag.zip看看
是個加密的zip,在註釋裡有一串貌似是base32的編碼,可能是密碼
去解解看
不過好像解不出來,那先放一放,回去看看那些不明檔案,
010開啟一個看看
頭是jpg,尾巴多了一點東西
改字尾
那就改改字尾看看能不能開啟
可以順利開啟,很明顯這是一張二維碼的一小部分,可以猜想,把全部的檔案字尾都改成jpg,然後再把他們拼起來,不就是一張完整的二維碼嘛,說幹就幹,不過也要藉助一下指令碼,python真是個好東西
import os path = 'D://CTF//attachment//1' #檔案具體路徑,這個1是那堆檔案所在的資料夾,不成功時可以改個路徑 for i in os.listdir('D://CTF//attachment//1'): #路徑最好用絕對路徑,不會出錯 #if i == '修改後綴.py': # continue #else: oldname = os.path.join(path,i) newname = os.path.join(path,i+'.jpg') os.rename(oldname,newname)
執行完後,該怎麼把這36張圖片拼到一起呢?這是個問題(你也不知道順序)
確認順序
其實,在之前的圖010看的時候,在檔案尾後面還有一個數字,
猜測這就是順序,可以驗證一下,
找一個3個角的特殊位置的圖片,猜測數字可能是1,6,或31(根據圖片數量確定位置)
不放心可以再看看另外兩個角
這下可以百分百確定了,這個數字就是拼圖順序
命名檔案
可以利用python指令碼根據這個順序命名檔案
import os from PIL import Image #目錄路徑 dir_name = r"./" #獲取目錄下檔名列表 dir_list = os.listdir('./') #print(dir_list) #從列表中依次讀取檔案 for file in dir_list: if '.jpg' in file: f=open(file ,'rb') n1 = str(f.read()) n2 = n1[-3:] #經過測試發現這裡要讀取最後3個位元組,因為最後還有一個多餘的位元組,不知道是不是轉字串的原因導致在末尾多了一個字元 #print(file) #輸出檔案內容 #print(n2) f.close() #先關閉檔案才能重新命名,否則會報`檔案被佔用`錯誤 os.rename(file,n2+'.jpg') #重新命名檔案
這些90多的,其實是1-9,程式碼寫的不夠好,出了點問題,改一下吧
利用ps拼圖
拼圖步驟如下:
1.新建,調整高度和寬度,我調整為24X24
2.檔案->置入嵌入物件,選擇圖片
3.操作
注意有些地方可能會有一點點重合,
嘿,拼的還不錯
掃一下
確認解碼順序
解碼
哦,這個應該就是那串編碼的解碼順序了!難怪解不出來
base32→16進位制→13→85→85→64→85(根據那串編碼的格式判斷順序)
這個13不是base家族的,查了一下,是rot13編碼
GNATOMJVIQZUKNJXGRCTGNRTGI3EMNZTGNBTKRJWGI2UIMRRGNBDEQZWGI3DKMSFGNCDMRJTII3TMNBQGM4TERRTGEZTOMRXGQYDGOBWGI2DCNBY
base32解碼:3A715D3E574E36326F733C5E625D213B2C62652E3D6E3B7640392F3137274038624148
base16解碼::q]>WN62os<^b]!;,be.=n;v@9/17’@8bAH
rot13解碼::d]>JA62bf<^o]!;,or.=a;i@9/17’@8oNU
base85解碼:PCtvdWU4VFJnQUByYy4mK1lraTA=
base64解碼:<+oue8TRgA@rc.&+Yki0
base85解碼:ThisIsSecret!233
解壓密碼就是ThisIsSecret!233
3.flag
flag{Qr_Is_MeAn1nGfuL}