Skip to main content

命令行保护程序

本文档适用Virbox Protector版本:3.x及以上版本。

命令行工具#

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

1)Windows平台:C:\Program Files\senseshield\Virbox Protector 3\bin2)Linux平台:/usr/share/virboxprotector/bin3)macOS平台:/Applications/Virbox Protector 3.app/Contents/MacOS/bin

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

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

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

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

例如Linux系统,参考命令:sudo ln -s /usr/share/virboxprotector/bin/virboxprotector_con /usr/local/bin/virboxprotector_con

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

命令行主功能#

参数选项#

1.使用virboxprotector_con --help查看命令选项参数;

支持的类型如下:

--help={native|dotnet|apk|aab|aar|app|u3d|java-bce|java-vme|h5|strip|u3dres|mulpkg|ilmerge}

例如查看apk的参数,命令:

virboxprotector_con --help=apk

其中 native 程序是指操作系统原生的程序类型,运行时不依赖于虚拟机或解释器的程序,一般由C/C++/Delphi/VB6 等语言编译生成,包括 Windows 下 PE 格式的程序(.exe/.dll/.sys等后缀),Linux/Android 下 ELF 格式的程序(.so后缀或主程序),macOS/iOS 下的 MachO 格式的程序(.dylib或主程序)。

2.对于一般的程序类型,可以直接传入路径进行保护,程序类型可以自动识别,如:

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

3.对于几类特殊的保护方式,需要指定类型:

保护方式参数
Java-BCE 保护方式-java
Unity3D资源加密(Windows/Linux热更新)-u3dres
Html5应用(.js)-h5
移除调试信息(ELF格式 strip)-strip
多渠道打包-mulpkg
程序集合并-ilmerge

java bce方式保护,举例:

virboxprotector_con -java <java_dir> <other_options ...>

命令行风格#

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

举例

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

程序类型和选项#

Android应用#

Android应用包括apk和aab两种格式,使用命令行保护时可根据自己的功能需求指定参数。

选项命令行默认选项
Dex 加密--dex-enc=APK:1, AAB:0
字符串加密--str-enc=0
文件校验--file-check=1
签名校验(APK)--sign-check=0
反注入--anti-inject=1
调试器检测--detect-dbg=1
模拟器检测--detect-emu=0
Root检测--detect-root=0
多开检测--detect-multi=0
输出 apks (AAB启用签名时生效)--apks=<apks_path>N/A

资源加密

使用 --res-enc=1 开启资源加密,资源列表使用 ; 隔开,支持通配符 *

选项命令行默认选项
启用-res-enc=<value>0
资源列表-res <resource_list>默认所有资源
过滤资源文件--exclude-res=<exclude_list>N/A

举例:

--res-enc=1 -res "assets/*;res/layout/*"

SO 保护

选项命令行默认选项
隐藏符号表--hide-symtab=0
资源列表-lib <nativelib_list>N/A
过滤so库文件--exclude-lib=<exclude_list>N/A

举例:

--hide-symtab=0 -lib "lib/armeabi-v7a/libhello.so;/lib/arm64-v8a/*"

函数选项

APK/AAB 的函数级保护仅支持代码虚拟化

默认虚拟化入口Application类 和 Main Activity类中的方法,指定具体函数见 函数选项

多渠道打包

多渠道打包见 多渠道打包

签名

签名选项见 签名选项

举例

开启dex加密、文件校验、签名校验、资源加密、选择so库和启用签名功能,命令参考如下:virboxprotector_con app-release.apk     --dex-enc=1 --file-check=1 --detect-dbg=0 --sign-check=1    --res-enc=1 -res "assets/*;res/layout/*"    --hide-symtab=0 -lib "lib/armeabi-v7a/libhello.so;/lib/arm64-v8a/*"    --sign=1 --ks="test/android.ks" --ks-pass=mypass --ks-key-alias=CERT --key-pass=mykeypass    -o app-release-protected.apk

AAR程序#

Android AAR 支持代码虚拟化,和其中的SO库的保护:

