import zlib
s = '''
78 9C 4B CB 49 4C AF 4E 4B 36 32 4D 4E 4A 32 4F
B2 30 B5 34 B5 4C 4B 35 30 36 37 B6 30 32 31 4C
B4 34 4B 4A 33 32 4E A9 05 00 E9 E2 0B 5F D0 1C
68
'''
s = s.replace(' ','').replace('\n','')
b = bytes.fromhex(s)
flag = zlib.decompress(b)
print(flag)
flag{fc25cbb7b85959fe03738241a96bf23d}
0x09 westego4.3open (123456).bmp
使用wbs43open工具,输入密码。
得到flag{我跟你讲,这个小甜瓜超甜der~}
0x0A IHDR.png
IHDR块不对劲,CRC校验有问题。
import os
import binascii
import struct
png= open("IHDR.png","rb").read()
for i in range(1024):
data = png[12:20] + struct.pack('>i',i)+png[24:29]
crc32 = binascii.crc32(data) & 0xffffffff
if crc32 == 0x1fcf9e8e:
print (hex(i)[2:])
print 'Your input1 is your flag~'
l = len(input1)
code = []
for i in range(l):
num = ((ord(input1[i]) + i) % 128 + 128) % 128
code += chr(num)
for i in range(l - 1):
code[i] = chr(ord(code[i]) ^ ord(code[i + 1]))
print code
code = ['\x0b', '\x0e', '\t', '\x15', '0', '4', '\x01', '\x06', '\x14', '4', ',', '\x1b', 'U', '?', 'o', '6', '*', ':', '\x01', 'D', ';', '%', '\x13']
编写解码代码
code = ['\x0b', '\x0e', '\t', '\x15', '0', '4', '\x01', '\x06', '\x14', '4', ',', '\x1b', 'U', '?', 'o', '6', '*', ':', '\x01', 'D', ';', '%', '\x13']
l=len(code)
for i in range(l-2,-1,-1):
code[i]=chr(ord(code[i])^ord(code[i+1]))
for i in range(l):
print(chr((ord(code[i])-i)%128),end='')
运行得到结果:flag{Just_Re_1s_Ha66y!}
0x1F zip口令爆破
拿到flag{zip_is_so_easy!}
0x20 明文攻击
构造一个crc32值与压缩后文件大小一致的readme.txt,这里用一位师傅写的脚本,非常好用。
from zlib import crc32
import random
char='0123456789'
def crc32_f(data):
return hex(crc32(data)&0xffffffff)[2:10]
length=input('length:')
crc32_=raw_input('crc32:').lower()
while True:
text=''
for i in range(length):
text+=char[random.randint(0,len(char)-1)]
if crc32_f(text)==crc32_:
raw_input('find it:'+text)
exit
from PIL import Image
from zlib import *
MAX = 25
pic = Image.new("RGB",(MAX,MAX))
str ="1111111000100001101111111100000101110010110100000110111010100000000010111011011101001000000001011101101110101110110100101110110000010101011011010000011111111010101010101111111000000001011101110000000011010011000001010011101101111010101001000011100000000000101000000001001001101000100111001111011100111100001110111110001100101000110011100001010100011010001111010110000010100010110000011011101100100001110011100100001011111110100000000110101001000111101111111011100001101011011100000100001100110001111010111010001101001111100001011101011000111010011100101110100100111011011000110000010110001101000110001111111011010110111011011"
i=0
for y in range(0,MAX):
for x in range(0,MAX):
if(str[i] == '1'):
pic.putpixel([x,y],(0,0,0))
else:pic.putpixel([x,y],(255,255,255))
i = i+1
pic.save("flag.png")