Python zip伪加密

原理

zip伪加密是在文件头的加密标志位做修改,从而实现在打开文件时识被别为加密压缩包。
所以把相应标志为改回来即可!

脚本

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author: moddemod
# datetime: 2019/12/25 下午5:47 
# ide: PyCharm

import zipfile


def modified(filename):
    with open(filename, 'rb') as f:
        r_all = f.read()
        # print(r_all)
        r_all = bytearray(r_all)
        #  504B0304后的第3、4个byte改成0000
        index = r_all.find(b'PK\x03\x04')
        if not index:
            i = index + 4
            r_all[i + 2:i + 4] = b'\x00\x00'
         #  504B0102后的第5、6个byte改成0000
        index1 = r_all.find(b'PK\x01\x02')
        if index1:
            print()
            i = index1 + 4
            r_all[i + 4:i + 6] = b'\x00\x00'
    with open('test.zip', 'wb') as f1:
        f1.write(r_all)


def show_b2h(filename):
    with open(filename, 'rb') as f:
        r = f.read(1)
        cnt = 0
        while r:
            b = ord(r)
            print('%02x ' % (b), end='')
            cnt = cnt + 1
            if cnt % 16 == 0:
                print()
            r = f.read(1)


def unzip_file(zip_src):

    r = zipfile.is_zipfile(zip_src)
    if r:
        fz = zipfile.ZipFile(zip_src, 'r')
        for file in fz.namelist():
            fz.extract(file, 'result')
    else:
        print('error')


if __name__ == '__main__':
    filename = 'flag.zip'
    show_b2h(filename)
    modified(filename)
    print('修改后为:')
    show_b2h('test.zip')

# 50 4b 03 04 文件头标记
# 14 00 解压文件所需要的pkware的版本
# 09 00 全局方式标志有无加密
# 08 00 50 a3 最后修改文件时间 日期
# 21 38 76 65 crc32
# 19 00 00 00 压缩后尺寸
# 17 00 00 00 未压缩尺寸
# 08 00 文件长度
# 00 00 扩展记录长度

Python zip伪加密_第1张图片

你可能感兴趣的:(密码学,bugku,Python)