精易论坛

标题: 压缩炸弹(zipbomb)制作 修改汉化版(python代码开源) [打印本页]

作者: ploneljs    时间: 2024-2-17 17:31
标题: 压缩炸弹(zipbomb)制作 修改汉化版(python代码开源)
zipbomb-generator-master.7z (203.8 KB, 下载次数: 18) zipbomb-generator-master.7z (203.8 KB, 下载次数: 22) 压缩炸弹(zipbomb)制作 修改汉化版(python代码开源)
脚本实现以及相应算法
1. CRC校验码的计算CRC(循环冗余检验)是一种常用于检测数据传输或存储后可能出现的错误的方法。在上述代码中,以下几个函数与CRC校验码的计算相关:
2. ZIP文件生成逻辑在ZIP压缩的上下文中,这段代码处理文件的压缩,并将它们写入到ZIP文件结构中。主要相关的几个函数如下:
数据压缩理论数据压缩主要分为两种:无损压缩和有损压缩。无损压缩允许原始数据从压缩数据中完美地恢复,而有损压缩不行。DEFLATE算法是一种结合了LZ77算法和哈夫曼编码的无损数据压缩算法,并且是ZIP压缩的核心。压缩过程基于找出数据中的重复内容,并用更短的引用替代它们。
多项式数学CRC校验码的生成可以看作是对数据块进行多项式表示,并将其除以一个固定的生成多项式(通常是预定义的),余数即为CRC校验码。这是一种在有限域(通常是GF(2)域,即二进制数)上的除法运算。
数据结构在压缩和处理文件时,我们操作的是如数组、链表、栈、队列以及树这样的数据结构。这些结构允许我们以有组织的方式存储和检索信息。在上述的脚本中,可能使用了树状结构来存储路径和文件位置,或是用哈希表来快速查找数据。
算法设计创建ZIP文件涉及多个算法,包括文件压缩、CRC校验、文件组织、目录索引构造等。所有这些都需要精心设计算法,并且要高效且占用最小的内存空间。
文件格式文件格式(如ZIP)涉及到一系列的规范,它们定义了如何组织并在文件中存储数据。ZIP文件格式具有明确的结构,包括文件头、中央目录和目录结尾记录。每个组成部分都有确定的偏移量和大小,这需要精密地根据格式规范进行编码。
矩阵计算在CRC的计算中,矩阵用于代表数据块,并用于快速计算CRC值。例如,在组合两个序列的CRC时,预先计算的矩阵(代表了序列对应的多项式)可以用来快速实现组合。
数据块和文件偏移数据块是文件数据存储和处理的基本单位。每个文件块在ZIP文件中占据一定长度的空间,并有一个偏移量标识其在文件中的位置。文件中的数据块可以是连续的也可以重叠,这取决于压缩算法的实现。
数学实现过程和算法理论在上述脚本实现中,文件压缩的过程涉及到通过文件扫描、模式标识、写入压缩代码,并使用压缩算法(如DEFLATE)来减少存储用量。文件格式处理涉及到根据ZIP规范生成文件的头部、目录和其它结构,并将文件内容按顺序编码进去。CRC校验码的计算则是通过将文件内容作为多项式系数,在特定的生成多项式下计算余数。矩阵计算用于校验码合并,通过矩阵操作来加速计算。计算文件偏移和数据块定位涉及到对数据结构的操作和数学上的计数,以确保数据被正确编码和定位。
这种类型的算法实现非常专业,涉及到大量的计算机科学与数学理论。为了具体实现这些功能,开发者需要对相应的编程语言、数据结构、算法和文件格式有深入的了解和实践经验。
关于脚本使用zipbomb是一个Python 3脚本,可以根据参数生成zip炸弹。例如:
python3 zipbomb --mode=quoted_overlap --num-files=250 --compressed-size=21179 > zbsm.zip
可以参见Makefile,获得如何使用它的一些例子。
optimize.R是一个R脚本,用于计算生成各种大小zip炸弹的最佳参数。optimize.out是optimize.R预生成的输出。
Rscript optimize.R | tee optimize.out
Makefile中看到的优化参数就是这样得到的。
ratio是一个Python 3脚本,用于计算命令行上列出的zip文件的压缩比。
$ make zbsm.zip zblg.zip zbxl.zip $ python3 ratio zbsm.zip zblg.zip zbxl.zip zbsm.zip 5461307620 / 42374 128883.45730872705 +51.102 dB zblg.zip 281395456244934 / 9893525 28442385.9286689 +74.54 dB zbxl.zip 4507981427706459 / 45876952 98262444.01996146 +79.924 dB
zipbomb使用说明必需的选项是你希望zip炸弹包含的文件数量,
--num-files=100
以及内核的大小,可以是特定的压缩大小,或者最大的未压缩大小。
--compressed-size=1000 --max-uncompressed-size=20000
脚本可以在三种主要模式下运行:
--mode=no_overlap --mode=full_overlap --mode=quoted_overlap (默认)
在quoted_overlap模式下,你可以额外启用额外字段引用;需要提供一个4位十六进制的标签类型:
--mode=quoted_overlap --extra=9999
在quoted_overlap模式下,你还可以指定尽可能引用更多后续的头文件,而不仅仅是一个。这会生成略大的输出文件大小,特别适用于你不受最大文件大小限制的情况(当操作在0xffffffff文件大小限制以下时,或者使用Zip64时)。
--mode=quoted_overlap --giant-steps
你可以选择DEFLATE或bzip2作为压缩算法。
--algorithm=deflate (默认) --algorithm=bzip2
当使用bzip2时,有一些限制。如果在quoted_overlap模式下使用bzip2,你必须使用--extra,因为bzip2没有自己的本地文件头引用方式。并且当与bzip2一起使用时,--compressed-size的参数必须在模32下等于14。
启用Zip64支持,用于需要它的zip炸弹(超过0xfffe个文件或文件大于0xfffffffe字节)。如果输出需要Zip64但没有启用该选项,脚本将在某处崩溃。之所以不自动检测Zip64的需求,是因为作者想提前决定特定的zip炸弹是否应使用Zip64(并在计算错误时得到错误提示),而且在quoted_overlap模式下预测最大文件大小是否会超过阈值是相当微妙的(虽然optimize.R脚本会进行这样的计算)。
--zip64
默认的文件名字母表是0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ。你可以用--alphabet选项更改它。
--alphabet=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
如果你需要zip炸弹除了炸弹文件外还包含一些普通文件,你可以提供一个或多个模板zip文件。
--template=other.zip
zipbomb参数详细使用python zipbomb.py --h用法: zipbomb.py --num-files=N --compressed-size=N [OPTIONS...] > bomb.zip
zipbomb.py --num-files=N --max-uncompressed-size=N [OPTIONS...] > bomb.zip
--num-files 选项和 --compressed-size 或 --max-uncompressed-size 选项是必需的。
--algorithm=ALG ALG 可以是 "deflate"(默认)或 "bzip2" --alphabet=CHARS 用于构造文件名的字母表
--compressed-size=N 内核的压缩大小 --extra=HHHH 使用类型标签 0xHHHH 的额外字段引用
--giant-steps 尽可能引用尽可能多的标题,而不仅仅是一个
--max-uncompressed-size=N 内核的最大未压缩大小
--mode=MODE "no_overlap"、"full_overlap" 或 "quoted_overlap"(默认)
--num-files=N 要包含的文件数,不包括模板文件
--template=ZIP 包含其他文件存储在 zip 炸弹中以 zip 格式
--zip64 启用 Zip64 扩展 --dr=filename 与后面的输出文件名称要一致,用于显示解压缩率(名称要为路径)
--extension 设置zip文件中的后缀名(可以为多个格式为[名称1,名称2,名称3,名称4,...])
--mainname 设置文件名称的前缀(可以为多个格式为[名称1,名称2,名称3,名称4,...])
多个文件名称要用英文格式逗号进行分隔!!!使用截图(解压文件有风险,不要进行解压)file://C:%5CUsers%5Cljs%5CAppData%5CRoaming%5Cmarktext%5Cimages%5C2024-02-17-12-35-58-image.png?msec=1708144558840file://C:%5CUsers%5Cljs%5CAppData%5CRoaming%5Cmarktext%5Cimages%5C2024-02-17-12-36-46-image.png?msec=1708144606132
file://C:%5CUsers%5Cljs%5CAppData%5CRoaming%5Cmarktext%5Cimages%5C2024-02-17-12-37-32-image.png?msec=1708144652713file://C:%5CUsers%5Cljs%5CAppData%5CRoaming%5Cmarktext%5Cimages%5C2024-02-17-12-37-28-image.png?msec=1708144648548file://C:%5CUsers%5Cljs%5CAppData%5CRoaming%5Cmarktext%5Cimages%5C2024-02-17-12-37-21-image.png?msec=1708144641718
file://C:%5CUsers%5Cljs%5CAppData%5CRoaming%5Cmarktext%5Cimages%5C2024-02-17-12-37-53-image.png?msec=1708144673348
注意不要使用WinRAR进行打开,会卡死,目前测试bandzip可以打开,不要进行解压,避免磁盘爆炸上述理论数学论证分析由gpt进行提供,如有错误,欢迎指出如果产品存在bug,请告知作者作者qq:642599945该代码引用自GitHub开源项目,地址:GitHub - CreeperKong/zipbomb-generator: A simple zipbomb generator 压缩包炸弹生成器,并在其基础上增加了新的功能并增加了更多自定义选项,修改了部分生成bug,优化生成速度,增加进度条





