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