2021强网拟态misc部分wp

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

猜你喜欢

转载自blog.csdn.net/qq_41636200/article/details/121096581