【攻防世界】Misc文件类型
⭕、知识点
十六进制转ASCII/base64解码/zip文件格式
一、题目
二、解题
1、分析密文
一长串数字,长度为偶数,肯定想到先两两组合转化为ascii
2、编写脚本打印转化后的字母
3、观察发现开头有base64的倒序字符
4、尝试去掉开头提示部分并用base64解密
5、但是由于base64编码的数据长度应该是4的长度,所以为其填充2个 = 号,否则会有如下报错
b64decode
return binascii.a2b_base64(s, strict_mode=validate)
~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
binascii.Error: Incorrect padding
6、base64解密后打印字符
很明显PK开头,为zip二进制文件
7、将二进制数据写入并保存为压缩包格式
8、解压得到flag
附脚本:
import textwrap
import base64
with open("cipher.txt", "r") as f:
ciphertext = f.read()
hex_list = textwrap.wrap(ciphertext, 2)
text = ""
for e in hex_list:
text += chr(int(e, 16))
print(text)
"""46ESAB_UEsDBBQAAAAIAAldCFXqOw7cKAAAACYAAAAIAAAAZmxhZy50eHRLy0lMrzZISk02SEwxTkk0MjQ0TjY3SDU1SEsxNTM0T7JINU"""
c = text[7:]
print(c)
"""UEsDBBQAAAAIAAldCFXqOw7cKAAAACYAAAAIAAAAZmxhZy50eHRLy0lMrzZISk02SEwxTkk0MjQ0TjY3SDU1SEsxNTM0T7JINU+zrAUAUEsBAhQAFAAAAAgACV0IVeo7DtwoAAAAJgAAAAgAJAAAAAAAAAAgAAAAAAAAAGZsYWcudHh0CgAgAAAAAAABABgAGxEfk9iq2AEbER+T2KrYAQJF+4rYqtgBUEsFBgAAAAABAAEAWgAAAE4AAAAAAA"""
# m = base64.b64decode(c)
"""没填充等号会报错"""
m = base64.b64decode(c+"==")
print(m)
""" b'PK.....' """
with open("flag.zip", "wb") as f:
f.write(m)
三、答案
flag{0bec0ad3da2113c70e50fd5617b8e7f9}
四、总结
1、对于一串数字的密文考虑转为ascii,因为两个十六进制数最大仅能表示255,ascii字符表有128字符
2、对于不知用什么解密方式的未知编码,除了观察其字符特征,还要注意观察首尾有无提示信息(倒写、象形)