Skip to main content

资源加密功能保护最佳实践

资源写加密功能通过对主程序进行保护和判断磁盘文件类型的文件等操作,当符合设置的写加密规则后,主程序运行过程中所读写而生成的文件都是加密后的,可以有效减少文件暴露的风险,保护用户数据的安全。

资源的安全性问题#

在程序运行过程中生成的其他文件(如日志文件、临时文件、缓存文件、配置文件、数据库等)可能会包含很多重要信息,比如:

  1. 配置文件通常包含程序的运行参数和设置;
  2. 日志及表格等文件,通常记录程序的运行状态、错误信息和调试信息,也可能包含敏感数据(如用户输入、系统配置等),包括如果被篡改,可能导致程序行为异常或安全漏洞。
  3. Temp目录下的缓存文件,缓存文件通常用于提高程序性能,但可能包含敏感信息(如用户数据、会话信息等);
  4. 数据库的写入和生成;
  5. 数据模型、图片、脚本等文件;

如果这些文件内包含重要信息,那么信息很容易被暴漏,很可能引入安全风险;

功能特点#

优点#

  1. 实时加解密:程序运行时加载的加密后文件,内存中用到哪些数据块时就解密哪些,用完之后软件开发者可以随时将数据在内存中进行释放,我们不会干扰内存中的操作。
  2. 资源文件不限制:对主程序运行读写的资源加密文件类型没有任何要求。
  3. 绑定验证:主程序和资源加密的文件进行密码绑定,可以防止资源文件乱用。

缺点#

  1. 若读写文件过多时,主程序运行则可能会影响性能;
  2. 资源加密的规则设置操作可能相对麻烦些。

支持类型#

目前只有PE程序(Windows系统)才能支持资源加密功能。

如何判断程序类型,以下介绍两种方式:

  1. 将需要保护的文件拖入到Virbox Protector工具界面,在界面右下角会显示PE;
  2. 借助CFF Explorer工具,将程序拖入到工具界面,可以看到File Type的信息。

资源加密功能介绍#

资源加密选项#

由主程序进行调用运行的文件(比如脚本、图片、表格、日志等)我们都可以称作为资源文件,我们采取自己处理过得算法对资源文件进行加密,可以防止资源文件被篡改和反编译。

资源写加密#

资源写加密是对主程序运行过程中创建生成的文件进行保护,比如jar包运行后生成的日志文件,设置包含规则后进行保护,则jar包再次运行生成的日志文件都是为加密的文件,可以有效的防止信息和数据的泄露。

资源写加密的加解密的流程可以简单分为以下几点:

  • 打开文件
  1. 我们会判断写加密的文件是否是磁盘文件类型的文件;
  2. 如果是新建文件并且符合包含规则,把返回的句柄保存到加密文件信息链表中,写入加密头信息到文件尾;
  3. 判断文件是否为加密文件,如果是就返回的句柄保存到加密文件信息链表中,如果不是就调用原始函数。
  • 读取文件:
  1. 通过文件句柄,查找加密文件信息;
  2. 如果是加密文件,读取数据所在数据块后进行解密,并返回给用户,如果不是就调用原始函数。
  • 写入文件:
  1. 通过文件句柄,查找加密文件信息;
  2. 如果是加密文件,读取数据所在数据块后进行解密, 把用户数据写入指定指定位置,重新加密数据块,写入磁盘,如果不是就调用原始函数。

操作流程#

以python调用py文件后运行写csv文件为例,简单描述操作流程:

解析文件#

将待保护的主程序拖入到加壳工具界面(比如:python.exe)。

设置函数和加密选项#

在工具界面进行根据自己需求进行加密选项和函数选项等设置,如图所示:

资源加密选项#

资源加密是对的资源文件进行加密,资源写加密是主程序运行过程中所创建的文件;

功能描述区别
资源加密1.必须设置输入目录;
2.保护输入目录里的资源文件。
资源写加密1.不需要设置输入目录;
2.在规则设置文件类型后,主程序运行时所写的文件类型满足设置的规则后,则创建的新文件就会加密。

资源加密#

  1. 资源加密选项处点击"启用",则资源加密界面可以进行操作;

  2. 密码默认为随机密码;

    • 密码不一样:当密码为不一样时,保护后主程序和资源文件不匹配,则无法运行;
    • 密码一样:当密码设置为一样时,保护后主程序和资源文件匹配,程序可以正常运行;
  3. 输入目录是指需要保护资源的文件夹;

    输出目录是指保护后的资源文件的输出文件夹,默认XXXX_protected;

  4. 文件列表:默认列出指定的输入目录里的所有文件;

    • 在"选择文件"处,可以根据需求对文件列表中的文件进行勾选和不勾选;
    • 若想添加新文件,则需要将新文件放到输入目录指定的文件夹里,然后再输入目录处重新选择文件夹,则文件列表才会显示新文件。

资源写加密#

需要注意的是:

1.输入目录、输出目录、文件列表和资源写加密选项没有直接关系。

2.资源写加密只对程序运行时生成的文件有效,不会对资源文件列表中已经选择的文件生效;

3.包含规则中不要使用*.**等广泛的符号,否则主程序生成的文件或追加的文件都被加密,原文件就无法找回了。

  1. 勾选资源写加密选项;
  2. 设置包含规则,即希望程序运行时生成的哪些文件类型或具体某个文件进行加密,规则设置参考如下:
包含规则设置(举例)加密结果使用建议
包含规则为data.py全路径主程序运行时会在指定路径下生成的data.py文件会进行写加密若生成的文件路径固定,推荐使用
包含规则为*data*.py指文件名包含data且后缀名为py的文件会开启资源写加密推荐
包含规则为*/data.py所有路径下文件名为data.py的文件会开启资源写加密推荐
包含规则为*/data*.py所有路径下以data开头的文件均开启资源写加密推荐
包含规则为{EXEDIR}/*.py主程序所在路径下的所有py文件会开启资源写加密一般
包含规则为{EXEDIR}/*主程序所在路径下的所有文件会开启资源写加密慎用
包含规则为*.py保护后的exe运行时生成的后缀名为py的文件都会进行加密慎用
  1. 设置排除规则,即希望对包含规则中的某些文件类型或具体某个文件进行不加密,排除规则和包含规则的设置标准基本一样。
资源写加密功能生效的条件资源写加密功能生效的结果
1.不输入包含规则,输入排除规则1.运行时生成的所有文件均不开启资源写加密
2.不输入包含规则,不输入排除规则2.运行时生成的所有文件均不开启资源写加密
3.输入包含规则,输入排除规则3.先指定包含规则,再将符合排除规则的文件关闭写加密
4.输入包含规则,不输入排除规则4.满足包含规则的文件会开启资源写加密
  1. 对程序进行保护,保护后在同目录下会生成protected/XXXX.exe;

  1. 将原程序exe进行备份,将protected/XXXX.exe替换到原程序exe的位置;
  2. 保护后exe程序运行过程中生成的文件若符合包含规则就会进行加密,不符合设置的规则就不会加密。