VX图片_20240217172849.png (148.16 KB, 下载次数: 3)

VX图片_20240217172849.png

作者: ploneljs    时间: 2024-2-17 17:32
上面的附件两个一样,不要重复下载
作者: 447485268    时间: 2024-2-17 17:53
支持开源~!感谢分享
作者: shaokui123    时间: 2024-2-17 18:20
感谢分享
作者: shaokui123    时间: 2024-2-17 18:33
具体怎么使用?
作者: 放飞梦想321    时间: 2024-2-17 19:13
感谢分享
作者: 亿万    时间: 2024-2-17 20:23
开源精神必须支持~
作者: 大刀刃    时间: 2024-2-17 21:51
谢谢分享
作者: ploneljs    时间: 2024-2-17 22:13
shaokui123 发表于 2024-2-17 18:33
具体怎么使用?

附件里有demo

作者: 艾玛克138    时间: 2024-2-17 22:17
感谢老大的无私奉献!!!
作者: bianyuan456    时间: 2024-2-17 23:22
已经顶贴,感谢您对论坛的支持!
作者: 灵海雪缘    时间: 2024-2-17 23:32

作者: ZHuanR    时间: 2024-2-17 23:36
新技能已get√
作者: 光影魔术    时间: 2024-2-18 00:04
感谢分享
作者: 396384183    时间: 2024-2-18 00:06

