Misc_XCTF_WriteUp | stegano

发布时间 2023-11-27 14:43:35作者: Guanz

题目

提示
菜狗收到了图后很开心,玩起了pdf 提交格式为flag{xxx},解密字符需小写

题目

分析

首先查看文件属性,没有发现异常。

查看十六进制文件,文件头正常。

在文件中搜索 “flag” 文本,找到一串 base64 编码:

解码后发现不是 flag:

同时在这个假 flag 前发现 “Producer(find mr.morse text)”,猜测最后的 flag 需要进行一次 morse 解密。

观察到整个 pdf 的文本内容是像是一种替换密码,尝试复制所有文本进行爆破:

看来方向不对。

但在复制文本的时候发现 pdf 中有隐藏信息,用一般的 pdf 阅读器复制文本发现无法复制中间的 “NoFlagHere!” 水印:

但用浏览器打开复制就会有:

于是用浏览器打开文件,全选复制后粘贴在记事本中得到:

发现一串培根密码 “BABA BBB BA BBA ABA AB B AAB ABAA AB B AA BBB BA AAA BBAABB AABA ABAA AB BBA BBBAAA ABBBB BA AAAB ABBBB AAAAA ABBBB BAAA ABAA AAABB BB AAABB AAAAA AAAAA AAAAB BBA AAABB”

解密:

好像也不对。

联想到之前提示的 morse,尝试将培根密码的形式更换为 morse 密码,对两种可能分别进行替换:

char bacon1[] = "BABA BBB BA BBA ABA AB B AAB ABAA AB B AA BBB BA AAA BBAABB AABA ABAA AB \
BBA BBBAAA ABBBB BA AAAB ABBBB AAAAA ABBBB BAAA ABAA AAABB BB AAABB AAAAA AAAAA AAAAB BBA AAABB";
char bacon2[] = "BABA BBB BA BBA ABA AB B AAB ABAA AB B AA BBB BA AAA BBAABB AABA ABAA AB \
BBA BBBAAA ABBBB BA AAAB ABBBB AAAAA ABBBB BAAA ABAA AAABB BB AAABB AAAAA AAAAA AAAAB BBA AAABB";

for (int i = 0; i < strlen(bacon1); ++i) {
	if (bacon1[i] == 'B') {
		bacon1[i] = '.';
		bacon2[i] = '-';
	}
	if (bacon1[i] == 'A') {
		bacon2[i] = '.';
		bacon1[i] = '-';
	}
}

printf("%s\n%s", bacon1, bacon2);

得到:
.-.- ... .- ..- -.- -. . --. -.-- -. . -- ... .- --- ..--.. --.- -.-- -. ..- ...--- -.... .- ---. -.... ----- -.... .--- -.-- ---.. .. ---.. ----- ----- ----. ..- ---..
-.-. --- -. --. .-. .- - ..- .-.. .- - .. --- -. ... --..-- ..-. .-.. .- --. ---... .---- -. ...- .---- ..... .---- -... .-.. ...-- -- ...-- ..... ..... ....- --. ...--

在线解密,分别得到:
%u5SAUKNEGYNEMSAO?QYNU%u76A%ue606JY8I8009U8
CONGRATULATIONS,FLAG:1NV151BL3M3554G3

第二条中包含 flag,整理提交即可。

Flag

flag{1nv151bl3m3554g3}

参考

在线摩斯密码翻译器