InfoQ 极客传媒 15 周年庆征文|跨平台应用开发进阶 (二十二) :uni-app Android APP 上线准备工作汇总
一、为什么要做安全加固?
应用uni-app
开发完成APP
应用后,上线前进行安全检测,发现 APP Android 版存在反编译高危漏洞,iOS 版并没有爆出此类问题。
当我们开发的 App 准备做上架应用市场时,应用市场会要求上架的 App 做加固处理,这是为什么呢 ?
首先,来看下腾讯开放平台官方的解释说明
若应用不做任何安全防护,极易被病毒植入、广告替换、支付渠道篡改、钓鱼、信息劫持等,严重侵害开发者的利益。
App 加固后,可以对应用进行安全防护,防止应用分发后,被反编译、调试、盗版、破解、二次打包等威胁,维护开发者的利益。
当然,除了应用加固外,还有其它的安全解决方案如:安全检测(漏洞扫描)、**渠道监控(正盗版分发情况监控)和安全 SDK(专业场景下的安全解决方案)**等。
简单来说就是,如果你不希望自己参与开发的 App 出现以下问题,是免费为别人写的,那就加固吧。
应用程序被破解
核心代码被窃取
恶意代码注入
核心数据泄露
安全检测未合规
二、如何为 App 应用加固?
目前市面上主流的加固方式有 360 加固保,腾讯云乐固,梆梆加固、网易易顿、顶象等等...这些加固平台工作流程基本都是 APK 加固、APP 签名。
网易易顿加固截图信息:
顶象加固截图信息:
腾讯云加固截图信息(果然白嫖的不香~):
加固后效果如下:
三、APP 签名
签名的话,一般使用通用签名工具ApkSigner
。
ApkSigner 是 jar 包形式的签名工具,较传统工具签名快很多,适用于Win/Mac/Linux
环境。
点击下载
3.1 使用说明
解压下载包
命令行执行(需要
jdk
环境)
注意⚠️:签名之后,如果需要进行对齐操作,请调用命令: zipalign -f 4 in.apk out.apk
, zipalign
这个程序在 android sdk
有提供。
(可选)android7.0
及之后的 apk,可以采用v2
签名,提高apk
安装速度。但是为了兼容android7.0
之前的系统,也需要进行v1
签名,且需要先进行v1
签名,apk 字节对齐(可选),再进行v2
签名。具体步骤命令如下:
java -jar ApkSigner.jar [-appname test] -keystore keystorePath -alias alias [-pswd password] [-aliaspswd aliasPassword] -v1 true -v2 false in.apk
zipalign -c -f [alignmentSize] in.apk out.apk
(可选)
java -jar ApkSigner.jar [-appname test] -keystore keystorePath -alias alias [-pswd password] [-aliaspswd aliasPassword] -v1 false -v2 true out.apk
其中,option
参数说明:
appname
待签名的应用程序名,可选,但建议不同的 APP 填上对应的 app 名(可以为中文),有助于【加速】;
keystore
后跟.keystore
签名文件;
alias
后跟签名别名;
pswd
后跟对应签名的密码,例如这里是:android 可选,如果不填,则签名的时候需要手动输入;
aliaspswd
对应别名 alias 的密码,如果没有则默认使用keystorePassword
,最后跟待签名的 APK 路径或者目录路径 ,如果跟的是目录则是批量签名;
v1
true(默认)表示使用 v1 签名模式,false 表示不使用;
v2
true 表示使用 v2 签名模式,false(默认)表示不适用;
3.2 V1、V2 签名方案
3.2.1 v1 签名
在 Android 7.0
(即 Android N,Android Api 24
) 以下的版本,只能使用旧签名方案,也就是 v1
签名。
v1
签名使用 JDK
的 jarsigner
工具,对 zip
压缩包的每个文件进行验证,签名后仍可对压缩包进行修改、移动、重新压缩文件。
3.2.2 v2 签名
自 Android 7.0
开始,Google 新增了 v2
签名方案。
v2
签名使用 Google
自带的 apksigner
工具,对 zip
压缩包的整个文件进行验证,签名后不能修改压缩包,包括 zipalgin
。
如果你对 v2
签名的 apk
解压,没有发现签名文件,重新压缩后 v2
签名失效,这说明 v2
签名是对整个 Apk
进行签名验证。
3.2.3 v2 签名相对 v1 签名的优点
因为不能修改压缩包,所以
v2
签名会更安全。v2
签名是对整个Apk
进行签名验证,不需要解压验证,所以签名验证的时间会更短。
3.3 jarsigner 与 apksigner
3.3.1 jarsigner
jarsigner
是 JDK
提供的针对 jar
包签名的工具,如果你本地已经安装了 Java
环境,会自带 jarsigner
,
比如我的 jarsigner
工具的位置在
效果图如下:
3.3.2 apksigner
apksigner
是 Google
官方提供的针对 Android Apk
签名和验证的专用工具,位于 Android SDK / build-tools / SDK 版本 / apksigner
。
以我本地的 Android SDK 30.0.2
版本为例, apksigner
工具的位置在/Users/suxing/Library/Android/sdk/build-tools/30.0.2/apksigner
。
效果图如下:
如果你用的是 Android Studio
或者 IDEA
,安装这两个编辑器时会自动下载 Android SDK
,所以 apksigner
工具也不需要另外安装。
不过,无论是 apk
包还是 jar
包,其本质都是 zip
格式的压缩包,如果只针对 v1
签名的话,两者的签名过程其实差不多。
apksigner
工具默认同时使用 v1
和 v2
签名,以兼容 Android 7
以下的系统版本。
签名后如果包能正确安装到手机(无需运行)则没有问题,如果安装失败请用命令安装:adb install apkfile
查看出错信息。
四、拓展阅读
版权声明: 本文为 InfoQ 作者【No Silver Bullet】的原创文章。
原文链接:【http://xie.infoq.cn/article/62ca31313f73f741866eed6ef】。文章转载请联系作者。
评论