We are Mr Bug ! We are App Bug Hunter !!!

目的

用评分的形式,通过:安全、性能、稳定三个方面去检测评估一款 APP。

活动简介

总分

总分为 61.54 * 33.3%(安全)+ 67.44 * 33.3%(性能)+ 84.0 * 33.3%(稳定性)= 70.99 分

体检结果概要

得分详细信息

安全

检查项 满分 得分 说明
本地数据敏感信息均经过加密 3.85 0.0 发现 cookies 数据库
本地数据没有明文存储的敏感信息 3.85 0.0 shared_prefs 目录下 MYINFO.xml 文件中暴露了用户名,如果是手机号的话就很麻烦
本地数据篡改检测 3.85 3.85 修改数据后,更换 xml 文件后应用没有提醒,但是会被覆盖掉
使用 https 7.69 7.69 网络连接主要有两类,一类是操作事件类,主要收集用户操作信息,采用 http ;另一类是业务类,主要是 app 的功能(登陆、注册、投资等主要操作),采用 https
不允许使用自定义 ssl 证书 3.85 3.85 把抓包工具的 ssl 证书加入到系统信任证书并设置代理后,所有 https 通讯均会失败(握手时会检查出使用的不是京东的证书)
敏感信息加密传输 7.69 7.69 所有包含敏感信息的网络包均通过 https 通道,且不支持第三方证书,难以解密
数据包防篡改校验(服务端) 7.69 7.69 由于无法篡改网络包,故此扫描项无法进行
数据包防篡改校验(客户端) 7.69 7.69 由于无法篡改网络包,故此扫描项无法进行
DNS 劫持校验 3.85 3.85
权限扫描,除少量与外部沟通的组件外其他组件不允许外部调用 7.69 0.0 扫描结果显示有 36 个 activity ,4 个 broadcast receiver 和 4 个 services 可被外部调用。
各 activity 接收空/具有非法值的 intent 后保持稳定 3.85 3.85 有些 activity 传入空 Indent 后回出现 NullPointException ,但应用会改为启动 MainActivity ,不会崩溃
content provider 防 sql 注入 3.85 3.85 content provider 不能被外部调用
content provider 防遍历文件 3.85 3.85 content provider 不能被外部调用
DEX 加壳保护,防止静态反编译直接获取源码 7.69 0.0 无防护,apktools 直接反编译
资源文件加密,防止直接查看或修改资源文件 3.85 0.0 无防护,可直接获取资源文件
反二次打包,使二次打包时无法成功或打包后的 apk 无法安装使用 7.69 0.0 无防护,可植入第三方代码重打包
so 文件保护,防止高级调试工具对 so 文件进行动态调试获取接口等敏感信息 3.85 0.0 未做防护,so 文件可反编译,可打断点调试
屏蔽日志输出流中的 info、debug 等信息 3.85 3.85
核心业务中无敏感信息在日志中输出 3.85 3.85

性能

检查项 满分 得分 说明
内存 不超过 80M 11.11 5.28 实际内存峰值为 122 M
流量 页面消耗不超过 200KB 11.11 9.44 实际页面消耗达到 230 KB
耗电量 每小时不超过 300 mAh 11.11 11.11 实际耗电量为 300 mAh
页面重绘 3x 和 4x 重绘不超过 1/3 11.11 0.0 实际 3x 和 4x 重绘超过 1/3 的页面有 20 个
无内存泄露 11.11 8.89 内存泄露点有 1 个
无内存抖动 11.11 6.67 内存抖动点有 2 个
帧率不小于 10 11.11 7.78 最低帧率为 7 fps
启动时间 热启动时间不超过 3s 11.11 7.16 综合时间取全新启动。启动时间为 6.1s
响应时间 关键业务响应时间不超过 3s 11.11 11.11 关键业务最大响应时间为 2.26s

备注:其中 内存抖动、内存泄露 采用的测试机为 小米 红米 Note1 ,其它项为 Mi3 联通版。详细内容请看 设备配置

稳定性

检查项 满分 得分 说明
弱网环境跑 monkey 异常概率低于万分 7 10.0 6.0 (ANR)异常 2 次
无网环境跑 monkey 异常概率低于万分 7 10.0 10.0 正常
正常网络环境跑 monkey 异常概率低于万分 7 30.0 30.0 正常
无后台进程应用持续运行 10 小时无异常情况 20.0 20.0 正常
系统 Cpu 占用率高于 80% 以上持续运行 5 小时无异常退出 10.0 8.0 (ANR)异常 1 次
在测试过程中无明显 crash,卡顿等等情况 20.0 10.0 测试过程中和跑 monkey 的时候经常性退出需要重新登录

由于篇幅所限,评分规则放在报告末尾的 附录。有兴趣的同学可以点击查看

Bug List

