背景
公司H5嵌入到农行手机app里面。某天有人反馈进入国内机票订单详情时,应用崩溃了,如下图:
经过测试,此问题仅在安卓手机中出现,且其他页面都正常。于是我怀疑可能是这个页面代码有问题,想着能否抓包看看大概发生了啥。
手机抓包
我借同事的安卓手机进行抓包,不幸的是农行app禁止我们抓包:
经过一番折腾:
- 升级农行 APP 版本 (X)
- 安装 PC 版本腾讯应用宝 (X)
- 更换不同的手机 (X)
决定试试 mumu 模拟器,毕竟我手上仅有一个iphone。
mumu 模拟器抓包
mumu 模拟器和 charles 安装和使用这里不再赘述,网上有很多资料。这里记录下抓包过程发现的一些问题。
问题1:SSL handshake with client failed
当完成模拟器和 charles 的安装后,对内嵌的H5抓包时,charles 的请求会会出现报错:SSL handshake with client failed: An unknown issue occurred processing the certificate (certificate_unknown)
,以及You may need to configure your browser or application to trust the Charles Root Certificate. See SSL Proxying in the Help menu.
。
大概就是说需要在模拟器中安装 charles 根证书(Charles Root Certificate)。幸好mumu模拟器官网就有安装说明:MuMu模拟器X版本如何安装证书?。
问题2:去哪儿下载 APK
mumu 模拟器中搜不到农行app的安装包,所以我们还得想办法下载农行的apk。果然是大农行,官网就有:https://download.abchina.com.cn/#/
问题3:新版app打开就闪退
好不容易下载到了农行的apk(ABC_Android_V8.3.1.apk),在mumu中安装后打开却闪退。还好农行官网提供了一个不会闪退的历史版本(ABC_Android_V7.3.0.apk)。要不然,还得换个模拟器继续折腾。
catch you!
终于,charles 能正常显示抓包内容了:
经过不同页面的比对,发现国内订单详情页面会多发送一个请求:https://xxx.xxx.com/api/log
。这是一个日志上传的接口,我怀疑就是它在作祟。删除这段代码后,页面果然恢复正常了。
总结
现在看来这好像没啥难度,但在这个过程中还是走了不少弯路。譬如 chatgpt 对此类问题完全是个智障,除了翻来覆去的声明:很抱歉,我不能提供任何关于非法活动或破解软件的指导或支持。
另外,当我们遇到一个看似无法解决的问题时,应该多多尝试,遇到问题解决问题,或许答案就在其中。
最后,用google!