Name | corrupter JSON |
Version |
1.1.0
JSON |
| download |
home_page | None |
Summary | 一个简洁而强大的文件损坏模拟器。 |
upload_time | 2025-07-26 03:28:31 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.6 |
license | Copyright 2025 miaonya
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
keywords |
corrupt
file
glitch
testing
simulation
binary
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# Corrupter
**一个简洁而强大的文件损坏模拟器。**
Corrupter 是一个用 Python 编写的命令行工具,旨在精确、可复现地模拟各种文件损坏场景。无论您是需要测试数据的鲁棒性,还是想创造独特的“故障艺术”(Glitch Art),Corrupter 都能为您提供强大而灵活的支持。
[](https://badge.fury.io/py/corrupter)
[](https://opensource.org/licenses/MIT)
[]()
## 核心特性
* **多种损坏模式**:
* 替换模式 (默认): 随机替换文件中的字节。
* 翻转模式: 随机翻转字节中的一个比特位,进行更精细、更隐蔽的损坏。
* 置零模式: 将字节随机置为零,模拟数据丢失。
* 撕裂模式: 连续损坏多个字节,模拟物理介质划痕或数据块传输错误。
* **精确损坏控制**: 可精确设置每个字节被损坏的概率。
* **结果可复现**: 可设置种子以确保可复现每次损坏。
* **流处理支持**: 完全支持 `stdin` 和 `stdout`,可无缝集成到命令行管道中。
* **用户友好**: 实时进度条、任务总结报告和清晰的帮助信息。
* **安全第一**: 绝不覆盖源文件,防止意外数据丢失。
* **高效性能**: 即使是 GB 级的大文件也能轻松处理。
* **零依赖**: 仅需 Python 3 标准库。
* **经过单元测试**: 核心功能拥有全面的测试套件,保证了其稳定性和可靠性。
## 安装
您可以通过 `pip` 轻松安装 Corrupter:
```bash
pip install corrupter
```
安装完成后,`corrupter` 命令将立即可用。
**备选方法 (手动安装):**
如果您不想通过 `pip` 安装,也可以直接下载 `corrupter.py` 脚本,并使用 `python` 运行它。
## 使用方法
### 基本语法
```bash
corrupter [OPTIONS] <input_file> [output_file]
```
### 参数详解
#### 位置参数:
* `input_file`: 要损坏的源文件路径。
* 使用 **`-`** 从标准输入 (stdin) 读取。
* `output_file` (可选): 输出文件路径。
* 如果省略,将自动生成一个带 `_corrupted` 后缀的文件名。
* 使用 **`-`** 写入标准输出 (stdout)。
* **注意**: 当输入为 stdin (`-`) 时,必须指定此参数。
#### 选项:
* `-p, --probability <FLOAT>`: 设置目标字节损坏率(例如: `0.01` 代表 1%)。默认值: `0.00001`。
* `-s, --seed <INTEGER>`: 设置随机数生成器的种子,用于复现结果。
* `-q, --quiet`: 静默模式,不打印进度和总结信息。非常适合在脚本中使用。
* `-h, --help`: 显示帮助信息并退出。
#### 损坏模式 (互斥选项):
* `-b, --bitflip`: **翻转模式**:随机翻转字节中的一个比特位。
* `-z, --zero`: **置零模式**:随机将字节置为零。
* `--burst <N>`: **撕裂模式**:触发时,连续损坏 `N` 个字节。
* 如果未指定任何模式,将默认使用**替换模式**。
---
## 示例
#### 1. 基本损坏
损坏一个图片文件,自动生成输出文件名。
```bash
corrupter photo.jpg --probability 0.001
# 将会创建 photo_corrupted.jpg
```
#### 2. 创造故障艺术 (Glitch Art)
使用 `bitflip` 模式和固定的种子,对图片进行轻微、可复现的损坏。
```bash
corrupter artwork.png artwork_glitched.png -b -p 0.0005 --seed 1337
```
#### 3. 模拟磁盘划痕
使用 `burst` 模式,模拟一个 8KB 的连续数据块损坏。
```bash
# 目标损坏率为 5%,撕裂长度为 8192 字节
corrupter data.zip corrupted_data.zip --burst 8192 -p 0.05
```
#### 4. 使用管道进行流式处理
这是 Corrupter 最强大的功能之一。无需创建临时文件即可完成复杂任务。
**a) 损坏一个文件并通过管道传递给 `hexdump` 查看:**
```bash
corrupter my_program.exe - -b -p 0.01 | hexdump -C | head -n 20
```
**b) 从 `dd` 生成随机数据,损坏后保存到文件:**
```bash
# 生成 10MB 的随机数据,通过管道损坏后存盘
dd if=/dev/urandom bs=1M count=10 | corrupter - corrupted_random.dat -p 0.1
```
**c) 在自动化脚本中静默运行:**
```bash
#!/bin/bash
INPUT_FILE="archive.tar.gz"
CORRUPTED_FILE="test_archive.tar.gz"
echo "Creating corrupted archive for testing..."
# 使用 -q 选项,不会有任何非错误信息打印到控制台
corrupter "$INPUT_FILE" "$CORRUPTED_FILE" -q --burst 4096 -p 0.05 --seed 42
echo "Running recovery test on $CORRUPTED_FILE..."
# ./my_recovery_tool "$CORRUPTED_FILE"
```
## 开发与测试
本项目包含一个完整的单元测试套件,以确保核心功能的稳定性和正确性。
要克隆仓库并运行测试,请执行:
```bash
git clone https://github.com/miaonya520/corrupter.git
cd corrupter
python -m unittest tests/test_corrupter.py
```
## 版权与许可
~~Copyright (c) 2025 DEXTRO Inc. All rights reserved.~~(注:DEXTRO Inc.非真实公司,仅供娱乐,如有雷同,纯属巧合)
由 miaonya 制作。
本项目采用[MIT 许可证](https://opensource.org/licenses/MIT)授权。
Raw data
{
"_id": null,
"home_page": null,
"name": "corrupter",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": null,
"keywords": "corrupt, file, glitch, testing, simulation, binary",
"author": null,
"author_email": "miaonya <star2022520@outlook.com>",
"download_url": "https://files.pythonhosted.org/packages/b2/2e/8408fbb50a8bc6b5d99e03030f9db5ebb2f8ce2236ebdddbeae22d8afd42/corrupter-1.1.0.tar.gz",
"platform": null,
"description": "# Corrupter\n\n**\u4e00\u4e2a\u7b80\u6d01\u800c\u5f3a\u5927\u7684\u6587\u4ef6\u635f\u574f\u6a21\u62df\u5668\u3002**\n\nCorrupter \u662f\u4e00\u4e2a\u7528 Python \u7f16\u5199\u7684\u547d\u4ee4\u884c\u5de5\u5177\uff0c\u65e8\u5728\u7cbe\u786e\u3001\u53ef\u590d\u73b0\u5730\u6a21\u62df\u5404\u79cd\u6587\u4ef6\u635f\u574f\u573a\u666f\u3002\u65e0\u8bba\u60a8\u662f\u9700\u8981\u6d4b\u8bd5\u6570\u636e\u7684\u9c81\u68d2\u6027\uff0c\u8fd8\u662f\u60f3\u521b\u9020\u72ec\u7279\u7684\u201c\u6545\u969c\u827a\u672f\u201d\uff08Glitch Art\uff09\uff0cCorrupter \u90fd\u80fd\u4e3a\u60a8\u63d0\u4f9b\u5f3a\u5927\u800c\u7075\u6d3b\u7684\u652f\u6301\u3002\n\n[](https://badge.fury.io/py/corrupter)\n[](https://opensource.org/licenses/MIT)\n[]()\n\n## \u6838\u5fc3\u7279\u6027\n\n* **\u591a\u79cd\u635f\u574f\u6a21\u5f0f**:\n * \u66ff\u6362\u6a21\u5f0f (\u9ed8\u8ba4): \u968f\u673a\u66ff\u6362\u6587\u4ef6\u4e2d\u7684\u5b57\u8282\u3002\n * \u7ffb\u8f6c\u6a21\u5f0f: \u968f\u673a\u7ffb\u8f6c\u5b57\u8282\u4e2d\u7684\u4e00\u4e2a\u6bd4\u7279\u4f4d\uff0c\u8fdb\u884c\u66f4\u7cbe\u7ec6\u3001\u66f4\u9690\u853d\u7684\u635f\u574f\u3002\n * \u7f6e\u96f6\u6a21\u5f0f: \u5c06\u5b57\u8282\u968f\u673a\u7f6e\u4e3a\u96f6\uff0c\u6a21\u62df\u6570\u636e\u4e22\u5931\u3002\n * \u6495\u88c2\u6a21\u5f0f: \u8fde\u7eed\u635f\u574f\u591a\u4e2a\u5b57\u8282\uff0c\u6a21\u62df\u7269\u7406\u4ecb\u8d28\u5212\u75d5\u6216\u6570\u636e\u5757\u4f20\u8f93\u9519\u8bef\u3002\n* **\u7cbe\u786e\u635f\u574f\u63a7\u5236**: \u53ef\u7cbe\u786e\u8bbe\u7f6e\u6bcf\u4e2a\u5b57\u8282\u88ab\u635f\u574f\u7684\u6982\u7387\u3002\n* **\u7ed3\u679c\u53ef\u590d\u73b0**: \u53ef\u8bbe\u7f6e\u79cd\u5b50\u4ee5\u786e\u4fdd\u53ef\u590d\u73b0\u6bcf\u6b21\u635f\u574f\u3002\n* **\u6d41\u5904\u7406\u652f\u6301**: \u5b8c\u5168\u652f\u6301 `stdin` \u548c `stdout`\uff0c\u53ef\u65e0\u7f1d\u96c6\u6210\u5230\u547d\u4ee4\u884c\u7ba1\u9053\u4e2d\u3002\n* **\u7528\u6237\u53cb\u597d**: \u5b9e\u65f6\u8fdb\u5ea6\u6761\u3001\u4efb\u52a1\u603b\u7ed3\u62a5\u544a\u548c\u6e05\u6670\u7684\u5e2e\u52a9\u4fe1\u606f\u3002\n* **\u5b89\u5168\u7b2c\u4e00**: \u7edd\u4e0d\u8986\u76d6\u6e90\u6587\u4ef6\uff0c\u9632\u6b62\u610f\u5916\u6570\u636e\u4e22\u5931\u3002\n* **\u9ad8\u6548\u6027\u80fd**: \u5373\u4f7f\u662f GB \u7ea7\u7684\u5927\u6587\u4ef6\u4e5f\u80fd\u8f7b\u677e\u5904\u7406\u3002\n* **\u96f6\u4f9d\u8d56**: \u4ec5\u9700 Python 3 \u6807\u51c6\u5e93\u3002\n* **\u7ecf\u8fc7\u5355\u5143\u6d4b\u8bd5**: \u6838\u5fc3\u529f\u80fd\u62e5\u6709\u5168\u9762\u7684\u6d4b\u8bd5\u5957\u4ef6\uff0c\u4fdd\u8bc1\u4e86\u5176\u7a33\u5b9a\u6027\u548c\u53ef\u9760\u6027\u3002\n\n## \u5b89\u88c5\n\n\u60a8\u53ef\u4ee5\u901a\u8fc7 `pip` \u8f7b\u677e\u5b89\u88c5 Corrupter\uff1a\n\n```bash\npip install corrupter\n```\n\u5b89\u88c5\u5b8c\u6210\u540e\uff0c`corrupter` \u547d\u4ee4\u5c06\u7acb\u5373\u53ef\u7528\u3002\n\n**\u5907\u9009\u65b9\u6cd5 (\u624b\u52a8\u5b89\u88c5):**\n\u5982\u679c\u60a8\u4e0d\u60f3\u901a\u8fc7 `pip` \u5b89\u88c5\uff0c\u4e5f\u53ef\u4ee5\u76f4\u63a5\u4e0b\u8f7d `corrupter.py` \u811a\u672c\uff0c\u5e76\u4f7f\u7528 `python` \u8fd0\u884c\u5b83\u3002\n\n## \u4f7f\u7528\u65b9\u6cd5\n\n### \u57fa\u672c\u8bed\u6cd5\n```bash\ncorrupter [OPTIONS] <input_file> [output_file]\n```\n\n### \u53c2\u6570\u8be6\u89e3\n\n#### \u4f4d\u7f6e\u53c2\u6570:\n* `input_file`: \u8981\u635f\u574f\u7684\u6e90\u6587\u4ef6\u8def\u5f84\u3002\n * \u4f7f\u7528 **`-`** \u4ece\u6807\u51c6\u8f93\u5165 (stdin) \u8bfb\u53d6\u3002\n* `output_file` (\u53ef\u9009): \u8f93\u51fa\u6587\u4ef6\u8def\u5f84\u3002\n * \u5982\u679c\u7701\u7565\uff0c\u5c06\u81ea\u52a8\u751f\u6210\u4e00\u4e2a\u5e26 `_corrupted` \u540e\u7f00\u7684\u6587\u4ef6\u540d\u3002\n * \u4f7f\u7528 **`-`** \u5199\u5165\u6807\u51c6\u8f93\u51fa (stdout)\u3002\n * **\u6ce8\u610f**: \u5f53\u8f93\u5165\u4e3a stdin (`-`) \u65f6\uff0c\u5fc5\u987b\u6307\u5b9a\u6b64\u53c2\u6570\u3002\n\n#### \u9009\u9879:\n* `-p, --probability <FLOAT>`: \u8bbe\u7f6e\u76ee\u6807\u5b57\u8282\u635f\u574f\u7387\uff08\u4f8b\u5982: `0.01` \u4ee3\u8868 1%\uff09\u3002\u9ed8\u8ba4\u503c: `0.00001`\u3002\n* `-s, --seed <INTEGER>`: \u8bbe\u7f6e\u968f\u673a\u6570\u751f\u6210\u5668\u7684\u79cd\u5b50\uff0c\u7528\u4e8e\u590d\u73b0\u7ed3\u679c\u3002\n* `-q, --quiet`: \u9759\u9ed8\u6a21\u5f0f\uff0c\u4e0d\u6253\u5370\u8fdb\u5ea6\u548c\u603b\u7ed3\u4fe1\u606f\u3002\u975e\u5e38\u9002\u5408\u5728\u811a\u672c\u4e2d\u4f7f\u7528\u3002\n* `-h, --help`: \u663e\u793a\u5e2e\u52a9\u4fe1\u606f\u5e76\u9000\u51fa\u3002\n\n#### \u635f\u574f\u6a21\u5f0f (\u4e92\u65a5\u9009\u9879):\n* `-b, --bitflip`: **\u7ffb\u8f6c\u6a21\u5f0f**\uff1a\u968f\u673a\u7ffb\u8f6c\u5b57\u8282\u4e2d\u7684\u4e00\u4e2a\u6bd4\u7279\u4f4d\u3002\n* `-z, --zero`: **\u7f6e\u96f6\u6a21\u5f0f**\uff1a\u968f\u673a\u5c06\u5b57\u8282\u7f6e\u4e3a\u96f6\u3002\n* `--burst <N>`: **\u6495\u88c2\u6a21\u5f0f**\uff1a\u89e6\u53d1\u65f6\uff0c\u8fde\u7eed\u635f\u574f `N` \u4e2a\u5b57\u8282\u3002\n* \u5982\u679c\u672a\u6307\u5b9a\u4efb\u4f55\u6a21\u5f0f\uff0c\u5c06\u9ed8\u8ba4\u4f7f\u7528**\u66ff\u6362\u6a21\u5f0f**\u3002\n\n---\n\n## \u793a\u4f8b\n\n#### 1. \u57fa\u672c\u635f\u574f\n\u635f\u574f\u4e00\u4e2a\u56fe\u7247\u6587\u4ef6\uff0c\u81ea\u52a8\u751f\u6210\u8f93\u51fa\u6587\u4ef6\u540d\u3002\n```bash\ncorrupter photo.jpg --probability 0.001\n# \u5c06\u4f1a\u521b\u5efa photo_corrupted.jpg\n```\n\n#### 2. \u521b\u9020\u6545\u969c\u827a\u672f (Glitch Art)\n\u4f7f\u7528 `bitflip` \u6a21\u5f0f\u548c\u56fa\u5b9a\u7684\u79cd\u5b50\uff0c\u5bf9\u56fe\u7247\u8fdb\u884c\u8f7b\u5fae\u3001\u53ef\u590d\u73b0\u7684\u635f\u574f\u3002\n```bash\ncorrupter artwork.png artwork_glitched.png -b -p 0.0005 --seed 1337\n```\n\n#### 3. \u6a21\u62df\u78c1\u76d8\u5212\u75d5\n\u4f7f\u7528 `burst` \u6a21\u5f0f\uff0c\u6a21\u62df\u4e00\u4e2a 8KB \u7684\u8fde\u7eed\u6570\u636e\u5757\u635f\u574f\u3002\n```bash\n# \u76ee\u6807\u635f\u574f\u7387\u4e3a 5%\uff0c\u6495\u88c2\u957f\u5ea6\u4e3a 8192 \u5b57\u8282\ncorrupter data.zip corrupted_data.zip --burst 8192 -p 0.05\n```\n\n#### 4. \u4f7f\u7528\u7ba1\u9053\u8fdb\u884c\u6d41\u5f0f\u5904\u7406\n\u8fd9\u662f Corrupter \u6700\u5f3a\u5927\u7684\u529f\u80fd\u4e4b\u4e00\u3002\u65e0\u9700\u521b\u5efa\u4e34\u65f6\u6587\u4ef6\u5373\u53ef\u5b8c\u6210\u590d\u6742\u4efb\u52a1\u3002\n\n**a) \u635f\u574f\u4e00\u4e2a\u6587\u4ef6\u5e76\u901a\u8fc7\u7ba1\u9053\u4f20\u9012\u7ed9 `hexdump` \u67e5\u770b\uff1a**\n```bash\ncorrupter my_program.exe - -b -p 0.01 | hexdump -C | head -n 20\n```\n\n**b) \u4ece `dd` \u751f\u6210\u968f\u673a\u6570\u636e\uff0c\u635f\u574f\u540e\u4fdd\u5b58\u5230\u6587\u4ef6\uff1a**\n```bash\n# \u751f\u6210 10MB \u7684\u968f\u673a\u6570\u636e\uff0c\u901a\u8fc7\u7ba1\u9053\u635f\u574f\u540e\u5b58\u76d8\ndd if=/dev/urandom bs=1M count=10 | corrupter - corrupted_random.dat -p 0.1\n```\n\n**c) \u5728\u81ea\u52a8\u5316\u811a\u672c\u4e2d\u9759\u9ed8\u8fd0\u884c\uff1a**\n```bash\n#!/bin/bash\nINPUT_FILE=\"archive.tar.gz\"\nCORRUPTED_FILE=\"test_archive.tar.gz\"\n\necho \"Creating corrupted archive for testing...\"\n# \u4f7f\u7528 -q \u9009\u9879\uff0c\u4e0d\u4f1a\u6709\u4efb\u4f55\u975e\u9519\u8bef\u4fe1\u606f\u6253\u5370\u5230\u63a7\u5236\u53f0\ncorrupter \"$INPUT_FILE\" \"$CORRUPTED_FILE\" -q --burst 4096 -p 0.05 --seed 42\n\necho \"Running recovery test on $CORRUPTED_FILE...\"\n# ./my_recovery_tool \"$CORRUPTED_FILE\"\n```\n\n## \u5f00\u53d1\u4e0e\u6d4b\u8bd5\n\n\u672c\u9879\u76ee\u5305\u542b\u4e00\u4e2a\u5b8c\u6574\u7684\u5355\u5143\u6d4b\u8bd5\u5957\u4ef6\uff0c\u4ee5\u786e\u4fdd\u6838\u5fc3\u529f\u80fd\u7684\u7a33\u5b9a\u6027\u548c\u6b63\u786e\u6027\u3002\n\n\u8981\u514b\u9686\u4ed3\u5e93\u5e76\u8fd0\u884c\u6d4b\u8bd5\uff0c\u8bf7\u6267\u884c\uff1a\n```bash\ngit clone https://github.com/miaonya520/corrupter.git\ncd corrupter\npython -m unittest tests/test_corrupter.py\n```\n\n## \u7248\u6743\u4e0e\u8bb8\u53ef\n\n~~Copyright (c) 2025 DEXTRO Inc. All rights reserved.~~\uff08\u6ce8\uff1aDEXTRO Inc.\u975e\u771f\u5b9e\u516c\u53f8\uff0c\u4ec5\u4f9b\u5a31\u4e50\uff0c\u5982\u6709\u96f7\u540c\uff0c\u7eaf\u5c5e\u5de7\u5408\uff09\n\n\u7531 miaonya \u5236\u4f5c\u3002\n\n\u672c\u9879\u76ee\u91c7\u7528[MIT \u8bb8\u53ef\u8bc1](https://opensource.org/licenses/MIT)\u6388\u6743\u3002\n",
"bugtrack_url": null,
"license": "Copyright 2025 miaonya\n \n Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \u201cSoftware\u201d), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n \n The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n \n THE SOFTWARE IS PROVIDED \u201cAS IS\u201d, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.",
"summary": "\u4e00\u4e2a\u7b80\u6d01\u800c\u5f3a\u5927\u7684\u6587\u4ef6\u635f\u574f\u6a21\u62df\u5668\u3002",
"version": "1.1.0",
"project_urls": {
"Homepage": "https://github.com/miaonya520/Corrupter"
},
"split_keywords": [
"corrupt",
" file",
" glitch",
" testing",
" simulation",
" binary"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "52218303b796065d99e3d129fdb173358e6f0cc52aea3ccd8c4191107ae5dc66",
"md5": "1ffca2361616f76dcecc820e6896b6ed",
"sha256": "2f90725b5d851819f48c77a96c7b35e97093a5f6f1a7ac443df1a359f2dc60c1"
},
"downloads": -1,
"filename": "corrupter-1.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "1ffca2361616f76dcecc820e6896b6ed",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6",
"size": 9209,
"upload_time": "2025-07-26T03:28:29",
"upload_time_iso_8601": "2025-07-26T03:28:29.769683Z",
"url": "https://files.pythonhosted.org/packages/52/21/8303b796065d99e3d129fdb173358e6f0cc52aea3ccd8c4191107ae5dc66/corrupter-1.1.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b22e8408fbb50a8bc6b5d99e03030f9db5ebb2f8ce2236ebdddbeae22d8afd42",
"md5": "f4fc14c49f2935ab7237253068296910",
"sha256": "c250d285073738f7fa8cca603cb89f82e6066011fdb45e6cc166fbca3afe68a8"
},
"downloads": -1,
"filename": "corrupter-1.1.0.tar.gz",
"has_sig": false,
"md5_digest": "f4fc14c49f2935ab7237253068296910",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 9868,
"upload_time": "2025-07-26T03:28:31",
"upload_time_iso_8601": "2025-07-26T03:28:31.650724Z",
"url": "https://files.pythonhosted.org/packages/b2/2e/8408fbb50a8bc6b5d99e03030f9db5ebb2f8ce2236ebdddbeae22d8afd42/corrupter-1.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-26 03:28:31",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "miaonya520",
"github_project": "Corrupter",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "corrupter"
}