测试点:
1、能否反编译代码。
2、安装包是否签名。
3、完整性校验。
4、权限设置检查。
一、能否反编译代码
前言:
一些程序开发人员会在程序源代码中硬编码一些敏感信息,例如密码等。为了避免这些问题,通常开发的做法是对代码进行混淆。混淆后的源代码通过反编译软件生成的源代码是人很难读懂的。
在测试中,我们可以直接使用反编译工具查看源代码,看是否进行了代码混淆,是否包括了显而易见的敏感信息,等等。
例如, Android测试中,常用的反编译方法是使用dex2jar工具并结合jd-gui工
具查看源代码。
工具:
- dex2jar 这个工具用于将dex文件转换成jar文件
下载地址:http://sourceforge.net/projects/dex2jar/files/ - jd-gui 这个工具用于将jar文件转换成java代码
下载地址:http://jd.benow.ca/ - 百度网盘
下载地址:https://pan.baidu.com/s/1sHBvQXvEUZgv7hadM1lEzQ 提取码: qksw
下载好之后,创建一个文件夹,将这两个文件放在一起,并解压。
解压dex2jar压缩包后,你会发现有很多个文件,其中我们要用到的是d2j-dex2jar.bat这个文件,当然如果你是linux或mac系统的话就要用d2j-dex2jar.sh这个文件。
然后我们将 安装包xxxx.apk 文件也进行解压,先将文件后缀.apk 改成 .zip,然后用解压软件打开。解压之后你会发现里面有一个classes.dex文件,如下图所示:
这个classes.dex文件就是存放所有java代码的地方了,我们将它拷贝到dex2jar解压后的目录下,并在cmd中也进入到同样的目录,然后执行:
d2j-dex2jar.bat classes.dex
D:\softwares\APK Decompile (fanbianyi)\dex2jar-2.0>d2j-dex2jar.bat classes.dex
.\classes-dex2jar.jar exists, use --force to overwrite
D:\softwares\APK Decompile (fanbianyi)\dex2jar-2.0>
没有报任何错误,这就说明我们已经转换成功了。现在观察dex2jar目录,你会发现多了一个文件 classes-dex2jar.jar,如下图所示:
但是对于我们而言,jar文件也不是可读的,因此这里还需要再借助一下jd-gui这个工具来将jar文件转换成java代码。
使用jd-gui工具打开classes-dex2jar.jar这个文件,结果如下图所示:
依次进行查看代码是否进行了混淆、是否有敏感信息等。。。
二、安装包是否签名:
这一点iOS平台可能不必考虑,因为iOS的每一个App都有正式的发布证书来签名,
当发布到 App Store时, App Store都会做校验,保证该App是合法开发者发布的。
对于Android来说,由于发布渠道多样,没有此类权威检查,我们需要在发布前校验一下签名使用的key是否正确,以防被恶意第三方应用覆盖安装等问题。我们可以使用下列命令检查(前提需要安装jdk):
jarsigner -verify -verbose -certs apk包路径
如:
C:\Users\admin>jarsigner -verify -verbose -certs "C:\Users\admin\Desktop\Android 安装包\laotie_wallet_V6.3.0_20190605.apk"
.......(中间返回的内容省略)
jar 已验证。
C:\Users\admin>
如果运行后结果为“jar已验证”,说明签名校验成功。
三、完整性校验:
为确保安装包不会在测试完成到最终交付过程中因为各种问题发生文件损坏,需要
对安装包进行完整性校验。通常做法是检查文件的md5值,而且一般可以通过自动化做校验。
Windows 获取md5值: CertUtil -hashfile 【apk路径】 MD5
C:\Users\admin>CertUtil -hashfile "C:\Users\admin\Desktop\Android 安装包\laotie_wallet_V5.7.0_20190530.apk" MD5
MD5 的 C:\Users\admin\Desktop\Android 安装包\laotie_wallet_V5.7.0_20190530.apk 哈希:
c73dc33e7a0a125f354df82b73408818
CertUtil: -hashfile 命令成功完成。
C:\Users\admin>
四、权限设置检查:
一些用户对于自己的隐私问题十分敏感。因此,我们需要对App申请某些特定权限
的必要性进行检查,例如访问通讯录等。对于没必要的权限
,一般都建议开发直接去除。
Android平台上我们可以直接检查 manifest 文件来读取应用所需的全部权限,并结合需求逐一校验此权限是否为必须的。另外,对于 manifest 文件的修改也需要关注。在增加新权限前需要进行评估。