S | Stuck | 题目做到一半思路卡壳 |
---|---|---|
F | Finished | 完成该题 |
1 | First Blood | 获得一血 |
2 | Second Blood | 获得二血 |
3 | Third Blood | 获得三血 |
F | 你是我的眼 |
更改jar文件后缀为zip,解压得到两个class文件,反编译main得到主函数内容。
package defpackage;
import java.util.Base64;
import java.util.Scanner;
/* renamed from: Main reason: default package */
/* loaded from: Main.class */
public class Main {
private static final String PART1 = "U2NF9CSUFOTUF9";
private static final String PART2 = "Xw-";
private static final String PART3 = "Q1RGU2hvd3tURVNUX0";
private static final String PART4 = "JBU0";
public static String customDecode(String input) {
String standardInput = input.replace('-', '+').replace('_', '/');
return new String(Base64.getDecoder().decode(standardInput));
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入FLAG:");
String userInput = scanner.nextLine();
String decodedFlag = customDecode("Q1RGU2hvd3tURVNUX0JBU0U2NF9CSUFOTUF9Xw-");
String cleanInput = userInput.replace("_", "").replace("\u000f", "");
if (checkflag(cleanInput, decodedFlag)) {
System.out.println("flag正确");
} else {
System.out.println("输入错误");
}
scanner.close();
}
private static boolean checkflag(String input, String CTFflag) {
return CTFflag.replace("_", "").replace("\u000f", "").equals(input);
}
}
大致意思是将输入的内容先进行替换后再base64加密与flag进行加密后的字符串进行比对,这里直接将flag的base64字符串解码得到flag
CTFShow{TEST_BASE64_BIANMA}
F | 二维码拼图 |
拆开的图象边缘不是很规整,用ps切分旋转后的效果不是很好。这里直接根据块与块之间的联系手搓二维码
得到flag
ctfshow{fDcfe82e-7f8a-4be5-9695(6d1ca892c990}
F | SignIn |
也是没有什么技术含量,根据提示所给的网站进行多次尝试,得到三段flag
得到flag
ctfshow{Ai_Art_QRc0de_iS_Amz!}
F2 | 她说她想结婚 |
首先分析图片,在原始图片末尾衔接了Oursecrt的加密特征,以及一个压缩包。手动分离出压缩包。
压缩包中加密为伪加密,将flag文件解压出来用010editor打开发现末尾有snow隐写的特征
snow隐写解密,key为图片的中文台词,得到第一段flag
ctfshow{W1sh1ng_every0ne_4
第二段flag需要用到一开始侦察到的Oursecrt,key应该与空文件有关,在check后得知是时间戳,分别列出从0到10文件的时间戳
1314520108
1314520102
1314520122
1314520058
1314520100
1314520116
1314520102
1314520084
1314520104
1314520048
1314520120
发现只有后三位不同,提取出来十进制转字符串得到一串字符
lfz:dtfTh0x
在进行凯撒后得到key的标志,但是key错误。后面check后发现是出题的师傅弄错了,一血师傅则是依靠ctfshow猜出来了key(佩服)
mode1 #0: lfz:dtfTh0x
mode1 #1: key:cseSg0w
得到key
key:ctfSh0w
Oursecrt解密后得到一串base64,多次解密后得到后半段flag
_happy_time_pl4ying}
这里确实想帮出题的师傅说两句。这道题难度不低,但是只有100分(不理解)。并且出题的师傅的描述以及提示,主办方并没有正确的传递,
题目描述:
林佑生在雪地里面找到了key并骂了出来,最终他感慨:时间过得好快,戳戳戳的一下就没了,快的来不及眨。就像天空中绽放的烟花,那美好的一瞬间,再看已消散不见。
所以才导致快结束了才拿完血,不然我也不可能能够拿到血,这样的情况不完全是出题师傅的错。
S | 符文之语 |
官方writeip:
任何一个Aztc码,除了中心的牛眼(或“金字塔)形图案外,在其四个顶点处还会有四个方向标记(即蓝色交叉线标识区域)。对于一个方向正确的Aztc码,这四个标记从左上开始顺时针方向依次是三个点、两个点、一个点、没有点。
搜索Aztec符文,能搜到一种东西叫Aztec Rune:
本质上是一种仅使用一层数据区的紧凑型Aztec码,与标准Aztc码兼容但编码的数据限定于8个比特,换言之就是每个符文仅编码一个字节,再换言之就是符文一共只有256种。
只要把256种符文找出来,再把周围一圈数据区的黑白色打个表,再把视频每一帧拆出来,周围一圈数据区读取一下,与表格对照,就能把每帧还原成一个字节。