用评分的形式,通过:安全、性能、稳定三个方面去检测评估一款 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 的时候经常性退出需要重新登录 |
由于篇幅所限,评分规则放在报告末尾的 附录。有兴趣的同学可以点击查看
序号 | 类型 | 严重级别 | 描述 |
---|---|---|---|
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 分 |
该文章版权归
TesterHome
的mrbug
团队所有,转载请注明出处