考虑到应用的安全性,建议版本发布前测试人员需要做如下几项验证:

1、签名验证:

 使用开发工具对APK进行debug时就回自动生成APK(比如eclipse会在/bin目录自动生成),但是这个包的签名是debug签名的。但是对于正式发布的版本需要使用正式签名。所以发布之前我们可以按照如下方法对apk进行签名验证。

将待验证的apk重命名为rar格式,然后打开压缩包,取出其中的META-INF文件夹,即签名文件,在里面我们能找到CERT.RSA文件,使用如下命令即可查看签名信息

 

keytool -printcert -file CERT.RSA

 

正式签名的APK和debug签名的APK查询信息分别如下:

正式签名:

所有者: CN=smm, OU=baidu
发布者: CN=smm, OU=baidu
序列号: 53160062
有效期开始日期: Mon Nov 02 23:02:49 CST 2015, 截止日期: Wed Oct 09 23:02:49 CST 2115
证书指纹:
         MD5: DD:C0:89:24:A9:F5:5F:D7:09:00:87:F0:C1:14:E7:FB
         SHA1: 15:6E:FC:D5:F4:03:5A:44:E1:8E:50:82:FE:20:4D:A2:EB:C5:7D:35
         SHA256: E1:EC:06:D3:89:68:6E:CE:BA:3F:5A:71:F3:8C:16:38:A4:C8:5A:72:8A:F0:98:3E:4D:CF:97:9B:D2:D3:5E:F3
         签名算法名称: SHA256withRSA
         版本: 3

扩展:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: AD FA 6C 1A 5C D1 D2 0B   47 CF 2A E7 F6 EC C4 65  ..l.\...G.*....e
0010: F4 CD 95 AF                                        ....
]
]

debug签名:

所有者: CN=Android Debug, O=Android, C=US
发布者: CN=Android Debug, O=Android, C=US
序列号: f3ad4ea
有效期开始日期: Mon Dec 07 08:39:39 CST 2015, 截止日期: Wed Nov 29 08:39:39 CST 2045
证书指纹:
         MD5: EF:64:E5:46:4D:C5:B4:CF:47:6E:72:F6:09:14:41:08
         SHA1: 8F:A9:7D:9E:8F:75:33:00:43:1F:20:45:31:27:08:0D:22:A2:87:3A
         SHA256: 41:3A:18:34:73:A1:07:4C:B9:D3:9B:5E:EF:B0:4A:0D:8C:83:DF:11:08:25:35:2A:BA:54:63:1F:77:44:FD:39
         签名算法名称: SHA256withRSA
         版本: 3

扩展:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: F6 63 05 A9 2D 68 80 6A   08 01 35 A2 0F 2D 72 C7  .c..-h.j..5..-r.
0010: 49 ED 6C 42                                        I.lB
]
]

对比发现debug签名的所有者和发布者为“Android Debug”。

由此我们可以判断需要发布的APK签名是否为正式签名。

 

2、验证APK的debug选项是否关闭

在开发Android应用程序时,我们可以在AndroidManifest.xml中设置其debug属性,如下:
<application


        android:icon = "@drawable/ic_launcher"


        android:label = "@string/app_name"


        android:theme = "@style/AppTheme"


        android:debuggable = "true" >


在调试及测试阶段我们需要打开debug选项,但是对于发布的版本我们需要关闭debug选项。

因此我们在版本发布前需要验证apk的debug选项是否关闭。

既然debug属性写在xml文件中,那么我们检查AndroidManifest.xml文件即可。但是对于测试人员来说都是从研发那里得到的apk,此时解压apk得到的xml是经过编译,无法直接阅读的。

我们可以借助appt工具进行查看,命令如下:

aapt list -v -a XXX.apk

这个命令将会打印和apk相关的所有详细信息,包括AndroidManifest.xml详情。所以我们可以把该命令的输出重定向到本地文本中,然后从该文本中即可查到debug信息是否关闭。

appt工具下载:

 

3、验证代码是否混淆

由于现阶段Android APK非常容易反编译,所以考虑到代码安全,对于需要release的APK在编译前一定要对器代码进行混淆。

要对代码混淆进行验证,我们先来看下怎么对APK反编译。

上面说过,APK其实都是压缩包,我们把APK重命名为RAR格式后打开,然后解压获取其中的classes.dex文件,所有的源代码都在其中了。

我们借助工具dex2jar即可将其转换为jar包:

dex2jar工具:

将获取到的classes.dex放到dex2jar文件夹中,然后打开cmd窗口进入到dex2jar文件夹,执行如下命令即可获得转换后的jar包:

$dex2jar.bat classes.dex
this cmd is deprecated, use the d2j-dex2jar if possible
dex2jar version: translator-0.0.9.15
dex2jar classes.dex -> classes_dex2jar.jar
Done.

然后使用jd-gui工具打开我们获取到的jar包,即可查看到该apk的所有代码。

所以我们检查代码是否混淆的方法也就是按照上面的方法获得jar包,然后看jar包中的代码是否具有可读性。

 

暂时整理这三点,后面想到的会加进来。