ctfshow的misc入门题总算是做完啦,现在开始写misc题,感觉难度不止上升一个level,今天浅浅记录一道学到了很多知识点的题目。
参考博客:刷题之旅第10站,CTFshow misc50_圆圈勾勒成指纹的博客-CSDN博客_ctfshow misc50
CTFshow-Misc(部分wp)_i_kei的博客-CSDN博客_ctfshow misc
题目上来是一张图片,放到010 editor里面发现是有两个压缩包的字眼
于是binwalk一下
拿到一个压缩包
后面隐写了一个信息是我没有想到的,看了师傅们的wp才知道
字符串
Sk5DVlM2Mk1NRjVIU1gyTk1GWEgyQ1E9Cg==
先base64再base32解码之后得到:
KEY{Lazy_Man}
暂时还不知道有什么用,先留着吧
分离出来的压缩包打开之后发现需要密码,下面有hint:
这里get到一个小tips,一般最多是两个==,如果四个可以试试base32
解码得到:123456
作为压缩包密码;
打开之后得到:一个文档
渍渍渍,密密麻麻,但是仔细观察可以发现“3078”一直在重复出现,转为十六进制——>3078就是“0x”
使用脚本,进行批量转换。得到一堆0x 0x的文本。
分析前几个字符串0x37 0x7a,发现37 7a 是7z压缩包的文件头。
这里补充一下7z文件的相关知识:
7z 是一种主流高效的压缩格式,它拥有极高的压缩比。(简而言之,就是一种压缩度很高的压缩文件)
通常使用 7-Zip 的 7z 格式能比使用 zip 格式的压缩文件小 30-70%。并且使用 7-Zip 创建的 zip 格式比大多数其它压缩软件创建的都小 2-10%。
那么思路来了:批量删除0x,转换为7z文件。
借用师傅们的脚本:
import re
def read_file(filepath):
with open(filepath) as fp:
content=fp.read();
return content
number = read_file('1.txt')
result = []
result.append(re.findall(r'.{2}', number))
result = result[0]
strings =''
for i in result:
y = bytearray.fromhex(i)
z = str(y)
z= re.findall("b'(.*?)'",z)[0]
strings += z
b= strings.split('0x')
strings=''
for i in b:
if len(i) ==1:
i= '0' + i
strings +=i
with open('test.txt', 'w') as f:
f.write(strings)
得到文件
接下来要做的一步就是将得到的txt文件内容以十六进制复制到010中打开并保存为111.7z
这一步虽然说着简单,但是对于我这种小白在操作上还是踩了很大的坑
所以这里详细地演示一次:
首先:
接下来就是粘贴了
也就是在这里开了眼
我一直是用的ctrl+v
所以得到的结果真的很奇怪呀,右边那一栏,导出之后都没法打开文件
后来问了v神才知道:要用ctrl+shift+v
两者的区别在于粘贴位置不同。ctrl+v为错位复制,粘贴对象位于编辑窗口的中心;shift+ctrl+V为原始复制,粘贴对象与复制对象位于同一位置。
平常用倒是区别不大,只不过十六进制比较特殊
所以要ctrl+shift+v
这样子看起来也就顺眼多了
导出保存为111.7z
File——>save as——>自定义文件后缀
打开之后发现需要密码,之前的那个字符串刚好就是密钥
解开压缩包之后得到txt文档:
不是吧!!!又又又是一大堆字符串
不过最后发现"=="
一次解密中后还有“=”
考虑是多次base64+base32循环加密
这里用大佬的代码:
# @Author:Cheyenne
import base64
import re
f = open('secenc.txt').read().encode('utf-8')
while True:
if re.match('^[2-7A-Z=]+$', f.decode('utf-8')):
f = base64.b32decode(f)
elif re.match('^[0-9a-zA-Z+/=]+$', f.decode('utf-8')):
f = base64.b64decode(f)
else:
print(f.decode('utf-8'))
break
with open('result.txt', 'w', encoding='utf-8') as file:
file.write(str(f,encoding='utf-8'))
print("Decryption complete!")
解码之后得到:
这我会!
brain fuck/Ook加密
Brainfuck/Ook! Obfuscation/Encoding [splitbrain.org]
先Ook to text
再brainfuck to text
得到flag:
本题到此结束!!!
收获颇多
抱大佬大腿的感觉真好
下次还抱
嘿嘿~