N1CTF 2020 部分复现
Before
这半个月一连串的比赛,淦,爷要脑溢血了(两眼一黑,直接去世)
导致我现在才复现N1CTF
菜狗表示签到和签退好评,淦
复现的时候学到好多,有些东西要找个时间梳理一下了,这里仅仅放一下我的一些理解和想法好了
继续肝ctf!
淦啊!这已经不是wp了,是我复现题目,阿布,是学习过程记录了,菜啊~
好难啊~
Crypto
VSS
源码
#!/usr/bin/python3
import qrcode # https://github.com/lincolnloop/python-qrcode
import random
import os
from PIL import Image
from flag import FLAG
def vss22_gen(img):
m, n = img.size
share1, share2 = Image.new("L", (2*m, 2*n)), Image.new("L", (2*m, 2*n))
image_data = img.getdata()
flipped_coins = [int(bit) for bit in bin(random.getrandbits(m*n))[2:].zfill(m*n)]
for idx, pixel in enumerate(image_data):
i, j = idx//n, idx % n
color0 = 0 if flipped_coins[idx] else 255
color1 = 255 if flipped_coins[idx] else 0
if pixel:
share1.putpixel((2*j, 2*i), color0)
share1.putpixel((2*j, 2*i+1), color0)
share1.putpixel((2*j+1, 2*i), color1)
share1.putpixel((2*j+1, 2*i+1), color1)
share2.putpixel((2*j, 2*i), color0)
share2.putpixel((2*j, 2*i+1), color0)
share2.putpixel((2*j+1, 2*i), color1)
share2.putpixel((2*j+1, 2*i+1), color1)
else:
share1.putpixel((2*j, 2*i), color0)
share1.putpixel((2*j, 2*i+1), color0)
share1.putpixel((2*j+1, 2*i), color1)
share1.putpixel((2*j+1, 2