Bootstrap

Android apk安全测评、应用加固、字节对齐、二次签名(有这一篇就够了)

本文将通过前言、apk安全测评、应用加固、字节对齐、二次签名、总结共6大版块来阐述

一、前言

评判一个App是否出色,除了看它的性能、体验外,本人认为最为重要的是它的安全性。市面上apk安全评测、加固、二次签名的软件不少,但本人比较喜欢也经常使用的是腾讯云。本文也将以腾讯云 — 移动应用安全的使用为开端,按步骤详细阐述后续4大版块的使用流程。

二、apk安全测评

apk安全测评、应用加固都是通过腾讯云 — 移动应用安全来实现的。由于腾讯云早前下架了“乐固”,导致现在只能通过网页端在线实现上述功能。“乐固”这款软件,集成了包括安全测评、加固、对齐、二次签名的所有功能,但至于为什么下架该款软件,我也不得而知。网上有很多第三方的下载地址,不是很建议去下载安装,会有很多捆绑软件,软件是否被篡改也不得而知。

第一步肯定要登录:点击跳转登录页

登录成功后,按照下图所示,依次点击红框标识的1、2:
安全评测
选择需要上传的apk文件,上传成功后显示如下图所示界面,点击“确认测评”按钮后并等待一段时间(apk越大时间越长,需要耐心等待)。测评结束会显示测评结果,可以在结果中查看该应用存在的漏洞风险(会在漏洞风险展示页详细显示所有可能存在的风险,并标明了风险等级和代码修改建议,这点本人比较喜欢)。
确认测评

三、应用加固

如下图所示,依次点击红框标识的1、2,按照步骤选择完apk文件并等待加固完成后,会在下方列表展示加固结果信息:
应用加固
查看加固结果如下图所示,在图中可以看到,下载的加固包需要重新签名,否则该加固包是不能够安装的。如何二次签名,继续往下看。
加固结果1

四、字节对齐

字节对齐的好处是帮助操作系统更高效率的根据请求索引资源,降低内存消耗
Android SDK自带字节对齐工具zipalign,二次签名前,最好先进行字节对齐操作(一般为4字节对齐)。虽然Android Studio打包的apk是默认经过字节对齐的,但是由于经历过应用加固步骤,不能保证该应用中的数据还处于对齐状态,以防万一,再进行一次字节对齐操作。当然,不进行字节对齐操作也是可以的,应用还是可以正常使用的。

进行字节对齐的步骤如下所示(下面提到的apk文件操作都是上文中下载的加固包):

  1. 修改apk文件的后缀名为 .zip(其它压缩格式也可以,主要是为了用压缩软件打开该文件),修改完成后打开该文件,删除下图中红框选中的“META-INF”文件夹(该文件夹经过应用加固后,签名信息已经被删了,多了一些杂七杂八的文件,没什么用。如果不删除该文件夹,后续二次签名就无法成功);
    安装包的文件
  2. 删除成功后,将该文件的后缀名重新改为 .apk
  3. 将该文件复制到zipalign工具所在目录;
    build版本
    该工具位于sdk\build-tools\build版本目录下,本人选取的build版本为29.0.3
    zipalign工具目录
    上图所示,红框1中的zipalign.exe即为字节对齐工具,将需要对齐的apk文件放到该工具的同级目录下,例如上图红框2所示。
  4. 键盘Win+R,输入cmd,打开命令提示窗口,cd到压缩工具所在目录;
    cd
  5. 继续输入zipalign.exe -v -p 4 input.apk output.apk(命令中的input.apk为需要对齐的apk文件名,output.apk为对齐完成后输出的apk文件名);
    对齐开始
    中间省略一大段运行中输出的代码…
    对齐结束
    如上图所示,运行结束,出现红框中的代码,表示字节对齐成功,同时可以在目录中看到多了个字节对齐成功后的apk文件,如下图所示:
    对齐成功输出

五、二次签名

签名工具SDK也是自带的,apksigner。该工具位于字节对齐工具同级目录lib的下一级,如下图所示:
签名工具目录
上图红框1即为签名工具,红框2为第4版块中字节对齐输出的apk文件,红框3为该apk文件的签名文件。(红框2、3表示的文件需要跟签名工具在一级目录下)
接着,继续在命令提示窗口中依次输入:

cd lib
java -jar apksigner.jar sign --ks key.jks --ks-key-alias releasekey output.apk

key.jks为签名文件,releasekey为签名文件的别名,output.apk为上图红框2所示的apk文件。例如下图所示:
签名
命令中的签名文件别名由于隐私原因,就隐藏了,大家替换成自己签名文件的别名即可。如果命令行输入没有任何问题,会在下方显示输入Keystore密码的指令,如上图最后一行所示Keystore password for signer #1: (这里需要注意:输入密码的时候命令提示窗口是不会有任何字符显示的,估计是为了隐私安全,输入完成后直接Enter就行了)。

签名成功,在命令提示窗口不会有任何提示;反之则有错误提示。只需查看目录中红框2的apk文件修改日期是否改变,例如下图所示:
签名成功的目录
时间较之前最初的,变成签名命令执行成功后的时间。想要确保签名成功,也可输入下述命令查看:

java -jar apksigner.jar verify -v output.apk

其中的output.apk为签名文件的文件名,例如上图中的test_align.apk,签名成功结果如下图所示:
签名查询

六、总结

至此,从安全测评到二次签名整一个流程就结束了。大家有什么问题可以提,本人看到后会在第一时间解答。

;