序号 类型 严重级别 描述
1 内存溢出 P0 拍立返时,点击拍照,屏幕卡在转圈 loading 界面,日志出现 out of memory
2 内存泄露 P0 MAT 分析内存情况时发现内存泄露嫌疑对象:com.wangyin.maframe.cache.ImageMemoryCache
3 其他体验问题 P1 在测试过程中经常出现要求重新登录,体验不是很流畅
4 内存抖动 P1 在用户余额页面切换至京东小金库模块会有明显内存抖动
5 内存抖动 P1 在使用扫一扫时,存在明显的内存抖动
6 界面重绘 P1 至少 20 个界面出现 3x 或者 4x 重绘
7 功能 P1 电影票 - 观看影片预告片,点击左上方关闭按钮,仍然在播放视频
8 功能 P1 在操作过程中至少遇见三次突然需要重新登录的情况
9 安全 P1 apk 包可直接被 apktools 等工具反编译得到源码与资源文件
10 安全 P1 反编译得到的源码,经过二次修改后可直接打包成新的 apk 文件,可注入病毒与广告
11 内存峰值 P2 在界面间频繁操作,内存占用峰值,达到 122M
12 帧率 P2 操作界面过程中,帧率一般在 10 以下,较卡顿
13 安全 P3 修改手势密码的界面可通过外部 indent 启动,若此时京东钱包在后台运行并处于已登录状态,将可直接修改手势密码,绕过界面上必须先输入登录密码才可修改手势密码的限制
14 启动时间 P3 启动时间较长,平均启动时间达到 6.1s
15 体验 P3 手势密码部分划较快时,可能出现中间经过的点没有滑到
16 安全 P3 反编译后,libWangyinCryptoLib.so 等加密库可直接断点调试
17 流量 P4 随机打开活动页面,流量最大达到 230kb
18 安全 P5 shared_prefs 目录下 MYINFO.xml 文件中暴露了用户名(若包含其他信息则可能出现泄漏)

总体结论

安全

好的地方:

不好的地方

性能

好的地方:

不好的地方

稳定

好的地方:

不好的地方




附录

评分规则

安全

检查项 检查项说明 权重(该检查项基础分) 评分方式
本地数据敏感信息均经过加密 检查 /data/data/、/sdcard/ 及其他应用使用到的存储的数据是否经过加密,尝试使用主流解密方法进行解密 3.85 通过得所有分。不通过 0 分
本地数据没有明文存储的敏感信息 本地没有经过加密的存储数据均非敏感信息(如密码、金额、cookie、token) 3.85 通过得所有分。不通过 0 分
本地数据篡改检测 当手动篡改本地存储数据后,应用能检测到此篡改并自动修正并给出警告 3.85 通过得所有分。不通过 0 分
使用 https 使用 https 进行加密通信 7.69 通过得所有分。不通过 0 分
不允许使用自定义 ssl 证书 应用中校验 SSL 证书是否为此应用对应后台的 SSL 证书。由于 Android 可以通过设置信任第三方证书(如 fiddler 的证书),因此如果信任所有系统信任证书会造成 https 被解密。 3.85 通过得所有分。不通过 0 分
敏感信息加密传输 数据包中所有敏感信息加密传输(包括但不限于密码、金额、用户个人信息) 7.69 通过得所有分。不通过 0 分
数据包防篡改校验(服务端) 不接受一模一样的两个数据包(有可能第二个包是 replay 出来的),不接受手工更改过数据包参数的数据包(需要有个类似 CRC 校验的值检验数据包内容是否被篡改) 7.69 通过得所有分。不通过 0 分
数据包防篡改校验(客户端) 不接受一模一样的两个数据包(有可能第二个包是 replay 出来的),不接受手工更改过数据包参数的数据包(需要有个类似 CRC 校验的值检验数据包内容是否被篡改) 7.69 通过得所有分。不通过 0 分
DNS 劫持校验 接口地址若使用域名应校验服务器是否正确(例如每个数据包中包含自定义规则的 token )。若使用 ip 地址则此项直接通过。 3.85 通过得所有分。不通过 0 分
权限扫描,除少量与外部沟通的组件外其他组件不允许外部调用 使用 drozer 运行 run app.package.attacksurface ,检查允许外部调用的组件是否确实必须允许外部调用 7.69 通过得所有分。不通过 0 分
各 activity 接收空/具有非法值的 intent 后保持稳定 使用 drozer 运行 run app.activity.start --action --category --component 检查各 activity 接收空/具有非法值的 intent 后反应 3.85 通过得所有分。不通过 0 分
content provider 防 sql 注入 使用 drozer 运行 run scanner.provider.injection -a 检查是否存在 sql 注入漏洞 3.85 通过得所有分。不通过 0 分
content provider 防遍历文件 使用 drozer 运行 run scanner.provider.traversal -a 检查是否能遍历 content provider 的文件 3.85 通过得所有分。不通过 0 分
DEX 加壳保护,防止静态反编译直接获取源码 使用 apktool、apkIDE、Apk 改之理/androidkiller 进行逆向获取资源。DEX 有做加壳加固/有加入花指令更好,最终无法直接得到 Java 源码 7.69 通过得所有分。不通过 0 分
资源文件加密,防止直接查看或修改资源文件 使用 apktool、apkIDE、Apk 改之理/androidkiller 进行逆向获取资源。资源文件有做压缩加密等操作,无法直接查看 3.85 通过得所有分。不通过 0 分
反二次打包,使二次打包时无法成功或打包后的 apk 无法安装使用 使用 apktool 进行重打包。有对核心代码做高级混淆欺骗,使二次打包失败或打包后的 apk 无法使用 7.69 通过得所有分。不通过 0 分
so 文件保护,防止高级调试工具对 so 文件进行动态调试获取接口等敏感信息 使用 IDA、JEB 等工具进行动态调试。对 so 文件有加密或隐藏,防止被 IDA 等工具直接动态调试 3.85 通过得所有分。不通过 0 分
屏蔽日志输出流中的 info、debug 等信息 3.85 通过得所有分。不通过 0 分
核心业务中无敏感信息在日志中输出 3.85 通过得所有分。不通过 0 分

