这是一个可以以随机顺序打乱并重组图片的小工具
众所周知,最近国内最大的两个邪恶IM软件的内置检测越来越严重,很多色图都被针对了
苦于发色图容易被系统自动撤回,或被内鬼举报封号
于是就蛋疼地用Python开发了这个小工具
-
在使用本工具处理图片后,记得在分享图片的同时,把生成的色图密码与本工具项目页面一同分享
-
本工具使用GPLv3许可证进行开源,请所有需要二次开发、魔改的用户注意必须以同等的程度开放源码
-
傻瓜包中包含ImageMagick,在二次开发或再发行时,请务必遵守它开发团队的的许可证
-
下载傻瓜包
-
进入Releases页面下载
-
解压傻瓜包到任意目录(推荐路径中不要包含中文和空格,虽然有应该也是不影响的)
-
把要混淆或解密的图片放置到
input_imgs
文件夹中 -
运行
Run.exe
-
根据提示立即开冲
-
-
手动建立运行环境
-
安装Python 3.10,以及下列pip包
-
Pillow==9.2.0
-
pretty-errors==1.2.25
-
pyinstaller==5.2 (非必要,将py文件打包成exe用)
-
-
下载ImageMagick的可执行文件,解压并放置到
imagemagick
目录中,点此查看说明 -
运行
Run.py
即可 -
如果你想要进行二次开发,并将py文件打包成单个exe文件,你可能需要UPX,点此查看说明
-
下面以3 x 3
的分块模式,色图密码为5.3.8.4.6.2.0.7.1
,且省略拓展长和宽的情况进行进行举例:
-
假设有下面一张图片
┌──────┬──────┬──────┐ │ 0 │ 1 │ 2 │ ├──────┼──────┼──────┤ │ 3 │ 4 │ 5 │ ├──────┼──────┼──────┤ │ 6 │ 7 │ 8 │ └──────┴──────┴──────┘
-
首先,混淆器会将这张图片平均分割成
9
张小的图片┌──────┐ ┌──────┐ ┌──────┐ │ 0 │ │ 1 │ │ 2 │ └──────┘ └──────┘ └──────┘ ┌──────┐ ┌──────┐ ┌──────┐ │ 3 │ │ 4 │ │ 5 │ └──────┘ └──────┘ └──────┘ ┌──────┐ ┌──────┐ ┌──────┐ │ 6 │ │ 7 │ │ 8 │ └──────┘ └──────┘ └──────┘
-
接着,根据色图密码对图片进行重新排列
┌──────┐ ┌──────┐ ┌──────┐ │ 5 │ │ 3 │ │ 8 │ └──────┘ └──────┘ └──────┘ ┌──────┐ ┌──────┐ ┌──────┐ │ 4 │ │ 6 │ │ 2 │ └──────┘ └──────┘ └──────┘ ┌──────┐ ┌──────┐ ┌──────┐ │ 0 │ │ 7 │ │ 1 │ └──────┘ └──────┘ └──────┘
-
最后,将图片以重排后的顺序组合起来
┌──────┬──────┬──────┐ │ 5 │ 3 │ 8 │ ├──────┼──────┼──────┤ │ 3 │ 6 │ 2 │ ├──────┼──────┼──────┤ │ 0 │ 7 │ 1 │ └──────┴──────┴──────┘
-
而解密器的顺序则是逆向的,从第4步开始,逆向走向第1步
-
更详细的实现原理请参考下面的「实现原理」
-
混淆部分
-
首先,混淆器会先根据用户选择的分块数量生成一个随机序列*
如:用户选择了将图片分层
3 x 3
块,那么程序就会生成一个包含数字0 ~ 9
随机序列假设:随机序列为
5.3.8.4.6.2.0.7.1
-
接着混淆器会计算图片的宽和高,是否可以被等分成3份,如果不可以,就会对长或宽(或同时)进行扩展(非拉伸),扩展的部分为黑色填充,这样做是为了防止ImageMagick在恢复时无法准确找到切分点
假设:宽无需扩展,而高拓展了2px
-
同时,长和宽扩展的像素数量会被存入色图密码的头两节中,也就是色图密码开头的
RxBx
经过上面两步处理,就可以组合出色图密码
R0.B2.5.3.8.4.6.2.0.7.1
-
然后,混淆器会调用ImageMagick对图像进行
3 x 3
的分割 -
最后,混淆器会根据随机数序列的顺序,选取已分割的图片进行拼接,就可以得出混淆后的图片
假设采用上面的序列的话,那么拼接时,第1张将会是序号为
5
的图片,第2张将会是序号为3
的图片,依此类推*. 随机序列每次混淆成都会重新生成,所以同一张图片多混淆几次也不会是同一个结果
-
-
解密部分
-
在选择需要解密的图片后,解密器会要求用户输入色图密码
-
首先,解密器会从色图密码中提取混淆时生成的随机序列,以及图像宽和高的拓展像素
-
其次,解密器会根据随机序列的长度,对图片进行分割
因为分块只有
3 x 3
、4 x 4
和5 x 5
三种选项,所以序列只能有9、16和25位 -
接着,解密器会根据色图密码生成用于解密的解密序列
假设:用上面混淆部分生成的随机序列作为举例:
1. 我们可以看到,原本处于第
0
号的分块被放在随机序列的第6
位,为了还原图片,需要先取出这个分块,所以解密序列的第1个数应该为6
2. 第
1
号的很快被放在随机序列的第8
位,所以解密序列的第2个数应该为8
3. 依此类推,就可以得出完整的解密序列
6.8.5.1.3.0.4.7.2
-
然后,解密器会根据解密序列,对图片进行拼接
-
最后,解密器会根据色图密码中的
RxBx
对图片进行裁剪,消去混淆器增加的黑色填充
-