一直没去系统的学习APK的测试,年底有些时间,正好总结一下,不会对所有测试项进行说明,只是记录测试过程中的操作比较麻烦的一些点。
1.安装包签名
命令很简单:jarsinger -verify -verbose -certs xxx.apk
在Android中,包名相同的两个APK会被认为是同一个应用,但由于包名可以由开发者自由设置,所以需要对APK进行签名加以识别。如果APK没有使用自己的证书进行签名,将会失去对版本管理的主动权,甚至可能导致官方的安装包被篡改传播,造成安装被篡改的版本的用户的隐私信息泄漏。
2.客户端程序保护
这项主要是测试加壳和混淆。
脱壳破解技术是安全的另外一个方向,暂时还没有学习的计划 0_0,只能介绍下具体的测试方法。目前大部分APK都是利用安全公司的技术来加壳,各个公司的壳都会带有一定的特征,可以依靠这些特征来实现壳的识别,网上找到了这样一款工具,就前期使用的情况来看效果还可以:
已加壳的APK可以认为是安全的,但对于未加壳的APK,就需要通过反编译来查看代码混淆情况进而确定风险等级了。
1 ) 将APK后缀改为zip,对其解压,得到 classes.dex 文件
2 ) 执行命令:dex2jar.bat classes.dex,得到classes-dex2jar.jar文件
3 ) 使用jd-gui查看打开jar文件,查看代码是否混淆
3.应用完整性检测
完整性校验主要是为了防止应用被重打包,通常的测试步骤如下:
1 ) 对APK文件进行解包,命令: java -jar apktool.jar d -f [APK文件地址] -o [输出文件夹]
2 ) 修改资源文件(建议修改assets或是res/raw文件夹中的文件)
3 ) 重新打包成未签名的APK文件,命令:java -jar apktool.jar b -f [待打包的文件夹] -o [输出路径]
4 ) 对apk文件进行签名,这里图方便我使用一键签名工具对安装包进行签名
5 ) 安装apk,查看修改是否生效
4.组件安全
检测方法有两种,一个是反编译apk,查看AndroidManifest.xml的内容,查找android:exported="true"的标签或是配置了intent-filter而未设置android:exported=“false”的标签。
还有一种方法是使用Drozer来查看。(Drozer的安装可参考这里)
由于我的测试环境是夜神模拟器,所以使用Drozer前需要输入命令:adb connect 127.0.0.1:62001,建立连接(若出现错误,可能是adb版本不同导致的,可尝试将android sdk中的adb文件复制到夜神安装目录的bin目录下,并重命名为nox_adb.exe进行替换)。
建立连接后转发31415端口,命令:adb forward tcp:31415 tcp:31415
再cd到Drozer的安装目录,执行:drozer.bat console connect,即可进入Drozer
组件安全漏洞的具体利用可以查看这里(注意查看参考链接,有瘦蛟舞的文章)
本来还有几个测试项要写的,但由于某些不可描述的原因就不写了:-) ,OVER~
--------------2018-03-13增加Android安全学习思维导图