只做了misc的菜雞,來寫寫misc部分的writeup,狸神的FM到最後也看不懂,太難了嗚嗚嗚。
博客原文:http://www.7yue.top/djbctf/
十八般兵器
hint1:JPHS
hint2:用Notepad++打開試試?
hint3:前十種兵器對應10進制,後八種對應8進制
根據hint1,先利用JPHS將18張圖片均解密一下,密碼爲空,每張圖片解密後的數據末尾都有一段數字,這幅圖是刪掉了部分空格,實際需要往下拉。
根據題目的武器順序,前十張圖片的數字組合起來十進制轉十六進制。後八張圖片的數字組合起來八進制轉十六進制,asc轉碼一下得到flag
flag{
CTFshow_10_bA_Ban_b1ng_Q1}
請問大吉杯的簽到是在這裏籤嗎
開局一張二維碼,一直分離能分離出四張套娃的二維碼,第二章二維碼實際已經提示了到這裏就要停下來了。(八神真好,處處都有提示)
第二張二維碼用stegsolve查看最低通道,均能得到新的一張二維碼圖片,但沒法掃碼。
第二張圖片原圖:
最低位通道圖:
兩張圖異或一下,即可發現酷似豬圈密碼的字符:
解密後即可得到flag:
flag{
dajiadoaidjb}
牛年大吉
hint1:不要格式化喲,看看引導扇區是不是丟東西了
hint2:壓縮包密碼在圖片文件頭裏
下載附件得到一個vhd文件,用winhex裝載
能看到有一個7z和一個png圖片。7z需要密鑰,密鑰即爲png文件頭89504E47,猜,就硬猜。一開始hint2放錯位置了,導致一直做不出來,後來有了hint2之後並不算難題。
解開7z壓縮包即可得到flag:
flag{
CTFshow_The_Year_of_the_Ox}
童話鎮
hint1:離別
hint2:思念
hint3:愛
hint4:印象
開局一個mp3文件+四個感覺沒用任何作用的提示。
把mp3文件binwalk一下得到一個加密的zip文件,爆破密碼得 67373
得到兩個txt文件,看起來很像是機器學習之類的。
學習樣本,答案只有兩種,0或1:
需要解密的密文:
利用knn算法來解,腳本如下:
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
from ast import literal_eval
from PIL import Image
x_train = []
y_train = []
x_test = []
f1 = open("t.txt","r")
f2 = open("flag.txt","r")
while 1:
s = f1.readline()
if not s:
break
s = s.strip('\n')
p1 = literal_eval(s.split("\t")[1])
p2 = literal_eval(s.split("\t")[0])
x_train.append(p1)
x_test.append(p2)
#print(x_train)
#print(x_test)
while 1:
s = f2.readline()
if not s:
break
s = s.strip('\n')
s = literal_eval(s)
y_train.append(s)
#print(y_train)
x_train = np.array(x_train)
y_train = np.array(y_train)
x_test = np.array(x_test)
clf = KNeighborsClassifier(n_neighbors = 1)
clf.fit(x_train, x_test)
y_test = clf.predict(y_train)
f3 = open("3.txt","w")
for i in y_test:
f3.write(str(y_test[i]))
f3.close()
得到答案:
最後要不是有師傅們的提示,我怎麼也不會想到78789一個質數,能用來當做寬高畫圖,嗚嗚嗚。直接放腳本,看腳本就明白惹:
from PIL import Image
fp = open("3.txt","r").read()
pic = Image.new("L", (len(fp)//79, 79))
i = 0
for y in range(79):
for x in range(len(fp)//79):
if fp[i] == '0':
pic.putpixel([x,y], 255)
else:
pic.putpixel([x,y], 0)
i += 1
pic.show()
跑一下即可得到flag
色圖生成器
hint1:顏色很重要,但github更重要
hint2:第一步圖片很重要,txt不重要
hint3:看一看馬賽克部分的RGB值,有沒有想到什麼呢
下載附件得到一張圖片,和一個txt文件,圖片中間有一大塊顏色各異的色塊,根據hint3也能想到提取像素。每個色塊的像素都是RGB中隨機兩個通道有同樣的數據,另外一個爲0
腳本如下:
from PIL import Image
pic = Image.open('setu.png').convert('RGB')
fp = open("1.txt","w")
for y in range(0,17):
for x in range(0,181):
piv = pic.getpixel((50+5*x, 80+20*y))
if piv[0] != 0:
fp.write(str(piv[0]))
fp.write(" ")
else:
fp.write(str(piv[1]))
fp.write(" ")
fp.close()
得到一串十進制字符串,轉碼即可得到一個rar文件。
rar文件裏有一張名爲Cloakify.png的圖片,備註裏又有一串顏色數據。
將圖片binwalk一下,得到一個加密的壓縮包文件。
根據hint1,github搜索Cloakify,得到解密工具,字典爲題目附件的colors.txt,密文爲壓縮包註釋。
解密得到壓縮包密鑰:D3arD4La0P1e45eD4iDa1Wo
解開得到一個pyc文件,在線反編譯一下,得到:
from PIL import Image
import re, hashlib, random
flag = 'flag{jiu_bu_gao_su_ni}'
if re.fullmatch('^flag{[A-Z][0-9a-zA-Z]{4}}$', flag):
m = hashlib.md5()
m.update(flag.encode('ascii'))
m = m.hexdigest()
col = []
for i in range(0, 24, 2):
tmp = int(m[i:i + 2], 16)
tmp += random.randint(-5, 5)
col += [tmp]
img = Image.new('RGB', (1024, 512))
for i in range(4):
timg = Image.new('RGB', (256, 512), tuple(col[i * 3:i * 3 + 3]))
img.paste(timg, (i * 256, 0))
img.save('C:/Users/Administrator/Desktop/setu.png')
這是對最初題目附件的setu.png的背景進行加密。
直接寫個解密腳本一把梭:
import re
import hashlib
list = ['139', '102', '162', '24', '85', '57', '160', '37', '239', '200', '154', '30']
for a in range(48,123):
for b in range(48,123):
for c in range(48,123):
for d in range(48,123):
flag = 'flag{D' + chr(a) + chr(b) + chr(c) + chr(d) + '}'
if re.fullmatch('^flag{[A-Z][0-9a-zA-Z]{4}}$', flag):
m = hashlib.md5()
m.update(flag.encode('ascii'))
m = m.hexdigest()
j = 0
for i in range(0,24,2):
p = int(list[j])
if int(m[i:i+2], 16) - p > -5 and int(m[i:i+2], 16) - p < 5:
j = j + 1
continue
elif i == 22:
print(flag)
break
else:
break
很快就能跑出來,跑出來即可得到flag:
flag{
D4n1U}
拼圖v2.0
手動拼圖,一開始拼了一個小時只拼了90%,自動退出了很難受。第二次拼了50分鐘得到flag:
碑寺六十四卦
hint1:爲什麼碑文上空白的地方,拓片上卻是黑黑一片呢?
hint2:如果說每個方塊對應一個字符,可是替換表在哪裏?
下載附件得到一張圖,注:以下圖都不是原圖,原圖請到官網自取
反色後得到:
反色後用stegsolve解一下最低位通道得到另一張圖片:
對照原圖的數據,一個一個進行對比,得到每個圖案的數據爲:
5,37,26,32,8,44,11,30,53,27,39,34,51,3,52,46,18,33,46,40,7,56,40
根據題目的64卦,一共有64個數據,聯想到base64也是有64個數據,解密一下即可得到flag,腳本如下:
a = [5,37,26,32,8,44,11,30,53,27,39,34,51,3,52,46,18,33,46,40,7,56,40]
b = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
flag = ''
for i in a:
flag += b[i]
print(flag)
解得:
FlagIsLe1bnizD0uShuoH4o
最終flag爲:
flag{
Le1bnizD0uShuoH4o}
AA86
hint1:請仔細閱讀題目描述(5毛一條,去掉括號)
根據提示可得,關鍵是16位操作系統。其實只要安裝一個16位操作系統這題直接就能跑出來,難點變成了如何安裝16位操作系統。
谷歌 jjencode AA86 可得:
.com後綴名文件可直接在16位操作系統執行,將txt裏的數據保存,後綴名改爲.com,傳入MS-DOS虛擬機內,直接運行得到flag:
64位系統只能運行64和32位的程序,理論上32位系統也能運行32位和16位的程序,一開始我試着裝32位xp系統,但是裝的有點慢還沒試過。不知道有沒有人是在32位系統下跑出來的flag,之後就看大佬們自己發揮了。
最終flag爲:
flag{
https://utf-8.jp/public/sas/index.html}