十八般兵器

hint1: JPHS
hint2:用notepad++打开试试?
hint3:前十种兵器对应10进制,后八种兵器对应8进制
附件是一个rar,解压密码在里面的描述
解压之后里面是18张兵器的图片
一开始复现的时候芙头芙脑的,按照了文件的顺序去排武器数字,这是第一个坎
在题目描述中有正确的顺序:刀、枪、剑、戟、斧、钺、钩、叉、鞭、锏、锤、戈、镋、棍、槊、棒、矛、耙
使用JPHS对18张图片解密,密文为空,解密后的18个文件分别丢进winhex,尾部都有一串数字,分两组全部写到记事本里,10进制转16进制,8进制转16进制,转换的过程中找了一些垃圾在线转换网站不支持大数,把我搞迷糊了,最后找到了个很好的在线进制转换,能解决js的大数精度问题,丢连接https://tool.lu/hexconvert/
把两组16进制组合起来转换字符串

1
flag{CTFshow_10_bA_Ban_b1ng_Q1}

请问大吉杯的签到是在这里签吗

附件1.png,一个二维码,扫了没什么信息,binwalk,得到2.png,扫,得知是岔路。继续binwalk,到了4.png没了,扫,走到了死胡同。回到2.png,stegsolve滤镜,又得到2幅不同的二维码,扫,都是一样的结果,当时没往下想,果断放弃。(其实是被签到题的200多个解和这道题的个位数个解认为它确实很难而劝退)
把这两张二维码保存,使用imagecombine模式 第一个就是XOR就能发现猪圈密码
直接出来了

牛年大吉

hint1:不要格式化哟,看看引导扇区是不是丢东西了
hint2:压缩包密码在图片文件头里
一个vhd文件,使用R-Studio装载,恢复出一个7z和一个png
png的文件头是89504E47直接得flag

童话镇

hint1:离别
hint2:思念
hint3:爱
hint4:印象
先binwalk出一个zip,爆破得到2个txt,看不懂。看wp,第二个我遇到的机器学习题目,看来做misc的不会点机器学习还做不下去了。
脚本是抄7月师傅的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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()

得到全是1和0的文本,继续抄脚本

1
2
3
4
5
6
7
8
9
10
11
12
from PIL import Image #import必要的库
fp = open("3.txt","r").read() #读取文本
pic = Image.new("L", (len(fp)//79, 79)) #创建一张图片叫做pic,mode是L,L代表8位像素,是黑白的,size属性是len(fp)//79,79,意思是宽度是len(fp)//79,也就是文本的长度整除79的结果,高度是79
i = 0 #定义一个计数的变量i
for y in range(79): #纵坐标从0到79进行循环,也就是从底部开始画起,绘制79单位的内容
for x in range(len(fp)//79):#横坐标从0到len(fp)//79进行循环,也就是从左边开始画起,绘制len(fp)//79单位的内容
if fp[i] == '0':#文本第i个字符如果是0
pic.putpixel([x,y], 255)#那么pic这张图片就调用putpixel这个方法,在[x,y]这个坐标放置一个255颜色的像素,也就是白色
else:#文本第i个字符如果不是0(其实非0即1)
pic.putpixel([x,y], 0)#那么pic这张图片就调用putpixel这个方法,在[x,y]这个坐标放置一个0颜色的像素,也就是黑色
i += 1#对这个字符的安置操作已经完成了,i增大1来准备对下一个字符进行操作。
pic.show()#完成上述循环后,图片已经画好,pic这张图片调用show这个方法,也就是显示在显示器上让用户看到。

机器学习可以留后再学,但是画图脚本还是得掌握一下,仔细解释了一下脚本。把python学成文科。只有我这么蠢的人才会这么学习吧。(PS:其中直接偷脚本在kali里跑最后图片show不出来,但是kali里又装好了库,我只能在windows下装库,用的pycharm装库就很难受,这题复现出来问题不大,但是装库的时候可让人抓狂了。)
flag{67373永生_举报狗必须死}