性能

设备配置

检查细则

检查项 检查项说明 权重(该检查项基础分) 评分方式
内存 不超过 80M 11.11 小于 80M 为满分,大于 80M,为 权重 *(1-(x-80)/80)
流量 页面消耗不超过 200KB 11.11 小于 200KB 为满分,大于 200KB,为 权重 *(1-(x-200)/200)
耗电量 每小时不超过 300 mAh 手机要处于未充电状态,测试场景分 3 个:1).高负荷操作 1 小时 (高频率使用或者跑 Monkey)。2).中等负荷操作一小时 (平时正常使用频率)。3).低负荷操作小时 (程序处于后台)。 11.11 小于 300mAh 为满分,大于 300mAh 为 权重 *(1-(x-300)/300)
页面重绘 3x 和 4x 重绘不超过 1/3 11.11 小于等于 2 个为满分,大于 2 个每个扣权重的十分之一分。超过 12 个零分
无内存泄露 11.11 0 个为满分,大于 0 个每个扣权重的十分之二分。超过 5 个零分
无内存抖动 内存是否发生抖动:这个地方要从两方面检测,一个是自然抖动,就是无任何操作情况下,是否发生抖动。第二个情况是点击才会出现内存突然增加或减少,频繁操作查看是否出现抖动。若发生抖动,与具有相同功能的其他 App 进行对比,如果对比 App 不发生抖动,则可认为待测 App 存在问题。 11.11 0 个为满分,大于 0 个每个扣权重的十分之二分。超过 5 个零分
帧率不小于 10 11.11 大于 10 为满分,否则为 权重 *(1-(10-x)/10)
启动时间 热启动时间不超过 3s 综合启动时间为全新启动,冷启动,热启动三项平均值 11.11 小于 4.5s 为满分,否则为 权重 *(1-(x-4.5)/4.5)
响应时间 关键业务响应时间不超过 3s 11.11 小于 3s 为满分,否则为 权重 (1-(x-3)/3)

稳定性

检查项 检查项说明 权重(该检查项基础分) 评分方式
弱网环境跑 monkey 异常概率低于万分 7 9.6K/s~19.8K 网络环境进行 monkey 测试,随机事件数量大于 100 万运行时间大于 5 小时 10.0 通过基础分为权重,异常一次扣 2 分。不通过 0 分
无网环境跑 monkey 异常概率低于万分 7 无网进行 monkey 测试,随机事件数量大于 100 万运行时间大于 5 小时 10.0 通过基础分为权重,异常一次扣 2 分。不通过 0 分
正常网络环境跑 monkey 异常概率低于万分 7 正常环境进行 monkey 测试,随机事件数量大于 100 万运行时间大于 5 小时 30.0 通过基础分为权重,异常一次扣 2 分。不通过 0 分
无后台进程应用持续运行 10 小时无异常情况 20.0 通过基础分为权重,异常一次扣 2 分。不通过 0 分
系统 Cpu 占用率高于 80% 以上持续运行 5 小时无异常退出 10.0 通过基础分为权重,异常一次扣 2 分。不通过 0 分
在测试过程中无明显 crash,卡顿等等情况 20.0 通过基础分为权重,异常一次扣 2 分。不通过 0 分

该文章版权归TesterHomemrbug团队所有,转载请注明出处


↙↙↙阅读原文可查看相关链接,并与作者交流