支持开源~!感谢分享
作者: year1970    时间: 2024-2-18 08:01
感谢分享
作者: shaokui123    时间: 2024-2-18 13:47
ploneljs 发表于 2024-2-17 22:13
附件里有demo

一个批处理看到了,楼主能稍微指点下吗
作者: qq73s5456    时间: 2024-2-18 21:04
这是干嘛用的???
作者: 深圳梦    时间: 2024-2-19 20:57
支持开源~!感谢分享
作者: wuqingg    时间: 2024-2-20 08:37
感谢分享,很给力!~
作者: pipicool    时间: 2024-2-21 00:59
学习一下
作者: fengyyun    时间: 2024-2-21 10:28
感谢分享
作者: 1778263903w    时间: 2024-2-22 13:49
谢谢分享
作者: slmgive    时间: 2024-2-23 01:18
感谢大神分享~!
作者: KEY心碎    时间: 2024-2-23 17:05
        感谢分享,很给力!~
作者: year1970    时间: 2024-5-16 08:27
感谢分享
作者: dulang    时间: 2024-10-10 09:22
感谢分享,很给力!~
作者: n01se    时间: 2025-4-7 20:15
感谢分享

补充内容 (2025-4-8 14:09):
windows环境py 3.13.1运行会碰到编码错误问题,suspected = startname.encode('ansi', errors='ignore') + bytes(letters[::-1]) + endname.encode('ansi', errors='ignore')  会报一个encode错
作者: antoni    时间: 2025-5-6 02:11

感谢分享,支持开源!!!

作者: ploneljs    时间: 2025-6-11 09:11
n01se 发表于 2025-4-7 20:15
感谢分享

补充内容 (2025-4-8 14:09):

建议你换个版本试试。我用的好像是17,18





欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4