CTF论剑场MISC篇

签到

emmm,签到。

Snake

一开始以为这题改一改user.xml就行了,然后才发现自己太天真了。
直接解压jar包,审计源码。
在Game.class文件中发现flag输出部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
if (this.score >= 500 && this.isshow) {
String flag = "eobdxpmbhf\\jpgYaiibYagkc{";
int key = this.snake.len - this.score;
String xx = "";

int i;
char c;
for(i = 0; i < flag.length() / 2; ++i) {
c = flag.charAt(i);
c = (char)(c ^ key);
xx = xx + c;
}

for(i = flag.length() / 2 + 1; i < flag.length(); ++i) {
c = flag.charAt(i);
c = (char)(c ^ key * 2);
xx = xx + c;
}

JOptionPane.showInputDialog((Component)null, "This is your flag CALCULATE BY YOUR SCORE:\n", "Congratulations", -1, (Icon)null, (Object[])null, xx);
this.isshow = false;
}

一个解密输出flag的过程,我们复现一下就行了。需要改动的代码不多,一个是直接令key=3(因为len永远比score大3),还有一个就是输出。
上payload

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

public class main{
public static void main(String[] args) {
String flag = "eobdxpmbhf\\jpgYaiibYagkc{";
int key = 3;
String xx = "";

int i;
char c;
for(i = 0; i < flag.length() / 2; ++i) {
c = flag.charAt(i);
c = (char)(c ^ key);
xx = xx + c;
}

for(i = flag.length() / 2 + 1; i < flag.length(); ++i) {
c = flag.charAt(i);
c = (char)(c ^ key * 2);
xx = xx + c;
}
System.out.println(xx);
// JOptionPane.showInputDialog((Component)null, "This is your flag CALCULATE BY YOUR SCORE:\n", "Congratulations", -1, (Icon)null, (Object[])null, xx);
}
}

头像

查看二进制源码,其中有一个flag,将其base64解密为ilovethegirl,然后根据题目要求,将其md5加密得flag。

被截获的电报

用au打开发现音频文件是莫尔斯电码,直接把密文放到解密网站解密就行了。

esaypdf

从来没有做过关于pdf的题目,百度了一下,一种方式是通过weStego自动解密,完蛋,没用。另一种是一篇专利论文,通过pdf最后的偏移量来隐写数据,(我太难了)。
所以我猜想pdf里的照片存在隐写,想提取它(误操作),结果在移动图片时,发现图片下面就是flag!!!
emmm,真easy。

损坏的图片

查看图片,发现文件已损坏,结合题目猜测是缺少文件头,用010editor打开,在末尾发现倒置的png,即GNP‰,猜(肯)测(定)文件被倒写。
写个脚本逆回来。

1
2
3
4
5
6
7
8
9
10
11
12
infile = open('1.png', 'rb')
outfile = open('2.png', 'wb')
b = []
i = 0
while True:
t = infile.read(1)
b.append(t)
if not t:
break
b = b[::-1]
for j in b:
outfile.write(j)

输出图片是个二维码,扫描后得flag。

0和1的故事

emmm,这题营养不高。
打开三层压缩包,发现里面有一个txt文件,文件提示flag is not here,有点此地无银三百两的感觉,用010editor打开,发现可视文本后面有由0x09,0x20组成的字符串,该字符串在010中显示为. 组成的字符串,在txt中是不可见的。
由题目提示,将0x20换为0,0x09换为1,由此构成了一个新的数,将其转为十六进制就是flag了。
到这里就有点懵,咋就是答案了,emmm,出题人设计不够巧妙吧。

怀疑人生

首先分析ctf1.zip,用Ziperello字典破解得到密码password,解压压缩包,得到base64加密字符串,解密后再将其url解码得flag{hacker
然后分析ctf2.jpg,用binwalk分析得到有zip隐写,使用foremost分离。得到一个txt文件,文件被okk!加密,逆向解密得到3oD54e字符串,再用base58解码得misc
最后分析ctf3.jpg,一开始还在想怎么切割这个二维码,能让手机识别,结果这个网站直接能识别,得到flag最后一部分12580}
拼凑出来得flag

向日葵

感觉hint有点少。
首先binwalk分析照片,发现有rar压缩隐写,不懂为什么foremost提取不了,直接硬改。
得到txt文件,到这就不大会了,百度了一下wp。
解密方式是波利比奥斯方阵密码的魔改形式
密码表如下

1 2 3 4 5
1 a b c d e
2 f g h i j
3 k l m n o
4 p q r s t
5 u v w x y/z

对照密码表解密得juijoldugjtfbtz
然后就是让人意想不到的操作,凯撒密码,遍历一遍,发现把所有字母向前挪一个,得flag

进制转换

盲猜四进制,ASCII码对照一下出flag

txt500

直接在文件中搜索key关键词就行了,由于是多文件,所以要通过Linux或者windows下UE搜索。

##