本文最后更新于 2026年3月29日 晚上
题目来源:CTFShow
misc2
题目描述:偶然发现我竟然还有个软盘,勾起了我的回忆。
解压附件得到file,根据题目描述,这应该是一个软盘文件。思路为用虚拟机挂载后再打开。
虚拟机创建方式不唯一,这里使用VMware Workstation Pro。
打开VMware,创建新的虚拟机,配置选自定义,操作系统选稍后安装操作系统,然后选其他,其余没提到的全都保持默认,直接下一步。
只是做简单的挂载,不用考虑太多
当画面变成上图这样时,依次点击自定义硬件 -> 添加 -> 软盘驱动器 -> 完成,然后在右侧连接一栏中选使用软盘映像文件,通过浏览定位到file的位置,打开,完成。
注意右下角要选所有文件,不然找不到file
之后只要开启虚拟机就能看到flag了🎉
开机即食
flag{ctfshow}
miscx
拿到手是一个rar压缩文件,用Bandizip打开,看到两个加密的txt和一个misc1.zip,下方有两行提示
先单独解压出这个zip,点开看一下,里面有一个未加密的png和一个加密的doc文档。
png图片CRC报错,修复后只是一句祝福语。末尾有一个flag{flag_1s_n0t_h3r3},再就没东西了。这里一度怀疑哪里有遗漏,后来考虑到图片本身可能就是信息,结合2020快乐的提示,猜测doc文档密码为2020。成功解锁。
密码直接告诉你了不用?
文档的内容是这样一串
1
| ♭‖♭‖‖♯♭♭♬‖♩♫‖♬∮♭♭¶♭‖♯‖¶♭♭‖∮‖‖♭‖§♭‖♬♪♭♯§‖‖♯‖‖♬‖‖♪‖‖♪‖¶§‖‖♬♭♯‖♭♯♪‖‖∮‖♬§♭‖‖‖♩♪‖‖♬♭♭♬‖♩♪‖♩¶‖♩♪‖♩♬‖¶§‖‖♩‖¶♫♭♭♩‖♬♯‖♬§♭‖♭‖♩¶‖‖∮♭♭♬‖‖♭‖♫§‖¶♫‖♩∮♭♭§‖♭§‖♭§§=
|
想到音符解密,使用千千秀字提供的在线工具解码为
1
| U2FsdGVkX1/eK2855m8HM4cTq8Fquqtm6QDbcUu4F1yQpA==
|
注:音符解密的在线工具现在已经无法使用了,当doc文档写的就是解密后的结果就行
新的密文开头U2FsdGVkX1 是 CryptoJS 库默认的加密输出前缀,结合rat?or?的提示,推测是rabbit加密,密钥试试2020。
rabbit在线解密网站
解密后得到
用这个作为密码尝试解锁两个txt,只能解锁hint.txt。内容为
1
| VmpKMFUxTXhXWGxVV0dob1RUSjRVVll3V2t0aFJscDBZMGhLYTAxWGVIaFZiRkpUWWtaYVZWSnJXbFpOVjJoeVZYcEdZVkpzVG5KVWJHaHBWa1ZWZDFkV1ZtRmtNRFZYVjJ4c2FWSlVWbFJVVnpWdVRXeFZlV1ZHVGxSaVZrWTBXVlJPYzFWR1pFZFRiVGxYWW01Q1dGcEdXbE5UUjBZMlVXMTBWMWRGU2xkV1ZtUXdVekpGZUZOWWJHaFRSVFZWV1d0YVMxTXhjRVZUYTFwc1ZteHdlRlp0ZERCV01VcFlaRE53V0Zac2NIWldSekZMVW1zeFdWSnNTbWxXUjNodlZtMXdUMkl5Vm5OaVNGWnBVbXh3YzFac1VrZFNiRlY0WVVkMFZXSlZXbmxWYlRWUFZsWlplbEZyWkZSaVJrcFFWV3hGYkUwd1VXeE5NRkVsTTBRJTNE
|
经过不断尝试,经过六次base64解密后得到
1
| welcome_to_2020%0Aflag%20is%20coming...%0Athe%20key%20is%20hello%202020%21Ü
|
再进行一次URL解密。得到如下内容
1 2 3
| welcome_to_2020 flag is coming... the key is hello 2020!Ü
|
去掉末尾的乱码Ü,得到最后的key
用这个key解锁flag.txt,拿到flag。
flag{g00d_f0r_y0u}
misc50
解压附件后是一张png。老规矩,扔进010,翻到最后发现PK标志,于是查找50 4B 03 04定位PK文件头,在文件头附近位置发现IEND前有一段密文
1
| Sk5DVlM2Mk1NRjVIU1gyTk1GWEgyQ1E9Cg==
|
base64一下得到
1
| JNCVS62MMF5HSX2NMFXH2CQ=
|
全大写字母加上数字2-7,所以再base32一次,得到
KEY{Lazy_Man},先留着,这是一会要用到的妙妙工具。
回到010中,以刚才找到的PK文件头为新的起点,把从这开始的数据复制到一个新文件中并修改扩展名为.zip,打开,发现一个fbi.rar。
用Bandizip打开,里面有一个flag.zip,并在下方发现了提示
base32一下得到123456。
再打开flag.zip,是一个加密的thienc.txt。试试密码123456,还真对了,送分题这一块🔑
这个txt的内容是一堆数字,这里截取前500位
1
| 30783337307837613078626330786166307832373078316330783030783430783462307862653078346430783162307830307866333078313430783030783030783030783030783030783732307830307830307830307830307830307830307830307834643078343830783461307832373078613078633530783732307836313078653130783939307861623078346430783939307832373078383930783738307838633078643030783262307861613078316530786630307837643078366430783339307866353078633530783533307832333078656230786363307835323078363330783862307832343078336530786466307864613078
|
观察一下发现这堆数字的规律是3078xxxx3078xxxx这样的,3078在ASCII码中表示0x,说明这其实是一堆十六进制的数据。
直接把txt的内容复制到CyberChef,用From Hex就可以把数据转换成0x形式。再用一次From Hex,就能翻译出我们熟悉的内容。
赛博厨子的恩情还不完
这里能看出文件头为7z,直接用网站自带的保存功能将转化后的数据保存为一个.7z文件,用Bandizip打开。里面是个加密的txt。
这时候就用到之前的妙妙工具了,输入 KEY{Lazy_Man} 打开txt,又出来一堆东西,足足有10598200个字符😰
不惯着它,看到Sk开头,==结尾,直接base64加base32一套丝滑小连招…吗?
根本带不走!试了好久都没结果,用ai也干不出来,您猜怎么着,这玩意要解密15次才能出结果:
base64 -> base32 -> base32 -> base32 -> base32-> base64 -> base32 -> base32 -> base32 ->base32 -> base64 -> base32 -> base32 -> base32 -> base32
这么大数量还是别为难赛博厨子了,祭出脚本!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| import base64
def solve_crypto(file_path): try: with open(file_path, 'r', encoding='utf-8') as f: data = f.read().strip()
for big_loop in range(3): print(f"正在进行第 {big_loop + 1} 组大循环解密...") missing_padding = len(data) % 4 if missing_padding: data += '=' * (4 - missing_padding) data = base64.b64decode(data).decode('utf-8', errors='ignore').strip() print(f" - Base64 解码完成")
for i in range(4): missing_padding = len(data) % 8 if missing_padding: data += '=' * (8 - missing_padding) data = base64.b32decode(data).decode('utf-8', errors='ignore').strip() print(f" - 第 {i + 1} 层 Base32 解码完成")
with open('flag_decoded.txt', 'w', encoding='utf-8') as f: f.write(data) print("\n[成功] 所有15层解密完成!结果已保存至 flag_decoded.txt") print("预览前50个字符:", data[:50])
except Exception as e: print(f"\n[错误] 解密过程中出现问题: {e}") print("请检查数据格式或循环层数是否准确。")
if __name__ == "__main__": solve_crypto('secenc.txt')
|
运行后得到flag_decoded.txt,是一堆由 .?! 组成的东西,这是OoK!语言,而且是Short Ook!。既然识别出了加密方式,就乘胜追击使用在线工具解决。
在此之前为了确保Short Ook!格式正确,要祭出第二个脚本清洗数据
1 2 3 4 5 6 7 8 9 10 11 12
| with open('flag_decoded.txt', 'r', encoding='utf-8') as f: content = f.read()
clean_content = content.replace('\n', '').replace('\r', '').replace(' ', '')
with open('clean_ook.txt', 'w', encoding='utf-8') as f: f.write(clean_content)
print(f"清洗完成!共处理 {len(clean_content)} 个符号。")
|
清洗后得到clean_ook.txt,复制里面所有内容到在线网站
戳我直达
先进行一次Ook! to Text,得到
1 2 3 4 5 6 7 8
| +++++ +++++ [->++ +++++ +++<] >++.+ +++++ .<+++ [->-- -<]>- -.+++ +++.< ++++[ ->+++ +<]>+ +++.< +++++ +[->- ----- <]>.< +++[- >+++< ]>+++ ++.++ +++++ .---- ----- .<+++ ++++[ ->--- ----< ]>--. <++++ +++[- >++++ +++<] >++++ +++++ +++.- ----- --.-- ----. <++++ [->++ ++<]> +++++ .<+++ +++[- >---- --<]> -.<++ ++[-> ++++< ]>.++ ++.<+ ++[-> ---<] >---- --.<+ +++[- >++++ <]>++ .---- ---.< +++++ +[->- ----- <]>-- ----- -.<++ +++++ [->++ +++++ <]>++ ++.++ +++++ .++++ ++++. <++++ +++++ [->-- ----- --<]> ----- .<+++ +++++ +[->+ +++++ +++<] >++++ +++++ ++.<
|
这是Brainfuck,所以再用一次Brainfuck to Text,拿到flag。
flag{Welc0me_tO_cTf_3how!}
stega1
一张相当干净的jpg图片,无论是图片属性图片结构还是图片内容都干净得无可挑剔,Steghide和Outguess也查不出有用的数据
这时候我们需要请出jpg内部隐写杀的手锏-JPHS,它专门针对 JPEG 的 DCT(离散余弦变换) 系数进行操作,经JPHS处理过的信息隐蔽性极高,binwalk 和普通的 strings 根本检测不到。这里直接分享出这个工具⬇️
双击启动Jphswin.exe,在open jpeg中打开jpg图片,就可以进行信息的隐藏和提取。本题中直接点seek,不用输入任何东西直接点OK,然后随便起个文件名,保存为txt后打开即可看到flag。
flag{3c87fb959e5910b40a04e0491bf230fb}
misc40
附件直接解压失败了。用Bandizip打开发现有一个wav文件被加密了,那就先解压出其余的文件。
提取后拿到一张普通的二维码.png,svega.mp3和conversion.txt。
png二维码扫描后是一句flag不在这里哦~~,可能里面确实没有flag,但里面没东西的可能性接近0。扔进010看一眼,发现末尾附加了一段BrainFuck。
1
| ++++++++[>>++>++++>++++++>++++++++>++++++++++>++++++++++++>++++++++++++++>++++++++++++++++>++++++++++++++++++>++++++++++++++++++++>++++++++++++++++++++++>++++++++++++++++++++++++>++++++++++++++++++++++++++>++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++<<<<<<<<<<<<<<<<-]>>>>>>>>>>>>>>>+++++.<<<<<++.------.>>>>>+++.<<<.<<++++.>>>>>--.<<<.<<+.>>>>>--.<<<++++++++.+++.>>>+.<<<<<+.------.>>>>>+++.<<<-----------.<<++++.>>>>>--.<<<<<++++++.<+++++++.>>>>>>.<<<<<++.<+++++++.>>>>>>-.<<<<<<++++.------.>>>>>>+++.<<<.<<<++++.>>>>>>---.<<<<<<++.------.>>>>>>+++.<<<.<<<++++.>>>>>>---.<<<<<<++.------.>>>>>>+++.<<<.<<<++++.>>>>>>.<<<<<<---------.>>>------.>>>-.<<<<<----.>>+++++++.>>>--.<<<<<--.<+++++.>>>>>>+++.<<<-.<<--.>>>>>---.<<-------.<+++.>>>++.<<<------.<<<---.>>>>>>--.<<<<<++.<+++.>>>>>>+++.<<<+++.<<--.>>>>>---.<<<<<<-------.>>>----.>>>+.<<<+.<+++.
|
还是去下面这个网站解密:
戳我直达
解密后得到
1
| 和谐民主和谐文明和谐和谐和谐自由和谐平等和谐公正
|
核心价值观解密,用随波逐流就能解。最后得到
看到svega.mp3,想到要用MP3Stego来提取数据。正好MP3Stego需要密码,这不就对上了。
复制svega.mp3到MP3Stego根目录,在此处开启Powershell并运行以下命令:
1
| .\Decode.exe -X -P 123456 svega.mp3
|
根目录下会生成一个svega.mp3.txt,双击打开就能看到隐藏的提示
1 2 3
| hint:静默之眼 对了~另一个音乐的密码是abc123哦 你马上就成功了!
|
这里提到的静默之眼是另一个工具silent eye,我们需要用这个工具解密最后的wav文件。虽然它是32位操作系统的可执行文件,但在64位操作上也能正常运行。
在此之前先用密码abc123把svega.wav解压出来,然后下载并安装silent eye。安装过程中记得勾选wav。
这时候突然想起来还有个txt没用上,打开看一眼
1 2 3
| 110001010100011101
2>4>8>10
|
2>4>8>10意义不明,感觉就是进制二转十,计算一下得到202013,猜测这是silent eye解密的密钥。
打开silent eye导入要解密的wav后,按照下图所示设置进行解密:
密钥要输入两次哦
flag{C0ngr4tul4ti0n!}
misc30
内含有一个加密mp3的zip,没找到有关密码的任何提示。先爆破试试,失败,扔进010尝试伪加密解法。
如图所示将光标位置的数字改成0(原来是3),ctrl+s保存后,就可以发现密码保护消失了
直接定位核心目录区,数9到10个字节
解压出mp3文件,听一下,是个比较劲爆的音乐,听不出问题;MP3Stego也没提取出东西。扔进010看一眼,好家伙里面塞了张图片,是个jpg
万物皆可藏
分离出来看看,干净得很,手里的检测工具都没扫出问题。既然这样,还有很简单但容易被忽视的一招:改高度。
010 editor中打开图片,在前300字节范围内查找FF C0(SOF0 标记头),没找到,说明这张jpg使用 FF C2(渐进式扫描)。FF C2出现在约160字节,其后第4、5字节代表高度,为01 73,随便改个更大的数字,比如改成0273。保存后重新打开jpg,可以看到隐藏信息
jpg改高度就是阴啊
下面那八个奇怪的符号是猪圈密码,上网搜个对照表翻译一下就是flag(记得加空格)
对号入座
flag{well done}