命令行保护程序
本文档适用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 |
输出路径 | -o | protected/<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-CSharp
和 Assembly-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-BCEvirboxprotector_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-VME1.使用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