跳转至

压缩包相关

压缩包相关

ZIP相关

ZIP介绍

ZIP文件格式的组成: 压缩源文件数据区[文件头+文件数据+数据描述符]{此处可重复多次} +核心目录 +目录结束标识

1567161962704-41d3c616-0ded-4483-8cbf-320843db45be.png

1567162073401-2e4a759a-d4b4-47ea-92b8-f9dca5ad074b.png

格式缺失

文件头删掉的,但不开,但是用 binwalk 分析可以查出有 zip 个文件尾,可以用 winhex 添上文件头

ZIP伪加密

全局方式位标记,如果是 09 00 就会提示需要密码,一共有两处,如果想要实现伪加密,改前面的压缩源文件数据区的是不管用的

1606460250424-ff6a64ea-3a51-4c7d-af8c-f985ffe146c0.png

在后面的压缩源文件目标区管用,甚至只改后面这个就行

1606459522313-c6262f37-5c73-4b0f-aade-6f4f4b5e7729.png

当然,如果本来是有密码的,你改掉是会出错的

密码爆破

。。。ARCHPR

RAR会比其他格式慢,RAR不管密码对不对,直接去试,解不出来就不对,而ZIP是先检验密码是不是正确的

ZIP明文攻击

手里有加密的压缩包和压缩包内部分文件,可以使用明文攻击方式。可以将压缩包内加密但是的另外未加密的文件进行压缩,然后用 ARCHPR 这个工具进行明文攻击

这个工具的 4.54 版本(起码我手上的这个)有问题,跑了两小时没跑出来,用低版本 4.0 几秒钟出结果

举个例子有个压缩包,里面俩加密的文件,但是有个相同名字的未被压缩的文件

1635084193893-4f8a5ef9-7f8b-4163-82e8-6b7fe91806d2.png

这时候可以对外边的图片进行压缩,用 winrar,选择好压缩方式,不知道选啥就都试试

1635084438091-1d4fa27c-4532-4f05-beed-af737785d742.png

1635084578017-f1bbcfcb-ba46-49a6-930f-952dab91c98d.png

1635085346320-c15e32f0-b345-4f27-b4a6-bea6ccb47e1f.png

1635085393635-db083b51-6a14-4f9f-b46f-ec77f35da15f.png


CRC爆破

CRC32:CRC本身是“冗余校验码”的意思,CRC32则表示会产生一个32bit(8位十六进制数)的校验值

在产生CRC32时,源数据块的每一位都参与了运算,因此即使数据块中只有一位发生改变也 会得到不同的CRC32值,利用这个原理我们可以直接爆破出加密文件的内容

https://github.com/theonlypwner/crc32

python crc32.py reverse crc值    根据爆破出来的看看有是不是有啥特殊意思

1567165033125-11580e03-67ff-4361-848a-00ef3ea6f0fc.png

NTFS流隐写

安恒的一道题:猫片,先是LSB提取一个png,然后改高度得到完整的取反色,下载文件,得到RAR,使用NTFS流隐写,打开软件,然后用 winrar 解压缩,然后扫描一下,发现一些其他的东西,导出就可以了

1567171060656-78335963-22f5-4dcd-a716-ad28904092db.png

zlib解压

import zlib
def compress(infile, dst, level=9):
    infile = open(infile, 'rb')
    dst = open(dst, 'wb')
    compress = zlib.compressobj(level)
    data = infile.read(1024)
    while data:
        dst.write(compress.compress(data))
        data = infile.read(1024)
    dst.write(compress.flush())
def decompress(infile, dst):
    infile = open(infile, 'rb')
    dst = open(dst, 'wb')
    decompress = zlib.decompressobj()
    data = infile.read(1024)
    while data:
        dst.write(decompress.decompress(data))
        data = infile.read(1024)
    dst.write(decompress.flush())

if __name__ == "__main__":
    #compress('in.txt', 'out.txt')
    decompress('zlib_out', 'out_decompress.txt')

原文: https://www.yuque.com/hxfqg9/misc/sun522