Android App抓包、Mock数据探索

一、背景

        客户端在开发过程中,经常遇到以下问题:

  • 服务经常挂掉
  • 制造数据的过程繁琐
  • 正在发布,需慢慢等
  • 服务端正忙,事情优先级靠后
  • 服务端修改数据,会影响测试过程
  • 只定义好了接口,客户端进度被Block

二、收益

        客户端在开发过程中,Mock数据的意义:

  • 团队并行工作

        前后端人员定义好接口文档,就可以开始并行工作,互不影响。有利于整个产品质量以及进度的保证。

  • 隔离系统

        构造的虚拟请求响应,不会造成服务端接口真实数据的污染。

  • 快速排查和定位问题
  • 降低沟通和时间成本

三、方案

1.   第三方系统

        SDK + 管理后台

  • 被相关政策限制

Android App抓包、Mock数据探索_第1张图片

  • 只支持Android系统

        参考玩安卓APP

2.   APP网络框架拦截

        OkHttp / ...

Android App抓包、Mock数据探索_第2张图片

Android App抓包、Mock数据探索_第3张图片        不足:

  • 每次修改后,都需要编译
  • 书写Json String容易出错

3.   抓包工具重定向

        Charles / Fiddler

          原理:中间人攻击 

Android App抓包、Mock数据探索_第4张图片

        Android 对 HTTPS 的限制,通常来自 2 个方面:Android 系统自身的限制开发者加强了 CA 验证

        Android 高版本系统(Android 7.0+)将不信任用户自行安装的 CA 证书,导致验证不通过。

        针对这种情况,有如下几种解决方案:

  1. 可打包 Apk:配置 networkSecurityConfig,针对此 App 信任用户证书;
  2. 可打包 Apk:调低 targetSdkVersion 至 24 以下;
  3. 不可打包 Apk:采用「平行空间(v4.0.8625 以下)」版本的 App 运行后抓包;
  4. 不可打包 Apk:系统 Root 后,将 CA 证书装入系统目录;
  5. 换个 Android 7.0 以下的设备抓包;

        针对可自行打包的 Apk,通常会设置内部测试版本和对外发布版本,以不同的打包策略来做隔离。

        除了 Android 系统自身的约束外,开发者还会加强 App 的 CA 验证,通常的技术手段有「公钥证书固定」和「双向认证」。

        针对公钥证书固定,解决方案有:

  1. 利用 Xposed 的 JustTrustMe 插件破解,Hook 相关流程将固定证书移除;
  2. 利用 VirtualApp 加入 Hook 代码,原理与 JustTrustMe 类似;
  3. 导入真正的公钥证书和密钥(仅适用于内部使用);

        再就是双向认证,广义上的 HTTPS,通常只做了客户端验证服务端,实际上 HTTPS 是可以做到双向验证的,针对双向验证的 App,可使用 HttpCanary 导入证书,并通过逆向的手段拿到私钥进行破解抓包。


     为什么使用Charles / Fiddler,而不使用Wireshark工具?

  • Wireshark可运行在Windows和Mac OS上,但使用者需要了解网络协议
  • 为了安全考虑,Wireshark只能查看封包,而不能修改封包的内容,或者发送封包
  • Charles/Fiddler专门用来捕获HTTP、HTTPS。而Wireshark虽然能获取HTTP、HTTPS,但是不能解密HTTPS,所以Wireshark更适合其他协议,比如:TCP、UDP

        Wireshark与对应的OSI七层模型:

Android App抓包、Mock数据探索_第5张图片

        Chalers界面友好、跨平台、易破解:

Android App抓包、Mock数据探索_第6张图片

Android App抓包、Mock数据探索_第7张图片

        1. Map Local

        将指定的网络请求重定向到Local文件,但是会局限于文本类型的接口

        2. Map Remote

        将指定的网络请求重定向到另一个URL,一般搭配下一节介绍的Mock服务使用

4.   搭建Mock服务

        PC + Mobile + 网络分析工具 + 服务器

Android App抓包、Mock数据探索_第8张图片

  • Charles分析工具

        Map Remote

  • 模拟数据服务器

        mocky.io / 内网搭建Mock服务

        伪造Url和数据

Android App抓包、Mock数据探索_第9张图片

        配置Map Remote到Url

Android App抓包、Mock数据探索_第10张图片

        再次请求接口,返回Remote的数据

Android App抓包、Mock数据探索_第11张图片

        内网搭建Mock服务的优点:

  • mocky.io将来可能关停
  • 多端共享修改后的Response内容
  • 某些公司有网络限制,例如:杀毒防火墙

 Android App抓包、Mock数据探索_第12张图片

        IP:端口  =》 域名

Android App抓包、Mock数据探索_第13张图片

Android App抓包、Mock数据探索_第14张图片

 5.   网络框架拦截 + APP工具

        可视化编辑、跨进程Mock API

参考:

太干了,Android 抓包姿势总结!

我们一起学Mock

Wireshark 基本介绍和学习 TCP 三次握手

Nginx 最全操作总结

模拟服务器返回数据

Android MOCK HTTP 接口新方式

Android 高版本 HTTPS 抓包解决方案及问题分析!

天天给 App 抓包,还不懂 HTTP 代理吗? | 实用 HTTP

长连接场景下安全token的设计

AppMock 工具设计及原理

App实战:移动端Mock Api的几种方式

常见MOCK-SERVER对比

charles工具抓包教程(http跟https)

Android7.0以上Charles抓包及安装证书

Charles的Map Remote和Map Local功能和使用介绍

Charles 激活码计算器

你可能感兴趣的:(Java,Android,android,java,apache,mock,抓包)