题目
提示:
菜狗收到了图后很开心,玩起了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}