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

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


加密选项设置#

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

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

点击保护选中项目#
设置完成后,点击【保护选中项目】,安装保护生成后的apk即可运行。点击【保护选中项目】后,在 protected文件夹中的是加密后的apk文件。
命令行加密流程#
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=apk加密选项#
| 选项 | 命令行 | 默认选项 |
|---|---|---|
| Dex 加密 | --dex-enc= | APK:1, AAB:0 |
| 文件校验 | --file-check= | 1 |
| 签名校验 | --sign-check= | 0 |
| 反注入 | --anti-inject= | 1 |
| 调试器检测 | --detect-dbg= | 0 |
| 内存保护 | --mem-protect= | 0 |
| 界面劫持防护 | --ui-hijack-protect= | 0 |
| 模拟器检测 | --detect-emu= | 0 |
| Root检测 | --detect-root= | 0 |
| 多开检测 | --detect-multi= | 0 |
| 代理检测 | --detect-proxy= | 0 |
| VPN检测 | --detect-vpn= | 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 |
| 防盗用 | --anti-fetch= | 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>指定签名(可选)
以上命令,均可指定签名选项,见签名选项