压缩包有两个文件,但是在解压的时候报错
用010editor打开,发现报错
同时发现文件尾部是504B,说明这是一个zip文件,把文件头修改为504B0304后可以解压出压缩包和一个图片
后来才知道,这是 《精灵宝可梦》 里的精灵未知图腾,拥有28类形态
对照上图得到另一个压缩包的密码whereisflag
然后得到加密的压缩包和层层加密.txt:
00111 1010 00001 0 11110 00011 100 100 11100 00111 11111 1000 1010 01 01 1000 100 00000 00000 00111 0 11000 00001 00000 11000 1000 10000 11110 11111 11100 0010 10000
国王把明文撒了盐之后交给士兵,士兵在途间经过了两个交叉的篱笆地才将密文传交给摩斯侦探。
根据描述可知解密
第一层是摩斯密码
第二层是栏数为2的栅栏密码
第三层的加盐指的是md5算法
解压得到一张图
手动把图里文字抠出来
将两端文字拼在一起,base64解密得到:
一般地,一长串十进制数可以转十六进制后再转ASCII字符,也可以以某类规律转换为坐标然后画图,或者转为二进制后画出一张二维码。
后来发现转为二进制数后发现长度是625,即25*25,然后试着转为二维码
import PIL
from PIL import Image
MAX = 25 #图片边长
img = Image.new("RGB",(MAX,MAX))
str="1111111001110111001111111100000100001101010100000110111010011100101010111011011101010110000101011101101110101010111010101110110000010011001101010000011111111010101010101111111000000000100101000000000011000111011010110000110001000000010100001010111100001011110101100111110011100101101001100101010010111000101011100100101101001111110000110101011110011010000010010001011100001111000010011101010110001100101110101000111011111010100000000110001101000110001111111011001100101010101100000101111001110001100010111010011100011111101111011101001101111011010011101110100010011010010010110000010100011010011110011111111011011100101010001"
i = 0
for y in range (0,MAX):for x in range (0,MAX):if(str[i] == '1'):img.putpixel([x,y],(0, 0, 0))else:img.putpixel([x,y],(255,255,255))i = i+1
img.show()
img.save("flag.png")
生成的图片尺寸太小,将其拉大
得到flag