2021强网拟态misc部分wp
Bar
打开是一个gif,看着有点像莫斯,先用gif分离工具分离一下,得到334张图片
发现有三种颜色,黑白灰。猜测黑为"-",白为".",灰色为空格,生成莫斯密码:
from PIL import Image
import os
for i in os.listdir():
if(i.split(".")[1] == "png"):
p = Image.open(i).convert("L")
a,b=p.size
for x in range(a):
for y in range(b):
# print(p.getpixel((x,y)))
if p.getpixel((x,y)) == 0:
print("-",end="")
break
elif p.getpixel((x,y)) == 255:
print(".",end="")
break
else:
print(" ",end="")
break
break
结果
-.-. --- -.. . ----. ...-- -.-.----.--...-.-.-...-.-..--.-...-.-..-...-.-.-...-..--..-.-..--.-..-..-....-.-.-.-.-....-.-....-.-..-...-.-...-..-.-..-.-...--..-.-..--.-..-..--..-.-..--.-.-...-...-..-.-....-.-.-..-...-.--...-.-.-....-.-.--.-...-.-..-..-..--...-.-.-..-...-.--..-.-..-....-.-.-..-...-.-.-...-....................-.-.----.-
发现解不出来,但是前面这部分可以,解出来是code93
-.-. --- -.. . ----. ...--
猜测后面部分为code93编码。网上查找[code93编码](条码规范——Code 93_kzhuangood的博客-CSDN博客)发现为01形式且9位为一个字母/数字,把后面的改成01形式,在以9位分割
from PIL import Image
import os
num = 0
for i in os.listdir():
if(i.split(".")[1] == "png" and int(i.split(".")[0] )>= 27):
num = num +1
p = Image.open(i).convert("L")
a,b=p.size
str = ''
for x in range(a):
for y in range(b):
# print(p.getpixel((x,y)))
if p.getpixel((x,y)) == 0:
print("1",end="")
break
elif p.getpixel((x,y)) == 255:
print("0",end="")
break
break
if num%9 == 0:
print(" ")
得到如下:
101011110
110001010
100010100
110100010
100100010
101000100
110010100
110100100
100001010
101010000
101000010
100100010
100010010
100101000
110010100
110100100
110010100
110101000
100010010
100001010
100100010
110001010
100001010
110100010
100100100
110001010
100100010
110010100
100001010
100100010
101000100
000000000
000000000
101011110
1
根据这个对应关系,写脚本
from PIL import Image
string = ['100010100', '101001000','101000100', '101000010', '100101000',
'100100100', '100100010', '101010000','100010010', '100001010',
'110101000', '110100100', '110100010', '110010100','110010010',
'110001010', '101101000', '101100100', '101100010', '100110100',
'100011010', '101011000', '101001100', '101000110', '100101100',
'100010110','110110100', '110110010', '110101100', '110100110',
'110010110', '110011010','101101100', '101100110', '100110110',
'100111010', '100101110']
number = ['0', '1', '2', '3', '4', '5','6', '7', '8', '9',
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
'Y', 'Z', '-']
data = "101011110 110001010 100010100 110100010 100100010 101000100 110010100 110100100 100001010 101010000 101000010 100100010 100010010 100101000 110010100 110100100 110010100 110101000 100010010 100001010 100100010 110001010 100001010 110100010 100100100 110001010 100100010 110010100 100001010 100100010 101000100 000000000 000000000 101011110 1"
# print(data.split(" "))
# use_end_data = '101011110 100110010 110001010 100010100 100110010 110100010 100100010 101000100 100110010 110010100 100110010 110100100 100001010 101010000 101000010 100100010 100010010 100101000 100110010 110010100 100110010 110100100 100110010 110010100 100110010 110101000 100010010 100001010 100100010 100110010 110001010 100001010 100110010 110100010 100100100 100110010 110001010 100100010 100110010 110010100 100001010 100100010 101000100 110010110 101001100 101011110 1'
for i in data.split(" "):
if i in string:
flag = number[string.index(i)]
print(flag.lower(),end="")
else:
pass
# number[string.index()]
得到如下字符串
f0c62db973684dbda896f9c5f6d962
但是可以发现,最后全是0,根据hint可知是code93生成的条形码停止字符前两位。以上面的字符串在在线网站生成一个条形码
然后根据这个条形码,转换为9位一个的01字符。
from PIL import Image
import os
p = Image.open('1.png').convert("L")
a,b=p.size
num = 0
for x in range(0,a,2):
num = num +1
for y in range(b):
if p.getpixel((x,y)) == 0:
print("1",end="")
elif p.getpixel((x,y)) == 255:
print("0",end="")
# print(p.getpixel((x,y)))
break
if num%9 == 0:
print("")
得到如下:
101011110
100110010
110001010
100010100
100110010
110100010
100100010
101000100
100110010
110010100
100110010
110100100
100001010
101010000
101000010
100100010
100010010
100101000
100110010
110010100
100110010
110100100
100110010
110010100
100110010
110101000
100010010
100001010
100100010
100110010
110001010
100001010
100110010
110100010
100100100
100110010
110001010
100100010
100110010
110010100
100001010
100100010
101000100
110010110
101001100
101011110
1
得到后两位是:
110010110
101001100
对应的编码是 um,所以flag为
f0c62db973684dbda896f9c5f6d962um