开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 3566|回复: 28
打印 上一主题 下一主题
收起左侧

[其它源码] 压缩炸弹(zipbomb)制作 修改汉化版(python代码开源)

[复制链接]
结帖率:0% (0/1)
跳转到指定楼层
楼主
发表于 2024-2-17 17:31:26 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式   山东省烟台市
分享源码
界面截图:
是否带模块: 纯源码
备注说明: -
zipbomb-generator-master.7z (203.8 KB, 下载次数: 17) zipbomb-generator-master.7z (203.8 KB, 下载次数: 20) 压缩炸弹(zipbomb)制作 修改汉化版(python代码开源)
脚本实现以及相应算法
1. CRC校验码的计算CRC(循环冗余检验)是一种常用于检测数据传输或存储后可能出现的错误的方法。在上述代码中,以下几个函数与CRC校验码的计算相关:
  • crc_combine:此函数用于组合两个独立计算的CRC校验码。在数学上,CRC的计算基于模2的多项式除法,而组合两个CRC校验码需要特殊的算法。该函数的内部实现可能采用了类似于矩阵的多项式快速乘法来计算CRC的组合。
  • crc_matrix_apply 和 memo_crc_matrix_repeated:这些函数与预先计算的CRC矩阵相关。矩阵在这里被用作一个转换表,用于加速CRC的计算过程。每一个位的变化都可以通过乘以一个矩阵来预计算,这样只需一次乘法运算就可以代替多次迭代计算。
2. ZIP文件生成逻辑在ZIP压缩的上下文中,这段代码处理文件的压缩,并将它们写入到ZIP文件结构中。主要相关的几个函数如下:
  • write_zip_no_overlap、write_zip_full_overlap、write_zip_quoted_overlap:这些函数是核心的ZIP文件写入函数。它们处理文件的不同“重叠”模式,用于构造ZIP文件时局部数据的排列方式。
    • "no_overlap" 模式下,每个文件在ZIP中是单独存储的;
    • "full_overlap" 模式下,文件在ZIP中共享某些数据块,可能是为了生成ZIP炸弹或测试ZIP处理程序的健壮性;
    • "quoted_overlap" 模式下则更复杂,它介于两者之间,允许某些但不是全部的数据块重叠。
      每个函数都有其内部算法,它们涉及到二进制数据流的操作和按需组织这些数据以满足特定的压缩或文件组织要求。这涉及到了算法设计、数据结构和文件格式编解码的高级概念。
      数学过程主要体现在数据的组织和变换上。例如,管理中央目录结构(一种索引,包含ZIP内所有文件的参考信息)需要对文件偏移进行精确计算,而这需要数学上精确的算法来保证文件的正确引导和提取。
      本质上,上述代码段中的算法实现和数学过程大量涉及到位操作、数据压缩理论、多项式数学和数据结构的处理,来确保ZIP文件的结构正确,数据不会损坏,且能够按照预期解压缩。
