Android应用加固介绍
工具下载
功能介绍
DEX文件保护
对APK中DEX文件进行整体加固保护,加固阶段生成DEX壳文件,隐藏并保护原DEX包含的代码文件。同时基于DEX方法指令抽取加密、运行时动态解密的安全保护机制,有效对抗攻击者在内存中DUMP代码的行为。
VMP虚拟机保护
通过自定义虚拟机代替Android原生虚拟机的方式,对DEX中核心方法指令进行压缩及加密变形处理,防止攻击者对应用进行脱壳.
Java2C
通过将DEX中方法指令转换为C层可执行指令的方式,对DEX中核心Java代码native化下沉保护,在应用程序运行时不会出现代码动态解密操作,提高安全性同时兼顾应用性能。
SO文件保护
对SO代码文件进行重构加密,支持加密处理导入符号、导出符号、代码段、数据段等数据,同时提供SO代码混淆保护、SO 代码虚拟化保护等高级保护功能,防止SO代码被反编译或篡改。
防二次打包
加固阶段提取APP正版签名信息并加密保护,APP运行时获取当前签名信息与正版签名信息进行对比,签名不一致则阻止APP运行,防止APP被篡改二次打包。
完整性保护
在APP运行时对文件指纹及完整性进行校验,发现任一文件被篡改则阻断APP运行,支持对APK内部所有类型文件进行完整性保护,有效防止恶意篡改、木马、广告植入等行为。
防调试
通过多种手段检测运行时调试分析以及注入篡改行为,防护方案包括防调试器、防内存dump、防内存篡改、防注入等。发现有可疑行为发生时自动退出,对抗如GDB、IDA、lldb等调试工具、Cydia Substrate、Xposed、Frida等HOOK注入工具。防止攻击者进一步逆向分析。
数据保护
通过透明加解密技术对APK 内的数据文件、配置文件、资源文件进行加密保护,提供日志防泄漏、防抓包、XML配置文件保护、数据库文件保护、资源文件保护、防录屏、防截屏等功能,在各个环节有效阻止敏感数据泄露,保障数据安全。
运行环境感知
在异常风险环境中攻击者权限过大导致应用被分析利用的问题,从而造成数据泄露、运行流程篡改。易盾加固可有效检测并对抗ROOT、模拟器、多开器、加速器、HOOK框架等风险运行环境。
使用说明
该加固工具为jar包文件,适用于Windows、Linux以及Mac系统,以下均以Windows环境下描述,其他系统环境使用方法类似。下载地址点击下载。
使用方式
命令行模式(注意,第一次使用需要配置config.ini文件)
- 命令行模式参数
java -jar NHPProtect.jar -yunconfig -fullapk -zipalign -apksign -input E:\yiduntest\test.apk
- 参数说明如下:
参数 | 说明 |
---|---|
-yunconfig | 必填项,表示自动从易盾后台获取加固参数,加固配置已经在后台部署,可以根据实际情况调整 。 |
-apksign | 对加固后的 APK 包签名,需要配置config文件内的签名文件配置[apksign]字段。 |
-zipalign | 对加固后的 APK 包对齐,未对齐的包体可能存在安装失败的情况,建议对加固后的包都需要进行对齐。 |
-input | 必填项,参数后面跟待加固的APK/AAB文件绝对路径。 |
-fullapk | 必填项,APK整包文件上传。 |
-output | 默认加固后的文件输出在原文件同路径,-output参数可以指定加固后文件的输出路径和文件名,示例:java -jar NHPProtect.jar -yunconfig -zipalign -apksign -output E:\enc\test_enc.apk -input E:\yiduntest\test.apk |
config.ini文件配置说明
默认config.ini必须要跟NHPProtect.jar在同一目录下,如果需要指定config文件,可以执行-config 命令参数来处理:
java -jar NHPProtect.jar -yunconfig -fullapk -config E:\Desktop\test\config.ini -apksign -zipalign -input E:\yiduntest\test.apk
config的功能主要有以下三点:
设置appkey
用户需要将appkey填写在该配置文件中,格式如下所示。appkey请在官网登录账号后加固服务-服务管理获取。
[appkey]
key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
配置签名相关信息
若需要进行自动签名操作,除了在命令行中加入”-apksign”参数外,还需要在config.ini文件中设置签名相关信息,格式和含义如下所示。
[apksign]
keystore=D:\xxx\xx.keystore
alias=xxx
pswd=xxx
aliaspswd=xxx
signver=v1+v2
keystore: 存储签名信息的文件,使用绝对路径表示
alias: 签名别名
pswd: 对应签名信息的密码
aliaspswd: 对应签名别名的密码
signver:指定签名的版本,用+相连
(ps:若只使用v2签名,仅支持Android 7.0 以上系统,请谨慎使用)
AAB包签名请加上-aabUseApksig参数
java -jar NHPProtect.jar -yunconfig -fullapk -zipalign -apksign -aabUseApksig -input xxx.aab
单独so 加固
如有 so 文件需要加固,需要在配置文件增加[so], 并按照一定的格式填入 so 文件名,示例:
[so]
so1=libtest.so
so2=libtest2.so
so3=libtest3.so
打渠道包
在 config.ini 写入渠道配置文件路径(相对路径或绝对路径皆可)。配置如下:
[Channel]
path=E:\Desktop\Channel.txt
渠道配置文件示例:
360|CHANNEL|奇虎
baidu|CHANNEL_BAIDU
说明:每一行代表一个渠道信息,每个渠道信息的内容用“|”隔开。其中:
• 第一项:渠道编号(value),必填。对应
• 第二项:渠道名称(name),可选。不填,则默认为 CHANNEL。对应<meta·data>标签的 name 字段。
• 第三项:市场名称,用于标识输出 app,可选。不填,则默认为渠道编号(value)。
只是签名,不做加固,不打渠道包
java -jar NHPProtect.jar -sign -zipalign -input %inputapk%
加固并且打渠道包,进行签名对齐
java -jar NHPProtect.jar -yunconfig -fullapk -channel -apksign -zipalign -input %inputapk%
不加固,单独打渠道包,并且进行签名对齐
java -jar NHPProtect.jar -sign -zipalign -channel -input %inputapk%
更新和支持
Jar工具会定期进行新版本检测,客户端网络正常的情况下触发更新时会自动升级到最新版本。也可手动通过更新命令进行升级。示例:
Java -jar NHPProtect.jar -update
也可以通过config 内的增加如下配置来设置加固工具是否更新,以及更新检测频率。
[update]
u=1 // u=1 更新 u=0 不触发自动更新
t=1 //更新检测频率,单位 day,表示每 1天执行时候都会进行最新版本更新检测
加固脚本由易盾在服务器部署,为保证线上包体方案的稳定性,非功能优化和问题修复不会改变后台的加固版本。建议有大版本更新迭代时候可以考虑升级到易盾新版本,建议根据版本排期提前测试。
注意事项
事项 | 说明 |
---|---|
重新签名且保持签名一致 | 加固的防二次打包及完整性校验功能,会校验应用的签名以防止出现被山寨,当校验到签名不一致时会阻止应用的正常运行。 |
隐私变更 | APP在使用了易盾加固后,对于隐私检测的测评机构来说,APP相当于接入了三方的SDK,为了避免出现加固后上架应用商店被检测到关于隐私政策的一些问题,使用易盾加固后,在APP的隐私政策的三方SDK清单中增加对易盾应用加固的说明。参考:《加固隐私说明的链接》解决。 |
上架Google play | 加固后如果您的应用需要上架Google play市场,请确保Google play自动完整性保护选项是关闭的(默认是关闭的),避免与APP加固的功能冲突。具体操作如下:在自动完整性保护页面(版本>设置>应用完整性>自动完整性保护)中关闭保护功能。 |
首次接入加固后的测试 | 首次接入加固后,App测试的流程应做一次比较全面的测试,之后即可进行常规测试。 |
主动防御发现风险时主动退出 | 检测到文件篡改、调试、注入、HOOK等行为时会触发主动防御机制,默认防御效果为主动退出。 |
过检版本发布风险 | 如果应用被监管通报检查了,易盾会帮助配置过检加固策略,一般只需要解决高危风险即可,不必全部解决。如果为了迎合监管需求全部解决问题,可能会对实际业务产生一些潜在风险,建议:过检之后,全量上线不要使用过检版本;如果要全量上线过检版本,请开发者做好全部用例测试; |