Skip to main content

本地程序保护时界面操作流程

方案说明#

本流程适用于C、C++、golang等开发语言开发的exe、dll 、so、dylib文件加密。

操作流程#

  • 将需要保护的可执行文件或库文件导入Virbox Protector中
  • 配置函数选项,设计个性化的保护方案
  • 配置加密选项
  • 执行保护
  • 备份原始文件,将受保护的文件更名后替换原文件,保存好配置文件

导入文件#

直接拖入文件或者选择打开文件的形式,选择需要加密exe可执行程序或者dll动态链接库。

特别提醒

如果被加壳程序的相同目录下存在 xxx.map 文件,那么会自动加载 map 文件,将函数名称显示在界面当中,目前支持VS、VC、BCD、Delphi编译器生成的map文件

img

配置函数选项#

在函数选项,点击【添加函数】,鼠标左键选择需要保护的函数,鼠标右键设定保护方式。

  • 针对C、C++、Delphi XE7及以上、PB、BCB等开发的PE程序及动态库,保护方式的安全性:代码虚拟化>代码混淆>代码加密。

img

加密选项配置#

我们为高级用户,提供了加密选项的功能。PE 和.Net 程序,由于技术不同,所以在加密选项上,略有差异,您可以根据自己的需求,调整加密的具体方式。

  • 输出文件:可以修改程序保护后生成文件的路径和名称。

    【特别提醒: 1 、如果只有文件名称,那么路径为源程序的路径; 2 、如果输出文件名和源文件同名,生成的程序会将源程序覆盖,非常不建议。】

  • 导入表保护:这个选项能够对文件中的导入表进行了加密处理,隐藏了 API 列表。基于安全强度的考虑,我们建议用户使用这个选项。

  • 内存校验:运行时对程序内存进行完整性校验,并提供 SDK 标签的方式,可对内存进行动态校验,防止程序被篡改。。

  • 压缩:对加壳后的后的程序进行压缩处理,减小体积,同时可以防止静态反编译。

    【特别提醒: 1 、由于压缩模块需要一个固定大小的空间,如果被加壳的程序非常小压缩的效果并不明显还有可能出现体积更大的情况,对于体积较大的程序效果明显。 2 、不支持 DotNet动态库的压缩。 3 、不支持 arx 类型程序的压缩。】

  • 资源节保护:加密资源段,对被保护程序的资源区段进行加密,运行的时候需要用户使用相应许可进行解密方可使用程序。

    【特别说明:资源保护目前只能支持本地程序。】

  • ds插件:DS Protector是数据保护工具,可以对程序的数据资源文件进行加密保护。

  • 调试器检测:勾选此选项后,程序检测到进程被调试时退出进程。

  • 虚拟机检测:加密后程序在运行时检测到VMware/Virtual Box 等虚拟时阻止程序运行

image-20221116094535667

执行保护#

所有选项配置完成,点击【保护选中项目】的按钮,完成加壳。提示保护成功。

image-20220510173308967

替换文件#

温馨提示:加壳后的程序会在同一目录下生成新文件(Mine.exe.ssp)和 protected文件夹:

Mine.exe.ssp为加壳时设置的配置选项,将此文件与待加密的程序放在一起,加壳工具会自动加载配置,可以保存到其他地方,在下次更新需要重新加密时使用。

protected:加密后的程序会自动生成,保存在此文件夹下,您可以将此文件替换到原来的程序目录里测试运行。

image-20220422112525943

命令行工具操作#

Virbox Protector 的命令行工具 virboxprotector_con 的默认路径位于:

Windows:C:\Program Files\senseshield\Virbox Protector 3\bin
Linux:/usr/share/virboxprotector/bin
macOS:/Applications/Virbox Protector 3.app/Contents/MacOS/bin

调用命令行可以指定完整全路径,例如:

"C:\Program Files\senseshield\Virbox Protector 3\bin\virboxprotector_con.exe" <file_path>      <options ..> -o <output_path>

如果在 Windows系统,也可以加入环境变量,然后直接输入 virboxprotector_con,无需输入全路径。

非 Windows 系统,也可以设置软链接:

sudo ln -s /usr/share/virboxprotector/bin/virboxprotector_con /usr/local/bin/virboxprotector_con

然后即可直接输入virboxprotector_con 命令进行保护。

命令行主功能#

可以直接传入路径进行保护,程序类型可以自动识别,如:

virboxprotector_con <file_path> <options ...> -o <output_path>

长命令行风格

对于绝大部分开关类型的命令行选项,使用 --{opt}=value 的风格,1代表开启,0 代表关闭:

举例

--mem-check=1, --jit-enc=0

命令行帮助

更细节的参数,可以使用 --help={type}查看帮助:

例如:

virboxprotector_con --help=native

程序类型和选项#

PE程序#

PE格式一般是指Windows下的程序(.exe/.dll/.sys等后缀)。

选项命令行默认选项
压缩--pack=1
内存校验--mem-check=0
导入表保护--imp-protect=0
资源加密--res-sect-enc=0
附加数据加密--overlay-enc=0
调试器检测--detect-dbg=0
虚拟机检测--detect-vm=0

举例

对exe保护,开启压缩、内存校验、导入表保护和调试器检测功能,命令参考如下:virboxprotector_con test.exe --pack=1 --mem-check=1 --imp-protect=1 --detect-dbg=1 -o protected/test.exe

ELF程序#

ELF格式一般是指Linux/Android下的程序(.so后缀或主程序)。

选项命令行默认选项
压缩--pack=1
导入表保护--imp-protect=0
内存校验--mem-check=0
内存保护--mem-protect=0
调试器检测--detect-dbg=0
移除调试信息--strip-dbginfo=1

举例

对linux可执行程序保护,开启压缩、内存校验、导入表保护、调试器检测和移除调试信息功能,命令参考如下:virboxprotector_con test --pack=1 --mem-check=1 --imp-protect=1 --detect-dbg=1 --strip-dbginfo=1 -o protected/test

MachO程序#

MachO格式一般是指macOS下的程序(.dylib或主程序)。

选项命令行默认选项
内存校验--mem-check=0
调试器检测--detect-dbg=0
移除调试信息--strip-dbginfo=1

举例

对mac可执行程序保护,开启内存校验、调试器检测和移除调试信息功能,命令参考如下:virboxprotector_con test --mem-check=1 --detect-dbg=1 --strip-dbginfo=1 -o protected/test

如果是macOS arm架构的程序,需要对保护后的程序进行签名,签名命令见签名选项

函数选项#

支持指定函数名称或规则保护,使用 ;号隔开, 支持通配符 *

选项命令行通配符
忽略不支持的函数--ignore-unsupported=<value>N/A
代码加密-e支持 *
代码混淆-m 支持 *
代码虚拟化-v支持 *

举例

-m "function1;function2" -v "function3;function4" -e "test*" --ignore-unsupported=1

--ignore-unsupported= 选项用于忽略不支持的函数,不支持则跳过,对 Jar/aar/war/apk/aab 格式的程序默认开启。

签名选项#

注意:签名校验功能只会校验证书的Team id,不校验证书的类型

选项命令行默认选项
启用签名--sign=0
证书--identity=N/A
输出ipa文件--ipa=N/A

证书查找命令参考:security find-identity -v -p codesigning