CTFshow DJBCTF MISC(大吉杯) WP

只做了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}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章