part1
、part2
、part3
很明显是zip文件的压缩源文件数据区
、压缩源文件目录区
、压缩源文件目录结束标志
三个文件都补全50 4B
两个字节,然后依次把part2
、part3
补全到part1
文件中;修改part1
文件名为part1.zip
使用010 Editor
打开,分析文件结构发现压缩源文件数据区
的CRC
字段为空、压缩源文件目录区
的filename
字段为空。CRC
可以从压缩源文件目录区
获得,filename
字段可以从压缩源文件数据区
获得。互相补全即可得到完整的zip文件。
有加密,真加密,接下来就是这道题出题人第一个令人看不懂的操作:7位大小写字母+数字
的zip密码爆破。
果然脑洞大开,懒得理,直接看答案
得到zip压缩密码:GyxXaq9
使用010 Editor
打开,发现文件末附加隐写了一些数据
仔细观察不难发现这些数据是zip的字节流数据的逆序,将这些数据提取出来,然后Python简单处理
from binascii import *
with open('reverse_data', 'rb') as f:
hex_data = hexlify(f.read())[::-1]
with open('flag.zip', 'wb') as f1:
for i in range(0, len(hex_data), 2):
data = hex_data[i: i+2][::-1]
f1.write(unhexlify(data))
enc.pyc
文件使用pyc反编译得到源码:https://tool.lu/pyc/
import random
import base64
import sys
def KeyGenerate():
random.seed(10)
keyseed = ''
for i in range(12):
x = random.randint(32, 127)
keyseed += chr(x)
return base64.b64encode(keyseed.encode('utf-8')).decode('utf-8')
def enc(key, file):
count = 0
f = open(file, 'rb')
f1 = open('encrypted', 'wb')
for now in f:
for nowByte in now:
newByte = nowByte ^ ord(key[count % len(key)])
count += 1
f1.write(bytes([newByte]))
if __name__ == '__main__':
key = KeyGenerate()
enc(key, sys.argv[1])
通过分析加密源代码还原出加密前的文件,Python简单处理
import random
import base64
def KeyGenerate():
random.seed(10)
keyseed = ''
for i in range(12):
x = random.randint(32, 127)
keyseed += chr(x)
return base64.b64encode(keyseed.encode('utf-8')).decode('utf-8')
def dec(key):
count = 0
with open('encrypted', 'rb') as enc_data:
with open('decrypted_data', 'wb') as dec_data:
for now in enc_data:
for nowByte in now:
newByte = nowByte ^ ord(key[count % len(key)])
count += 1
dec_data.write(bytes([newByte]))
if __name__ == '__main__':
key = KeyGenerate()
dec(key)
#print(key)
得到一张jpg图片
接下来就是出题人第二个令人看不懂的操作:LSB隐写7位大小写字母+数字+特殊符号的密码爆破
懒得管,直接贴密码:U!lSb29
然后最后一个令人看不懂的操作:只有半张图?
我尝试了修改了jpg
图片的高度,发现也得不到完整清晰的图片
肉眼识别flag。。。。。。。识别不出来,直接偷吧。。。
flag{2ceuagIha7v8mlfod9uas1d86wqer0}