Misc_XCTF_WriteUp | stegano
题目
提示:
菜狗收到了图后很开心,玩起了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}
参考
本文作者:Guanz
本文链接:https://www.cnblogs.com/Guanz/p/17853368.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步