选项命令行默认选项
虚拟化的方法-v <method_list>随机
字符串加密--str-enc=0
过滤不支持的方法--ignore-unsupported=随机
隐藏符号表--hide-symtab=0
选择so库保护-lib <native_libraries>随机
输出路径-o <path>xxxx_protected

举例

保护com.example 包下所有类方法,开启字符串加密,保护所有so库,命令参考如下:virboxprotector_con test.aar -v "com.example.*" --str-enc=1 -lib "jni/*" -o protected/test.aar

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/iOS下的程序(.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架构的程序,需要对保护后的程序进行签名,签名命令见签名选项

举例

对mac可执行程序保护,开启内存校验、调试器检测和移除调试信息功能,并启用签名,命令参考如下:virboxprotector_con test --mem-check=1 --detect-dbg=1 --strip-dbginfo=1 --sign=1 --identity="Apple Development:ceshi@123.com" -o protected/test 

APP程序#

APP程序保护macOS app和iOS app两种格式的程序,使用命令行保护时可根据自己的功能需求指定参数。

选项命令行默认选项
内存校验--mem-check=0
调试器检测--detect-dbg=0
移除调试信息--strip-dbginfo=1
Objective-C名称混淆--objc-rename=0
输出路径-oprotected/<file_name>
IPA路径(iOS应用,需启用签名)--ipa=<ipa_path>

签名选项

签名选项 中的 iOS/macOS 签名。

举例

1.macOS app保护

开启内存校验、调试器检测和移除调试信息功能,并启用签名,命令参考如下:virboxprotector_con test.app --mem-check=1 --detect-dbg=1 --strip-dbginfo=1 --sign=1 --identity="Apple Development:ceshi@123.com" -o protected/test.app

2.iOS app保护

开启内存校验、调试器检测和移除调试信息功能,并启用签名,输出ipa,命令参考如下:virboxprotector_con test.app --mem-check=1 --detect-dbg=1 --strip-dbginfo=1 --sign=1 --identity="Apple Development:ceshi@123.com" --ipa=protected/test.ipa -o protected/test.app

NET程序#

选项命令行默认选项
压缩--pack=0
JIT 加密--jit-enc=1
资源加密--res-enc=0
字符串加密--str-enc=1
附加数据加密--overlay-enc=1
调试器检测--detect-dbg=0
名称混淆--rename=0
名称混淆保留规则--keep-rules=""

如果没有附加数据,则忽略 --overlay-enc 选项。

名称混淆选项

--rename=0 关闭。

--rename=1 混淆私有成员。

--rename=2 保留自定义名称。

名称保留规则

使用封号; 隔开,支持通配符*

举例

virboxprotector_con test.dll --pack=0 --jit-enc=1 --str-enc=1 --rename=2 --keep-rules="MyNamespace.MyInterface.*;MyNamespace.ExportForInvoke.*"

函数选项

函数选项,默认对入口函数代码加密。

举例

开启压缩、jit加密、字符串加密和调试器检测virboxprotector_con test.exe -v "*" --ignore-unsupported=1 --pack=0 --jit-enc=1 --str-enc=1 --detect-dbg=1 -o prrotected/test.exe

Unity3D程序#

Unity3D程序包括windows、Linux、macOS、Android和iOS平台的程序,其中unity又包括il2cpp和mono格式的程序,使用命令行保护时可根据自己的功能需求指定参数。

选项命令行默认选项
内存校验(仅il2cpp)--mem-check=1
文件校验(仅安卓)--file-check=1
签名校验(仅安卓的apk)--sign-check=0
反注入(仅安卓)--anti-inject=1
Unity引擎保护(仅安卓il2cpp)--unity-engine-protect=1
MetaData名称混淆(仅il2cpp)--metadata-rename=0
调试器检测--detect-dbg=1
反截屏--anti-screenshot=0
模拟器检测(仅安卓)--detect-emu=0
Root检测(仅安卓)--detect-root=0
多开检测(仅安卓)--detect-multi=0

程序集加密

使用 -asm 指定程序集列表,使用封号 ; 隔开,支持通配符 *,默认会加密 Assembly-CSharpAssembly-UnityStrcip 开头的 Dll,一般无需指定。

举例:

-asm "Data/Managed/Assembly-CSharp.dll;Data/Managed/Assembly-CSharp-first.dll"

资源加密

使用 --res-enc=1 开启资源加密,资源列表使用封号; 隔开,支持通配符 *

选项命令行默认选项
启用--res-enc=0
大小优先(仅安卓、iOS)--res-favor-size=0
资源加密密码(仅Windows/Linux/Android)--res-pass=N/A
资源列表-res <resource_list>默认所有资源
过滤资源文件--exclude-res=<exclude_list>N/A

举例:

--res-enc=1 -res "file1;file2;assets/file1;assets2/*"

Java程序#

Java-BCE#

virboxprotector_con -java <project_directory> [--java-pass=<password>] [-o <output_directory>]
选项命令行默认选项
设置密码--java-pass=随机
加密内嵌jar包--include-embedded=0
输出路径-o <path>xxxx_protected

举例:

virboxprotector_con -java my_java_dir --java-pass=12345 --include-embedded=1 -o my_java_dir_protected

Java-VME#

1.使用virboxprotector_con --help=java-vme可查看具体的帮助信息。

选项命令行默认选项
虚拟化的方法-v <method_list>随机
过滤不虚拟化的方法-ev <method_list>随机
字符串加密--str-enc=0
过滤不支持的方法--ignore-unsupported=随机
输出路径-o <path>xxxx_protected

2.java-vme方式不支持直接对内嵌jar包加密,需要将内嵌jar包取出后再进行加密,将加密后的内嵌jar包放回原jar包,对原jar包在进行加密。

3.java-vme方式仅支持对函数虚拟化保护。

virboxprotector_con <jar_path> -v "com.example.test1.*;com.example.test2.*" -o <output_path>

举例(保护test1和test2的所有方法):

virboxprotector_con my_jar.jar -v "com.example.test1.*;com.example.test2.*" -o protected/my_jar.jar

举例(保护jar包中的所有方法):

virboxprotector_con my_jar.jar -v "*" -o protected/my_jar.jar

H5应用#

virboxprotector_con -h5 <dir_or_file> -o <output_path>

签名选项#

APK/AAB 签名#

选项命令行默认选项
启用签名--sign=0
Key Store 路径--ks=全局配置
Key Store 密码--ks-pass=全局配置
密钥别名--ks-key-alias=全局配置
密钥密码--key-pass=全局配置

举例

virboxprotector_con <file_path> <other_options ...>     --sign=1 --ks="test/android.ks" --ks-pass=mypass --ks-key-alias=CERT --key-pass=mykeypass     -o <output_path>

iOS/macOS 签名#

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

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

函数选项#

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

选项命令行通配符
忽略不支持的函数--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 格式的程序默认开启。

其它选项#

多渠道打包#

保护并使用渠道模板

virboxprotector_con <apk_path> <other_options ...>     --mulpkg-template=<template_path> --mulpkg-outdir=<multi_package_outdir>     [-o <output_main_apk_file>]

仅渠道打包不做保护

virboxprotector_con -mulpkg <apk_path> --mulpkg-template=<template_path> -o <output_directory>

指定签名(可选)

以上命令,均可指定签名选项,见 签名选项

程序集合并#

使用 -ilmerge 选项进行合并:

virboxprotector_con -ilmerge <main_assembly> <other_assemblies ...> -o <output_path>

举例

virboxprotector_con -ilmerge Project.exe MyLibrary1.dll MyLibrary2.dll -o Merged/Project.exe

移除符号表#

使用 -strip 选项移除 ELF 程序中的调试信息(静态符号表和静态字符串表):

virboxprotector_con -strip <file_path> -o <output_path>

举例

virboxprotector_con -strip libhello.so -o striped/libhello.so