前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[V&N2020 公开赛] Final Game

[V&N2020 公开赛] Final Game

作者头像
回天
发布2023-04-25 15:16:05
5300
发布2023-04-25 15:16:05
举报
文章被收录于专栏:Ga1@xy's W0r1dGa1@xy's W0r1d

很早就想做的一道题,也是当时V&N公开赛的misc压轴题,整体来看题目非常复杂,套了一层又一层,但涉及考点很多,而且有些考点很新颖很少见,值得一做!

题目考点

  • Malebolge language
  • vmdk中查找题目附件
  • NTFS隐写
  • ELF文件修复
  • 键盘密码
  • base64隐写
  • 需要密钥的LSB隐写
  • osu!中观察flag

题目详解

下载附件解压,得到一个vmdk镜像文件和一个加密的压缩包,下面我们分部来进行解析

Something useful.zip

首先看加密的压缩包,WinRAR打开可以看到备注

代码语言:javascript
复制
Stupid mortal, you must enter the eighth circle of Hell to get the Tip of god。'=B;:?8\<;:921Uv.3,1*No'&J*)iF~%$#zy?w|{zsr8pun4rTji/PONMLKJIHGFEDCBA@?>=<;:987SRQ3IHMFKDCBf)('&%$#"!~}|{zyxwvutsrqpon,+*)i'&%${zy?}|{t:xwp6Wsrkj0QPONMLKJIHGFEDCBA@VUTYXWVUTSRKoON0LKDCgfS

发现关键字the eighth circle of Hell,Google这个可以发现是和《神曲》有关,而且搜索到的第一条就是

image-20200520194117656
image-20200520194117656

而且这个Malebolge和压缩包中的txt文件名也相同,再搜索Malebolge可以发现有和codelanguage相关的词条,搜索查看发现竟然是一种编程语言

image-20200520194403545
image-20200520194403545

而且还有在线的编译网站:http://malbolge.doleczek.pl/,将压缩包备注中的看似乱码的字符串复制进去,而且要删去每行最后的换行,将其变为一行后再Run program,即可得到压缩包密码:%&^&#@()(*:";'/,,

解压后查看压缩包中的txt,得到hint,内容如下

代码语言:javascript
复制
神说:要有ELF!!!
神说:要有WORD!!!
神说:要有NTFS!!!
神说:要有PDF!!!
神说:要有OSZ!!!

地狱 -- 炼狱 -- 天堂

Windows7_by_Lamber.vmdk

用7z查看这个vmdk文件,打开后发现几乎就是整个C盘,而我们要做的就是找到出题人藏在其中的所有题目附件,一个可以相对减少工作量的方法就是按照修改时间排序,从最新的开始找(当然也得一个一个文件夹的翻),最终在以下目录找到一些名字奇奇怪怪的文件

代码语言:javascript
复制
Windows7_by_Lamber.vmdk\Users\lenovo\Documents\Purgatory.zip
Windows7_by_Lamber.vmdk\Users\lenovo\Desktop\Door.png
Windows7_by_Lamber.vmdk\Users\lenovo\Music\paradise.zip
Windows7_by_Lamber.vmdk\Users\lenovo\Downloads\proverbs.pdf

查了一下这些名字都和题目背景有些关系,而且时间也都集中在6号7号这两天,再看这些附件都符合txt中提到的这些文件格式,可以判断这些都是题目的附件,直接从7z中将这些文件拽出来

Door.png

结合txt中hint的NTFS,直接在题目附件所在文件夹打开cmd,执行dir /r,可以看到在Door.png这个文件后隐藏有exe文件,用工具ntfsstreameditor将其提取出来,得到Purgatory.exe这个文件

Purgatory.exe

用cmd执行该文件,得到了一句话

代码语言:javascript
复制
请将该文件放入炼狱中执行(能进入天堂的是Mr.png,Mrs.jpg只能下地狱)

根据提示放在炼狱中执行,推测是需要和什么文件放在一起(最开始尝试了新建文件夹起名为炼狱,结果失败了),结合neverno师傅给我的提示,最终在以下目录又找到了一个名字奇怪的文件

代码语言:javascript
复制
Windows7_by_Lamber.vmdk\Program Files (x86)\Linux\Purgatorio

将其提取出来,我查了Purgatorio这个单词的意思,正是意大利语的炼狱,将这个文件和Purgatory.exe放在同一目录下,再次运行程序,得到了另一个hint

代码语言:javascript
复制
智慧之神evoA说,你需要修复ELF

Purgatorio

010editor查看该文件,看文件头即可知道为ELF文件,但是在调用readelf来分析这个文件时,却报错

代码语言:javascript
复制
readelf:错误:不是 ELF 文件 - 它开头的 magic 字节错误

查看ELF文件的结构发现,开头四个字节应该为7f 45 4c 46,而该文件的文件头错误,将20改为7f后,再次用readelf查看,可以发现这个文件的文件类型为NONE

