QRJoker
Description
一个gif
Analyze
易得右边有不完整二维码,先分解,之前比赛手撸出来的,赛后写个脚本来一把梭一波
Solve
根据二维码的原理https://merricx.github.io/qrazybox/help/getting-started/about-qr-code.html,根据这个编写脚本,易得
from PIL import Image
from Crypto.Util import number
import base64
dic = {0:'0',1:'1',2:'2',3:'3',4:'4',5:'5',6:'6',7:'7',8:'8',9:'9',10:'A',11:'B',12:'C',13:'D',14:'E',15:'F',38:'%'}
res = ''
for num in range(64):
p = Image.open('frame'+str(num+1)+'.bmp')
a,b = p.size
# print(a)
data = []
for y in range(100,b-10,10):
d = []
for x in range(410,470,10):
if (y//10)%2 == 0:
if p.getpixel((x,y)) >= 200:
d.append('1')
else:
d.append('0')
else:
if p.getpixel((x,y)) >= 200:
d.append('0')
else:
d.append('1')
data.append(d)
mode = data[11][5]+data[11][4]+data[10][5]+data[10][4]
# print(mode)
length = data[9][5]+data[9][4]+data[8][5]+data[8][4]+data[7][5]+data[7][4]+data[6][5]+data[6][4]+data[5][5]
# print(length)
d1 = data[5][4]+data[4][5]+data[4][4]+data[3][5]+data[3][4]+data[2][5]+data[2][4]
d2 = data[1][5]+data[1][4]+data[0][5]+data[0][4]+data[0][3]+data[0][2]+data[1][3]+data[1][2]
d3 = data[2][3]+data[2][2]+data[3][3]+data[3][2]+data[4][3]+data[4][2]+data[5][3]+data[5][2]
d4 = data[6][3]+data[6][2]+data[7][3]+data[7][2]+data[8][3]+data[8][2]+data[9][3]+data[9][2]
d5 = data[10][3]+data[10][2]+data[11][3]+data[11][2]+data[11][1]+data[11][0]+data[10][1]+data[10][0]
d6 = data[9][1]+data[9][0]+data[8][1]+data[8][0]+data[7][1]+data[7][0]+data[6][1]+data[6][0]+data[5][1]
d = d1+d2+d3+d4+d5+d6
fin = d[:33]
for i in range(0,len(fin),11):
y = int(fin[i:i+11],2)%45
x = int(fin[i:i+11],2)//45
res += dic[x] + dic[y]
b64_data = number.long_to_bytes(int(res.replace('%',''),16))
while 1:
b64_data = base64.b64decode(b64_data)
if b'flag' in b64_data:
print(b64_data)
break
flag
flag{d69ede918ec3997989a5e8f8c703a729}