bugku misc合集2(贝斯手filestoragedatwhereisflag番外篇键盘数独)
一、贝斯手解压后里面有四个东西其中打开介绍.txt拉到最后有提示那就是1992用1992解压flag.zip的加密压缩包得到558327a6c4304ad5938eaf0efb6cc3e53dcCFmZknmK3SDEcMEue1wrsJdqqkt7dXLuS558是一行下面的这串是一行所以分开理解上面的意思是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-27875,284-183101以此类推最后得到一串数字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, encodingutf-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个所以我也不确定我这个思路对不对绕不绕哈哈哈后面如果有更新欢迎大家告诉我。