image-20200521133847706
image-20200521133847706

用010editor运行ELF文件模板也可以看到

image-20200521134031032
image-20200521134031032

参考了网上有关ELF文件格式详解:

可以知道ELF文件格式主要有三种:

  • 可重定向文件(Relocatable file)
  • 可执行文件(Executable file)
  • 共享目标文件(Shared object file)

初步推测其为可执行文件(Executable file),在010editor中修改类型为ET_EXEC后保存,尝试运行文件

image-20200521134819756
image-20200521134819756

在多次尝试后发现可以另外输入字符,并且可以得到其他内容

image-20200521135007075
image-20200521135007075

根据在Purgatory.exe中得到的提示:

代码语言:javascript
复制
智慧之神evoA说,你需要修复ELF

尝试输入evoA,得到了新的内容

image-20200521135304471
image-20200521135304471

在看了小白师傅的wp后发现刚刚得到的字符串30e308e8e7122579b8ea2fae774d1999解md5也可以得到evoA,在刚刚尝试的时候我还发现,当你输入由evoa这四个字母组成的非evoA的字符串,还可以得到一个假的flag(算是彩蛋了吧2333)

image-20200521135734316
image-20200521135734316

proverbs.pdf

刚刚通过ELF得到的字符串:pdfkG@0zl_3ptmVPfa7LHuB8rs#cRdi$,为pdf开头,推测为此pdf文件的密码,输入后打开了pdf文件

image-20200521141037826
image-20200521141037826

看到这种字符串,而且每组字母在键盘上都相连,想到键盘密码,每个表情分隔为一个单词,但是这个键盘密码画出来的单词比较难看,横竖都有,需要多加分辨,最终组合在一起得到

代码语言:javascript
复制
The password of word is capital(PROVERBS OF GOD)

得到word文档附件的密码:PROVERBS OF GOD

Purgatory.zip

用刚刚得到的password解压,得到docm文件,百度可知docm文件为一种包含宏或启用了宏的文档,用word打开后查看宏:ALT+F8,可以看到有名为LargeSB的宏(大写字母即为LSB

image-20200521143406684
image-20200521143406684

运行宏命令可以得到由大量base64组成的字符串(下图只为其中一部分)

image-20200521143617404
image-20200521143617404

如此大量的base64很容易想到base64隐写,用脚本解一下,得到:Hidden1nWord_

再看word文档的内容,为大量的16进制,FF D8 FF E0 0D 0A 1A 0A开头,但不是FF D9结尾,而89 50 4E 47 0D 0A 1A 0A又是PNG的文件头,所以推测其为被修改了文件头的PNG文件,将文件头改回来后python写入文件,得到PNG图片

代码语言:javascript
复制
import binascii

f = open('Purgatory.txt','r').read().replace(' ','').strip()
fi = open('out.png','w')
fi.write(binascii.unhexlify(f))
fi.close()

由于刚刚的宏提示LSB,而且解base64隐写还得到了字符串,推测该PNG为需要密钥的LSB隐写,密钥为Hidden1nWord_,用脚本解密,得到内容如下

代码语言:javascript
复制
The password of paradise:Bliss_Syc!!!!

paradise.zip

刚才得到的解压密码:Bliss_Syc!!!!,解压后得到osz文件,百度可知这种文件和游戏osu!相关,下载游戏后用游戏打开这个osz文件,发现是个可以玩的图,将这个osz文件拖进kali中,发现可以解压,解压后可以看到一个readme.jpg的文件,strings查看这个文件,在最后可以看到一些可读的数字和字符

代码语言:javascript
复制
in,map.flag,is :0036112S0038362y0042112c0055162{0110912
0118712
0135512
0142112
0158163
0200412
0203862
0216312
0219762
0225312
0231312
0251862
0302512
0312112
0318412
0329628
...

在请教了小白师傅后才理解了这些字符的意思,每一行数字都对应一个时间,这个时间在游戏的图中对应了flag的一个字符,比如给出的例子,在这些数字的结尾也给了相应提示:Traversing.Time

代码语言:javascript
复制
0036112:S
0038362:y
0042112:c
0055162:{

根据下面所给的所有时间,在游戏图中找到对应的字符(在编辑地图模式的左下角可以跳转对应时间),有些时间对应图案只是一个圆点,点上显示的数字即是这个时间对应的字符,比如0135512对应的图案,数字为9

image-20200521165036109
image-20200521165036109

将这些字符按照顺序组合在一起,就是题目的flag,内容是32位小写md5

代码语言:javascript
复制
Syc{469ca48e237f59d6f847c623ceef5777}

其中md5的内容解密后为:Welcome to paradise

参考文章

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-05-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目考点
  • 题目详解
    • Something useful.zip
      • Windows7_by_Lamber.vmdk
        • Door.png
          • Purgatory.exe
            • Purgatorio
              • proverbs.pdf
                • Purgatory.zip
                  • paradise.zip
                  • 参考文章
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档