命令行选项
命令行工具
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>
对于几类特殊的保护方式,需要指定类型:
Java-BCE 保护方式
-java
Unity3D资源加密(Windows/Linux热更新)
-u3dres
Html5应用(.js)
-h5
移除调试信息(ELF格式 strip)
-strip
多渠道打包
-mulpkg
程序集合并
-ilmerge
举例:
virboxprotector_con -java <java_dir> <other_options ...>
长命令行风格
对于绝大部分开关
类型的命令行选项,使用 --{opt}=value
的风格,1
代表开启,0
代表关闭:
举例
--mem-check=1
, --jit-enc=0
命令行帮助
更细节的参数,可以使用 --help={type}
查看帮助:
例如:
virboxprotector_con --help=apk
支持的类型如下:
--help={native|dotnet|apk|aab|aar|app|u3d|java-bce|java-vme|h5|strip|u3dres|mulpkg|ilmerge}
其中 native
程序是指操作系统原生的程序类型,运行时不依赖于虚拟机或解释器的程序,一般由C/C++/Delphi/VB6 等语言编译生成,包括 Windows 下 PE 格式的程序(.exe/.dll/.sys等后缀),Linux/Android 下 ELF 格式的程序(.so后缀或主程序),macOS/iOS 下的 MachO 格式的程序(.dylib或主程序)。
程序类型和选项
Android APK/AAB
Dex 加密
--dex-enc=
APK:1
, AAB:0
文件校验
--file-check=
1
签名校验
--sign-check=
0
反注入
--anti-inject=
1
调试器检测
--detect-dbg=
0
模拟器检测
--detect-emu=
0
Root检测
--detect-root=
0
多开检测
--detect-multi=
0
输出 apks (AAB启用签名时生效)
--apks=<apks_path>
N/A
资源加密
使用 --res-enc=1
开启资源加密,资源列表使用 ;
隔开,支持通配符 *
。
启用
--res-enc=
0
资源列表
-res <resource_list>
默认所有资源
举例:
--res-enc=1 -res "file1;file2;assets/file1;assets2/*"
SO 保护
隐藏符号表
--hide-symtab=
0
资源列表
-lib <nativelib_list>
N/A
举例:
--hide-symtab=0 -lib "lib/armeabi-v7a/libhello.so;/lib/arm64-v8a/*"
函数选项
APK/AAB 的函数级保护仅支持代码虚拟化
。
默认虚拟化入口Application类 和 Main Activity类中的方法,指定具体函数见 函数选项。
多渠道打包
多渠道打包见 多渠道打包。
签名
签名选项见 签名选项。
举例
virboxprotector_con app-release.apk --dex-enc=1 --file-check=1 --detect-dbg=0 --sign-check=1 --res-enc=1 -res "assets/*;res/*" --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
PE#
压缩
--pack=
1
内存校验
--mem-check=
1
导入表保护
--imp-protect=
1
资源节加密
--res-sect-enc=
1
附加数据加密
--overlay-enc=
1
调试器检测
--detect-dbg=
0
虚拟机检测
--detect-vm=
0
ELF#
压缩
--pack=
1
内存校验
--mem-check=
1
调试器检测
--detect-dbg=
0
剥离符号表
--strip-dbginfo=
1
MachO#
内存校验
--mem-check=
1
调试器检测
--detect-dbg=
0
签名命令见 签名选项。
App#
内存校验
--mem-check=
1
调试器检测
--detect-dbg=
0
Objective-C名称混淆
--objc-rename=
0
输出路径
-o
protected/<file_name>
IPA 路径(需启用签名)
--ipa=<ipa_path>
无
签名选项
见 签名选项 中的 iOS/macOS 签名。
.NET#
压缩
--pack=
0
JIT 加密
--jit-enc=
1
字符串加密
--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.*"
函数选项
见函数选项,默认对入口函数代码加密。
Unity3D#
内存校验(仅il2cpp)
--mem-check=
1
文件校验(仅安卓)
--file-check=
1
签名校验(仅安卓)
--sign-check=
0
反注入(仅安卓)
--anti-inject=
1
Unity引擎保护(仅安卓il2cpp)
--unity-engine-protect=
1
MetaData名称混淆(仅il2cpp)
--metadata-rename=
0
调试器检测
--detect-dbg=
1
模拟器检测(仅安卓)
--detect-emu=
0
Root检测(仅安卓)
--detect-root=
0
多开检测(仅安卓)
--detect-multi=
0
程序集加密
使用 -asm
指定程序集列表,使用封号 ;
隔开,支持通配符 *
,默认会加密 Assembly-CSharp
和 Assembly-UnityStrcip
开头的 Dll,一般无需指定。
举例:
-asm "Data/Managed/Assembly-CSharp.dll;Data/Managed/Assembly-CSharp-first.dll"
Copy
资源加密
使用 --res-enc=1
开启资源加密,资源列表使用封号;
隔开,支持通配符 *
。
启用
--res-enc=
1
大小优先(仅安卓、iOS)
--res-favor-size=
0
资源加密密码(仅Windows/Linux)
--res-pass=
N/A
资源列表
-res <resource_list>
默认所有资源
举例:
--res-enc=1 -res "file1;file2;assets/file1;assets2/*"
Copy
Java#
Java-BCE#
virboxprotector_con -java <project_directory> [--java-pass=<password>] [-o <output_directory>]
Copy
设置密码
--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
Copy
Java-VME#
Java-VME 仅支持代码虚拟化保护。
举例(保护test1和test2的所有方法):
virboxprotector_con my_jar.jar -v "com.example.test1.*;com.example.test2.*" -o protected/my_jar.jar
Copy
举例(保护jar包中的所有方法):
virboxprotector_con my_jar.jar -v "*" -o protected/my_jar.jar
Copy
AAR#
Android AAR 支持代码虚拟化,和其中的SO库的保护:
举例(保护com.example 包下所有类方法,保护所有so库):
virboxprotector_con test.aar -v "com.example.*" -lib "jni/*" -o protected/test.aar
Copy
H5#
virboxprotector_con -h5 <dir_or_file> -o <output_path>
Copy
签名选项#
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>
Copy
iOS/macOS 签名#
启用签名
--sign=
0
证书
--identity=
N/A
函数选项#
支持指定函数名称或规则保护,使用 ;
号隔开, 支持通配符 *
。
忽略不支持的函数
--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>]
Copy
仅渠道打包不做保护
virboxprotector_con -mulpkg <apk_path> --mulpkg-template=<template_path> -o <output_directory>
Copy
指定签名(可选)
以上命令,均可指定签名选项,见 签名选项。
程序集合并#
使用 -ilmerge
选项进行合并:
virboxprotector_con -ilmerge <main_assembly> <other_assemblies ...> -o <output_path>
Copy
举例
virboxprotector_con -ilmerge Project.exe MyLibrary1.dll MyLibrary2.dll -o Merged/Project.exe
Copy
移除符号表#
使用 -strip
选项移除 ELF 程序中的调试信息(静态符号表和静态字符串表):
virboxprotector_con -strip <file_path> -o <output_path>
Copy
举例
virboxprotector_con -strip libhello.so -o striped/libhello.so
最后更新于
这有帮助吗?