bugku misc合集2(贝斯手filestoragedatwhereisflag番外篇键盘数独)
2026/6/4 22:13:06 网站建设 项目流程

一、贝斯手

解压后里面有四个东西,其中打开介绍.txt,拉到最后有提示:

那就是1992,用1992解压flag.zip的加密压缩包

得到:5+58==

327a6c4304ad5938eaf0efb6cc3e53dcCFmZknmK3SDEcMEue1wrsJdqqkt7dXLuS

5+58是一行,下面的这串是一行,所以分开理解,上面的意思是MD5和base58编码,下面的是需要解密的东西。MD5通常为32为十六进制字符,于是前32位MD5解密得到:

后面base58解密得到:

得到flag{this_is_md5_and_base58}

二、FileStoragedat

下载解压后是一个.dat文件,data文件没有确定类型,这里我猜测是图片,先按照图片的思路试试,写一段脚本,将文件头和常见文件格式进行异或,看能否得到一个固定值,这个.dat文件头可以在随波逐流里看到:

cipher_hex = "17ced0d993948494" cipher_bytes = bytes.fromhex(cipher_hex) # 常见图片格式头 (取前8位) formats = { "PNG": "89504e470d0a1a0a", "JPG": "ffd8ffe000104a46", # JPEG通常以FF D8 FF开头 "GIF": "4749463839610100" # GIF89a } for name, fmt in formats.items(): plain_bytes = bytes.fromhex(fmt) key = bytes([c ^ p for c, p in zip(cipher_bytes, plain_bytes)]) print(f"尝试匹配 {name}:") print(f" 推导出的前8位 Key: {key.hex()}")

ok成功,能看出是png格式,那就再写一段脚本解密还原:

key = 0x9e # 你推导出来的关键字节 with open('你的文件名.dat', 'rb') as f_in: data = f_in.read() # 对每一个字节进行异或 decrypted = bytes([b ^ key for b in data]) # 将解密后的结果存为 .png 文件 with open('result.png', 'wb') as f_out: f_out.write(decrypted) print("解密完成,请检查 result.png")

得到一张图片,图片里有bugku{WeChatwithSteg0}。

然后这道题还有一个贼简单的解法:微信PC电脑版 images 目录 dat 格式图片文件在线解密转换工具

使用这个在线网站,直接拖这个文件进去,1秒就出结果。

只能说,学无止境,又学会一招!

三、Where is flag 番外篇

这题很有意思,脑洞很大。首先下载来是两个压缩包,一个key,一个出师表。出师表.rar还需要解压密码,于是先看key这个文件夹,里面就是13个txt,打开是每一小段的出师表,唯一可入手的是文章末尾加了不同数量的字母。

第一个结尾5个A,第二个8个A,第三个没有,那就能想到,这玩意大概率是用来凑字数,也就是凑文件大小的,那试试从文件大小入手。

我靠还真是……用winrar打开key.rar,每个文件的大小算一下差值:353-278=75,284-183=101

以此类推,最后得到一串数字:75 101 121 58 90 104 117 71 76 64 64 46 48

这串数字小于128,判断为ascii码,解码得:Key:ZhuGL@@.0

这就是第二个出师表.rar的压缩密码。

这里我已沉默我已力竭,我想能不能直接爆破得到压缩包密码我试试:

拉倒吧……

解压出来后得到一张图片,用记事本打开文件搜索flag得到: flag in here {LjFWBuxFNTzEWv6t2NfxjNFSH1sQEwBt5wTTLD1fJ}

直接再随波逐流一键解码:

这道题目就是脑洞很大,挺有意思的。

四、键盘

需要解压密码,先别急着爆破,看看是否是伪加密:

伪加密,那就直接随波逐流工具zip伪加密修复,然后就打开了

发现一个密码文件:wxad-tbfh-yngj-rvdg

输入后发现打不开flag文件,迷茫,然后突然想到这道题目叫键盘,waxd中间围着的就是s,于是猜测密码是s-g-h-f,输入试试,打开了,需要连输两遍,把图片挪开就看到flag了。

这道题目需要再细心一些,用随波逐流做伪加密很好用,但最后的密码确实还得拐个弯。

五、数独

很新的一道题目,下载解压后是一张数独图片和一个网页。

网页直接查看源码,试着找flag,真找到了:

随波逐流一键解码:

fine,就知道没那么容易。

得到的flag内容我随手复制到记事本里,神奇的事情发生了:

这些夹杂在正常字母和数字中间的小方块(俗称“豆腐块”字符),正是用来藏匿 Flag 的零宽字符很明显是一个零宽加密!

那就解密看看,得到:

解密后显示:用什么处理器的手机玩五,那我们可以得出结论了,图片是五子棋,且最后flag应该提交的是手机的处理器型号!

既然给出了5,我觉得可能他要的就是出现5次的处理器型号,而且flag应该不能是中文吧,所以写一段代码,把所有字母+数字的处理器名称都提取出来,看哪个出现了5次。

import re from collections import Counter # 读取文件 with open('海信手机.html', 'r', encoding='utf-8') as f: html = f.read() # 提取所有包含在括号里的全大写字母+数字的型号 cpu_models = re.findall(r'(([A-Z0-9]+))', html) # 统计频率并直接打印所有结果 counts = Counter(cpu_models) print("--- 所有的处理器出现频率如下 ---") for model, count in counts.most_common(): # .most_common() 可以按从多到少排序 print(f"型号: {model} -> 出现了 {count} 次")

所以提交一下flag{MSM8937},发现就是答案。

这道题目目前还没有官方wp,解题出来的人也很少才3个,所以我也不确定我这个思路对不对绕不绕哈哈哈,后面如果有更新欢迎大家告诉我。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询