数据压缩理论数据压缩主要分为两种:无损压缩和有损压缩。无损压缩允许原始数据从压缩数据中完美地恢复,而有损压缩不行。DEFLATE算法是一种结合了LZ77算法和哈夫曼编码的无损数据压缩算法,并且是ZIP压缩的核心。压缩过程基于找出数据中的重复内容,并用更短的引用替代它们。
多项式数学CRC校验码的生成可以看作是对数据块进行多项式表示,并将其除以一个固定的生成多项式(通常是预定义的),余数即为CRC校验码。这是一种在有限域(通常是GF(2)域,即二进制数)上的除法运算。
数据结构在压缩和处理文件时,我们操作的是如数组、链表、栈、队列以及树这样的数据结构。这些结构允许我们以有组织的方式存储和检索信息。在上述的脚本中,可能使用了树状结构来存储路径和文件位置,或是用哈希表来快速查找数据。
算法设计创建ZIP文件涉及多个算法,包括文件压缩、CRC校验、文件组织、目录索引构造等。所有这些都需要精心设计算法,并且要高效且占用最小的内存空间。
文件格式文件格式(如ZIP)涉及到一系列的规范,它们定义了如何组织并在文件中存储数据。ZIP文件格式具有明确的结构,包括文件头、中央目录和目录结尾记录。每个组成部分都有确定的偏移量和大小,这需要精密地根据格式规范进行编码。
矩阵计算在CRC的计算中,矩阵用于代表数据块,并用于快速计算CRC值。例如,在组合两个序列的CRC时,预先计算的矩阵(代表了序列对应的多项式)可以用来快速实现组合。
数据块和文件偏移数据块是文件数据存储和处理的基本单位。每个文件块在ZIP文件中占据一定长度的空间,并有一个偏移量标识其在文件中的位置。文件中的数据块可以是连续的也可以重叠,这取决于压缩算法的实现。
数学实现过程和算法理论
  • 文件名生成逻辑 (filename_for_index 函数):
    • 使用指定的字符集 (FILENAME_ALPHABET),根据文件索引号生成文件名,依据类似与进制转换的数学逻辑;
    • 对名称进行变换,以保证多次调用时生成不同的文件名;
    • 支持多参数和随机选择名称成分。
  • CRC校验码的计算 (crc_combine, crc_matrix_apply, memo_crc_matrix_repeated 函数):
    • crc_combine 函数用于合并两个CRC校验码,逻辑上相当于CRC校验码的附加算法;
    • crc_matrix_apply 函数应用CRC矩阵计算结果;
    • memo_crc_matrix_repeated 函数是对计算的CRC矩阵结果进行缓存,以避免计算相同数值时的重复工作。
  • ZIP文件生成逻辑 (write_zip_no_overlap, write_zip_full_overlap, write_zip_quoted_overlap 函数):
    • 这几个函数负责生成不同类型的ZIP文件,比如无重叠、完全重叠和引用重叠;
    • 使用DEFLATE或BZIP2算法(取决于用户的输入参数)进行文件的压缩;
    • 用额外字段和引用模块来增加文件的复杂性,这通常是生成ZIP炸弹(一个小的ZIP文件解压开后非常大,有时用于测试或恶意目的)的技术。
  • 进度条显示及配色 (display_running_time 函数):
    • 根据代码执行的进度动态显示进度条,实现了一个色彩渐变的效果,这涉及到渐变的数学模型和颜色编码的知识。
      每个功能和其内部逻辑都相当特定,设计用来处理文件和压缩数据。这段代码的数学逻辑大部分集中在文件名生成以及CRC校验码的计算上。CRC的计算是一个复杂的数学过程,它包含了线性代数(使用矩阵运算计算CRC校验和),并在写入Zip文件时被用来确保数据的完整性。创建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

评分

参与人数 2精币 +3 收起 理由
財財 + 1 感谢分享,很给力!~
光影魔术 + 2 很赞同,谢谢!

查看全部评分


本帖被以下淘专辑推荐:

  • · 收藏|主题: 280, 订阅: 6
29
发表于 2025-5-6 02:11:26 | 只看该作者   江苏省扬州市

感谢分享,支持开源!!!
回复 支持 反对

使用道具 举报

28
发表于 2025-4-7 20:15:29 | 只看该作者   四川省成都市
感谢分享

补充内容 (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错
回复 支持 反对

使用道具 举报

结帖率:60% (3/5)

签到天数: 4 天

27
发表于 2024-10-10 09:22:56 | 只看该作者   山西省太原市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

结帖率:100% (4/4)

签到天数: 15 天

26
发表于 2024-5-16 08:27:46 | 只看该作者   山东省淄博市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:93% (13/14)
25
发表于 2024-2-23 17:05:33 | 只看该作者   湖北省武汉市
        感谢分享,很给力!~
回复 支持 反对

使用道具 举报

签到天数: 1 天

24
发表于 2024-2-23 01:18:23 | 只看该作者   福建省福州市
感谢大神分享~!
回复 支持 反对

使用道具 举报

签到天数: 3 天

23
发表于 2024-2-22 13:49:21 | 只看该作者   天津市天津市
谢谢分享
回复 支持 反对

使用道具 举报

签到天数: 8 天

22
发表于 2024-2-21 10:28:58 | 只看该作者   湖南省永州市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:100% (3/3)

签到天数: 14 天

21
发表于 2024-2-21 00:59:04 | 只看该作者   广东省深圳市
学习一下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:[email protected]
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表