只做了misc的菜鸡,来写写misc部分的writeup,狸神的FM到最后也看不懂,太难了呜呜呜。
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()
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}
手动拼图,一开始拼了一个小时只拼了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}
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}