1. 程式人生 > 其它 >BUUCTF 安洵杯2019吹著貝斯掃二維碼

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}