本工具旨在尽可能减轻资源压缩、分享和解压的心智负担,无须多层压缩,无须设置过于复杂的密码,自动加密,自动混淆,一切从简!仅靠拖放、双击、输入密码即可完成一切操作。复杂的操作,交给计算机就好!
本工具开源免费,禁止用于任何商业及非法用途!对因违规使用本工具造成的任何后果,本工具的开发者将不承担任何责任,并保留一切解释权!
- 从dist或release中下载最新版本ResEncryptor.exe。
- 拖放你想加密压缩的文件或文件夹到此exe上。
- 设定一个密码,并写一段留言,根据需要选择压缩模式。
- 等待加密压缩完成。
- 分享时必须包括目录下的所有文件!
- 双击目录下的exe文件。
- 输入解压密码。
- 等待解压完成。
- 根据需要决定是否删除压缩包和exe文件(移入回收站)。
- Enjoy!
- 当用户将文件或文件夹拖放到exe图标上时,将开始扫描此文件或文件夹,获取文件数和总大小。
- 根据总大小,随机生成分卷数量,计算得到分卷大小,并加上随机增量。
- 注:由于7Z存在一定压缩比,因此此处计算的分卷数量仅供参考。
- 根据用户输入的密码、随机盐、当前时间戳,生成一个长达128位含大小写字母、数字的密码,有效避免各种暴力破解。
- 将上述随机盐、当前时间戳等数据保存到解密配置中,并根据不同情况,随机生成混淆数据。
- 调用7Z命令行工具,根据密码、分卷大小开始压缩,压缩包放在输出目录。压缩过程中同时加密文件名,避免任何明文暴露。
- 等待压缩完成。
- 将生成的首个压缩包(7z.001)文件的前随机N个字节原始文件头保存到解密配置中,并用随机二进制数据覆盖,从而混淆文件头。
- 将生成的最后一个压缩包(7z.00n)文件的尾部随机N个字节原始数据保存到解密配置中,并用随机二进制数据覆盖,从而混淆文件尾。
- 遍历生成的文件获取文件序列,先打乱顺序,然后使用下列规则重命名并生成映射关系的文件序列,将其保存到解密配置中。
- 0、随机大小写字母+数字(默认):此规则使用16~64位随机大小写字母+数字字符串来重命名文件。
- 1、随机英文单词:使用从英文词库中抽取1~3个单词,按照驼峰大小写规则组合来重命名文件。
- 2、数字顺序累加:使用从0开始并向上累加的数字来重命名文件。
- 3、字母顺序累加:使用从a开始并向上累加的26进制英文字母来重命名文件。
- 将解密EXE复制到输出目录。
- 根据不同模式,将进行如下处理:
- 0、多文件分卷模式(默认):将不进行任何处理。
- 1、单文件模式(小于4GB):将上述乱序后的文件数据按顺序写入解密EXE文件的末尾,并将文件对应的大小和偏移量写入上述映射关系中,以便解密时使用。
- 2、双文件模式:将上述乱序后的文件数据按顺序写入临时文件的末尾,并将文件对应的大小和偏移量写入上述映射关系中,以便解密时使用。最后将此临时文件重命名为序列中的首个文件的伪装文件名。
- 根据用户输入的密码,计算解密配置的密钥和IV。
- 使用上述密钥和IV,用AES进行随机次数迭代加密配置数据,以此来大幅降低暴力破解的效率。
- 随机生成不定长度的解密配置文件名,并随机生成8~255之间的随机数作为异或的KEY,并将解密配置文件名的每一位与它进行异或,得到异或后的解密文件名。
- 将解密配置文件、异或后解密文件名、异或KEY按顺序写入EXE文件的末尾。
- 清理掉不需要的临时文件。
- 加密操作完成。
- EXE运行时,根据范围遍历读取自身末尾N位字节,获取异或后的解密配置文件名、异或KEY,并将它还原回解密文件名。
- 查找并读取解密配置文件,询问用户密码。
- 默认会读取EXE自身尾部5MB的数据,并从中分离解密配置数据。
- 如果未找到,程序将询问用户配置文件名。
- 根据用户输入的密码解密配置数据,从中获取到随机盐、时间戳和文件名映射关系。
- 根据映射关系将文件重命名回正确名称。单文件和双文件模式下,会根据映射关系中的文件和其对应的偏移量,从中分离压缩包数据。
- 将解密配置中的原始文件尾写回最后一个压缩包(7z.00n)中。
- 将解密配置中的原始文件头写回首个压缩包(7z.001)中。
- 根据用户输入的密码、随机盐、当前时间戳,还原128位密码。
- 调用7Z命令行工具,使用上述密码进行解压,解压后的文件输出到当前目录。
- 清理掉不需要的临时文件。
- 解密操作完成。
- 单文件模式,仅仅是非常粗暴地将前面生成的所有分卷压缩包、解密配置数据等必要内容按顺序整合进EXE文件中,因此在压缩和解压时需要额外的内存和磁盘空间,并且消耗更多时间来进行数据的读取处理。因此不建议在文件总大小超过1GB时使用单文件模式。
- 生成的单文件EXE,会将原本已经打乱顺序的分卷文件整合进去,并且使用偏移量和文件大小来精准定位数据。由于偏移量已经被加密,这样将使得整合后的文件数据看起来没有前后逻辑关系,很难通过机器识别其用途。
- 当文件总大小超过4GB时,EXE文件将无法正常执行,因此会在保留一部分空间的情况下(3.99GB)禁用单文件模式。
- 双文件模式的算法和单文件基本相同,不同之处仅在于将分卷压缩包整合到单独的临时文件中,并在处理完后将其重命名为文件序列的首个文件的伪装文件名。
- 双文件模式由于不会将数据整合到EXE中,没有EXE超过4G无法执行的限制,因此不会限制文件总大小。
- 混淆是为了避免通过大数据、模型训练等方式识别出加密内容而在数据中加盐的一种方法。比如在生成加密数据时,其内容和KEY顺序大体上不会发生变化,因此在加密后,信息熵的分布有可能与原始数据接近,此时通过大量数据训练,有可能精准识别这类数据。
- 本工具在多处使用了混淆。在生成解密配置数据时,会插入多段随机生成的字符串,并将所有的KEY进行乱序处理,使得有价值的信息熵降低,这样在用AES进行一定次数迭代加密后,就很难被机器扫描、识别出它的作用。就算进行暴力破解,由于迭代次数很多,每次尝试解密的时间成本都会很高,大幅降低暴力破解的效率。
- 在进行加密压缩时,会对其进行分卷处理,分卷大小根据文件大小、随机分卷数量和随机增量决定。在完成压缩后,会将首个压缩包(7z.001)的随机前N个字节保存到解密配置中,随后用随机二进制数据覆盖,这样将无法通过文件头来识别7Z压缩包。
- 由于7Z总会将文件列表保存到文件尾,就算加密也是如此,因此多次重复加密相同文件时此处会增加暴露几率,因此将最后一个分卷压缩包(7z.00n)的尾部随机N个字节保存到解密配置中,随后用随机二进制数据覆盖,这样将无法通过尾部结构来识别7Z压缩包。
- 接着将所有压缩包的文件名更改成随机字符串,并在解密配置中以乱序保存原始文件名和随机文件名的映射关系,这样在上传、分享时,文件头尾被混淆,且其排序是乱的,很难精准判断这些文件的作用。并且由于分卷大小不同,其内容也是完全不同的,对应的MD5也是完全不同,从而大幅降低被精准识别的概率。
- 在单文件模式下,本工具会将原本已经打乱顺序的分卷文件整合进EXE文件中,并且使用偏移量来精准定位数据。由于偏移量已经被加密,这样将使得整合后的文件数据看起来没有前后逻辑关系,很难通过机器识别其用途。
- 与此同时,也在Python代码中随机加入了数条随机生成的字符串,并且在每次打包时都会通过脚本自动更换,这样每次生成的EXE文件都会有很大的不同。虽然这会影响生成的文件体积并略微降低性能,但也可以有效降低有价值内容被识别的概率。
- 在生成EXE时,由于前面的Python代码中加入了混淆数据,因此每个版本生成的EXE文件也会有很大的不同。就算使用同一个版本的EXE文件,在每次进行加密压缩时,都会在其尾部添加解密配置数据以及异或后的解密配置文件名,从而使得每次生成的EXE文件MD5均不相同,有效降低文件被识别的概率。
- 本工具基于7Z进行加密压缩,因此压缩率、压缩/解压速度完全由7Z的性能决定。但本工具基于安全性考量,会牺牲一定性能,如配置数据中大量的冗余,压缩文件头尾的备份、填充与恢复,更改文件名为随机字符串,加密、解密配置数据时的重复加解密迭代等方式,来降低其特征并提高暴力破解的成本。
- 而对于使用本工具的用户而言,无论是加密压缩分享,还是知道密码的情况下解密解压使用,此等性能牺牲都不会显著降低用户体验,并且傻瓜式操作也可显著降低使用者的心智负担,无须进行多重套娃式压缩、解压。
- 对于不同用户而言,加解密配置数据的过程耗时差异可能较大,从5秒钟到1分钟不等,这是由于配置数据内的冗余量有所不同,还有计算机性能不同所导致的差异。
- 请在issues中反馈您的问题。为了方便定位问题,请在反馈的内容中附上出现错误时的截图,以及文件路径(敏感信息请自行遮蔽),这样才能很好地复现并解决问题。
- 如果在解包时出现问题,如果条件允许,在截图、文件路径以外,也请提供出现问题的文件,以便更快地定位并解决问题。
本工具使用Python开发,因此您需要配置Python开发环境,安装依赖,才可进行开发和修改。
-
从官网下载安装Python 3。
-
Python版本不低于3.11。
-
使用PIP安装下面的依赖。
-
pip install loguru pip install send2trash pip install pycryptodomex pip install pyinstaller
-
您也可以双击install.bat自动安装依赖。
-
-
根据自己的需求修改源码。
-
使用pyinstaller将源码打包成EXE可执行文件。
-
pyinstaller -F ResEncryptor.py // 如果想要自定义图标,可使用下方的命令: pyinstaller -F -i icon.ico ResEncryptor.py
-
您也可以双击“build.bat”自动进行打包。
-
自动打包时,会自动更新ResEncryptor.py中的混淆数据以及版本文档。
-