Skip to main content

Android apk 加密流程

方案简介#

Virbox Protector Android 应用加固提供专业安全的防护,可防止 APK 被逆向分析、反编译、二次打包,防止嵌入各种病毒、广告的恶意代码,从源头上保护数据安全和开发者的利益。Virbox Protector可以帮助应用开发者实现一键加固+自动签名等多种操作。

操作流程#

  • 将需要保护的 APK 文件导入Virbox Protector中;
  • 设置函数选项;
  • 设置加密选项;
  • 设置资源加密;
  • 设置 SO 加密
  • 执行加固;

登录#

双击Virbox Protector快捷方式,启动应用,如果您尚未安装,请先下载:下载

输入正确的账号&密码进行登录,如无账号,请先访问 https://shell.virbox.com/apply.html 进行注册。

image-20220524172252243

导入文件#

将 APK 导入至Virbox Protector中。

可通过以下两种方式将待加密的文件添加到 Virbox Protector。

1)直接拖入到 Virbox Protector2)点击工具栏的【打开文件】,选择要加密的文件。

设置函数选项#

Virbox Protector 可对 DEX 函数进行虚拟化保护。DEX虚拟化技术:对 DEX 中的 Dalvik 字节码进行虚拟化,转换为自定义的虚拟机指令,然后由 Native 层虚拟机解释执行。

加密选项设置#

image-20230323153032870

输出信息#

可设置保护后生成的文件命名及存储位置。

设置选项#

  • 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\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
模拟器检测--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>

指定签名(可选)

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