方案简介#
Virbox Protector Android 应用加固提供专业安全的防护,可防止 APK 被逆向分析、反编译、二次打包,防止嵌入各种病毒、广告的恶意代码,从源头上保护数据安全和开发者的利益。Virbox Protector 2 可以帮助应用开发者实现一键加固+自动签名等多种操作。
操作流程#
- 将需要保护的 APK 文件导入Virbox Protector 2 Trial 中;
- 设置函数选项;
- 设置加密选项;
- 设置资源加密;
- 设置 SO 加密
- 执行加固;
登录#
双击 Virbox Protector 2 Trial 快捷方式,启动应用,如果您尚未安装,请先下载:下载
输入正确的账号&密码进行登录,如无账号,请先访问 https://shell.virbox.com/apply.html 进行注册。

导入文件#
将 APK 导入至 Virbox Protector 2 Trial 中。
可通过以下两种方式将待加密的文件添加到 Virbox Protector。
1)直接拖入到 Virbox Protector2)点击工具栏的【打开文件】,选择要加密的文件。设置函数选项#
Virbox Protector 可对 DEX 函数进行虚拟化保护。DEX虚拟化技术:对 DEX 中的 Dalvik 字节码进行虚拟化,转换为自定义的虚拟机指令,然后由 Native 层虚拟机解释执行。
添加函数可以多选,可参考:添加函数的常用操作


加密选项设置#

输出信息#
可设置保护后生成的文件命名及存储位置。
设置选项#
- DEX 加密是对 DEX 文件整体压缩加密(若在Google Play上架,不建议勾选dex加密,建议选择虚拟化方式保护dex文件里的函数)
- 字符串加密:加密代码中的敏感字符串,防止反编译工具直接搜索到相关的函数。
- 勾选反调试按钮,则使用IDA等调试工具调试时,程序会直接退出。
- 勾选签名校验按钮,且进行签名设置,输入自己的 keystore 文件和密码(密钥别名和密钥密码选填)。
- 勾选文件校验:检查APK内所有文件的完整性。
- 勾选反注入,可以防止其它进程对 apk 或 aab 进程附加调试或注入。
- 勾选防截屏:可防止应用被截屏。
- 勾选模拟器检测,可以防止程序在“夜神”、“雷电”、"AVD"等模拟器中运行。
- 勾选 root 检测,可以防止程序在 root 过后的手机上运行。
- 勾选多开检测,可以防止程序多开分身。
签名设置#
启用签名:
勾选启用签名,需要设置keystore路径和keystore密码,设置密钥别名和密钥密码,加密后会自动签名。
如果不勾选启用签名,加密后的 apk/aab 需要手动重新做签名。
注意
使用“签名校验”功能,必须勾选“启用签名”,才能保护成功。
资源加密#
加密APK 中的assets下的文件,支持图片、配置、脚本等文件类型。

so库保护#
点击 so 保护 选项,点击选择文件,添加待保护的so库。【注】此方式选择的so库只有压缩功能,若有函数保护等需求,需要单独对so库进行保护。注意
勾选“隐藏符号表”,so库需要全选,反之,so库若选择部分,“隐藏符号表”不建议勾选,否则运行可能会出问题。

点击保护选中项目#
设置完成后,点击【保护选中项目】,安装保护生成后的apk即可运行。点击【保护选中项目】后,在 protected文件夹中的是加密后的apk文件。
命令行加密流程#
Virbox Protector 的命令行工具 virboxprotector_con 的默认路径位于:
Windows:C:\Program Files\senseshield\Virbox Protector 3\binLinux:/usr/share/virboxprotector/binmacOS:/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 系统,也可以设置软链接:
sudoln-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=apk加密选项#
| 选项 | 命令行 | 默认选项 |
|---|---|---|
| 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/*"举例
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函数选项#
APK/AAB 的函数级保护仅支持代码虚拟化。
默认虚拟化入口Application类 和 Main Activity类中的方法,支持指定函数名称或规则保护,使用 ;号隔开, 支持通配符 *。
| 选项 | 命令行 | 通配符 |
|---|---|---|
| 忽略不支持的函数 | --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 格式的程序默认开启。
签名选项#
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>其它选项#
多渠道打包#
保护并使用渠道模板
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>指定签名(可选)
以上命令,均可指定签名选项,见签名选项