Skip to content
This repository has been archived by the owner on Dec 9, 2023. It is now read-only.

Commit

Permalink
feat: EroImgBlender v1.0 finished
Browse files Browse the repository at this point in the history
docs: add README.md about EroImgBlender, ImageMagick and UPX
  • Loading branch information
chinanoahli committed Aug 24, 2022
1 parent 9ca9e09 commit 64e408e
Show file tree
Hide file tree
Showing 8 changed files with 1,529 additions and 0 deletions.
637 changes: 637 additions & 0 deletions .gitignore

Large diffs are not rendered by default.

9 changes: 9 additions & 0 deletions Compile.cmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
@echo off

del Run.exe
pyinstaller Run.py --upx-dir=.\upx -y --onefile
move .\dist\Run.exe .
del Run.spec
rd /s /q .\build .\dist

pause
157 changes: 157 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
# 色图混淆器

这是一个可以以**随机顺序**打乱并重组图片的小工具

众所周知,最近国内最大的两个邪恶IM软件的内置检测越来越严重,很多色图都被针对了

苦于发色图容易被系统自动撤回,或被内鬼举报封号

于是就蛋疼地用Python开发了这个小工具

## 注意事项

1. 在使用本工具处理图片后,记得在分享图片的同时,把生成的色图密码与本工具项目页面一同分享

2. 本工具使用GPLv3许可证进行开源,请所有需要二次开发、魔改的用户注意必须以同等的程度开放源码

3. 傻瓜包中包含[ImageMagick](https://imagemagick.org/script/index.php),在二次开发或再发行时,请务必遵守它开发团队的的[许可证](https://github.com/ImageMagick/ImageMagick/blob/main/LICENSE)

## 使用方法

1. 下载傻瓜包

1. 进入[Releases](https://github.com/chinanoahli/Ero_Img_Blender/releases)页面下载

2. 解压傻瓜包到任意目录<sub>(推荐路径中不要包含中文和空格,虽然有应该也是不影响的)</sub>

3. 把要混淆或解密的图片放置到`input_imgs`文件夹中

4. 运行`Run.exe`

5. 根据提示立即开冲

2. 手动建立运行环境

1. 安装*Python 3.10*,以及下列*pip*

+ Pillow==9.2.0

+ pretty-errors==1.2.25

+ pyinstaller==5.2 (非必要,将py文件打包成exe用)

2. 下载[ImageMagick](https://imagemagick.org/script/download.php#windows)的可执行文件,解压并放置到`imagemagick`目录中,[点此查看说明](./imagemagick)

3. 运行`Run.py`即可

4. 如果你想要进行二次开发,并将py文件打包成单个exe文件,你可能需要UPX,[点此查看说明](./upx)

## 图解实现原理

下面以`3 x 3`的分块模式,色图密码为`5.3.8.4.6.2.0.7.1`,且省略拓展长和宽的情况进行进行举例:

1. 假设有下面一张图片

```
┌──────┬──────┬──────┐
│ 0 │ 1 │ 2 │
├──────┼──────┼──────┤
│ 3 │ 4 │ 5 │
├──────┼──────┼──────┤
│ 6 │ 7 │ 8 │
└──────┴──────┴──────┘
```

2. 首先,混淆器会将这张图片平均分割成`9`张小的图片

```
┌──────┐ ┌──────┐ ┌──────┐
│ 0 │ │ 1 │ │ 2 │
└──────┘ └──────┘ └──────┘
┌──────┐ ┌──────┐ ┌──────┐
│ 3 │ │ 4 │ │ 5 │
└──────┘ └──────┘ └──────┘
┌──────┐ ┌──────┐ ┌──────┐
│ 6 │ │ 7 │ │ 8 │
└──────┘ └──────┘ └──────┘
```

3. 接着,根据色图密码对图片进行重新排列

```
┌──────┐ ┌──────┐ ┌──────┐
│ 5 │ │ 3 │ │ 8 │
└──────┘ └──────┘ └──────┘
┌──────┐ ┌──────┐ ┌──────┐
│ 4 │ │ 6 │ │ 2 │
└──────┘ └──────┘ └──────┘
┌──────┐ ┌──────┐ ┌──────┐
│ 0 │ │ 7 │ │ 1 │
└──────┘ └──────┘ └──────┘
```

4. 最后,将图片以重排后的顺序组合起来

```
┌──────┬──────┬──────┐
│ 5 │ 3 │ 8 │
├──────┼──────┼──────┤
│ 3 │ 6 │ 2 │
├──────┼──────┼──────┤
│ 0 │ 7 │ 1 │
└──────┴──────┴──────┘
```

5. 而解密器的顺序则是逆向的,从第4步开始,逆向走向第1步

6. 更详细的实现原理请参考下面的「实现原理」

## 实现原理

1. 混淆部分

1. 首先,混淆器会先根据用户选择的分块数量生成一个随机序列<sup>\*</sup>

<sub>如:用户选择了将图片分层`3 x 3`块,那么程序就会生成一个包含数字`0 ~ 9`随机序列</sub>

<sub>假设:随机序列为`5.3.8.4.6.2.0.7.1`</sub>

2. 接着混淆器会计算图片的****,是否可以被等分成**3份**,如果不可以,就会对长或宽(或同时)进行**扩展**<sub>(非拉伸)</sub>,扩展的部分为黑色填充,这样做是为了防止[ImageMagick](https://imagemagick.org/script/index.php)在恢复时无法准确找到切分点

<sub>假设:宽无需扩展,而高拓展了*2px*</sub>

3. 同时,长和宽扩展的像素数量会被存入*色图密码*的头两节中,也就是色图密码开头的`RxBx`

<sub>经过上面两步处理,就可以组合出色图密码`R0.B2.5.3.8.4.6.2.0.7.1`</sub>

4. 然后,混淆器会调用[ImageMagick](https://imagemagick.org/script/index.php)对图像进行`3 x 3`的分割

5. 最后,混淆器会根据随机数序列的顺序,选取已分割的图片进行拼接,就可以得出混淆后的图片

<sub>假设采用上面的序列的话,那么拼接时,第1张将会是序号为`5`的图片,第2张将会是序号为`3`的图片,依此类推</sub>

\*. 随机序列每次混淆成都会重新生成,所以同一张图片多混淆几次也不会是同一个结果

2. 解密部分

1. 在选择需要解密的图片后,解密器会要求用户输入*色图密码*

2. 首先,解密器会从色图密码中提取混淆时生成的随机序列,以及图像宽和高的拓展像素

3. 其次,解密器会根据随机序列的长度,对图片进行分割

<sub>因为分块只有`3 x 3``4 x 4``5 x 5`三种选项,所以序列只能有9、16和25位</sub>

4. 接着,解密器会根据色图密码生成用于解密的解密序列

<sub>假设:用上面混淆部分生成的随机序列作为举例:</sub>

<sub>1. 我们可以看到,原本处于第`0`号的分块被放在随机序列的第`6`位,为了还原图片,需要先取出这个分块,所以解密序列的第1个数应该为`6`</sub>

<sub>2. 第`1`号的很快被放在随机序列的第`8`位,所以解密序列的第2个数应该为`8`</sub>

<sub>3. 依此类推,就可以得出完整的解密序列`6.8.5.1.3.0.4.7.2`</sub>

5. 然后,解密器会根据解密序列,对图片进行拼接

6. 最后,解密器会根据色图密码中的`RxBx`对图片进行裁剪,消去混淆器增加的黑色填充
5 changes: 5 additions & 0 deletions Run.cmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
@echo off

python .\Run.py

pause
Loading

0 comments on commit 64e408e

Please sign in to comment.