XGCTF西瓜杯 Writeup
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切分旋转后的效果不是很好。这里直接根据块与块之间的联系手搓二维码

QRcode

得到flag

flag

ctfshow{fDcfe82e-7f8a-4be5-9695(6d1ca892c990}

F | SignIn |

也是没有什么技术含量,根据提示所给的网站进行多次尝试,得到三段flag

c4621635-0104-4e59-8259-9f9f5c0d8743

得到flag

ctfshow{Ai_Art_QRc0de_iS_Amz!}

F2 | 她说她想结婚 |

首先分析图片,在原始图片末尾衔接了Oursecrt的加密特征,以及一个压缩包。手动分离出压缩包。

image-20240707183540893

压缩包中加密为伪加密,将flag文件解压出来用010editor打开发现末尾有snow隐写的特征

image-20240707183722177

snow隐写解密,key为图片的中文台词,得到第一段flag

flag1

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码,这四个标记从左上开始顺时针方向依次是三个点、两个点、一个点、没有点。

image-20240707220510029

搜索Aztec符文,能搜到一种东西叫Aztec Rune:

image-20240707220557089

本质上是一种仅使用一层数据区的紧凑型Aztec码,与标准Aztc码兼容但编码的数据限定于8个比特,换言之就是每个符文仅编码一个字节,再换言之就是符文一共只有256种。

只要把256种符文找出来,再把周围一圈数据区的黑白色打个表,再把视频每一帧拆出来,周围一圈数据区读取一下,与表格对照,就能把每帧还原成一个字节。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