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

Latest commit

 

History

History
157 lines (97 loc) · 7.14 KB

README.md

File metadata and controls

157 lines (97 loc) · 7.14 KB

色图混淆器

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

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

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

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

注意事项

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

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

  3. 傻瓜包中包含ImageMagick,在二次开发或再发行时,请务必遵守它开发团队的的许可证

使用方法

  1. 下载傻瓜包

    1. 进入Releases页面下载

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

    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的可执行文件,解压并放置到imagemagick目录中,点此查看说明

    3. 运行Run.py即可

    4. 如果你想要进行二次开发,并将py文件打包成单个exe文件,你可能需要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. 首先,混淆器会先根据用户选择的分块数量生成一个随机序列*

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

      假设:随机序列为5.3.8.4.6.2.0.7.1

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

      假设:宽无需扩展,而高拓展了2px

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

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

    4. 然后,混淆器会调用ImageMagick对图像进行3 x 3的分割

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

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

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

  2. 解密部分

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

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

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

      因为分块只有3 x 34 x 45 x 5三种选项,所以序列只能有9、16和25位

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

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

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

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

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

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

    6. 最后,解密器会根据色图密码中的RxBx对图片进行裁剪,消去混淆器增加的黑色填充