上周发现 APP 的某个 webview 页面底部会出现一个透明浮层,导致整个页面无法点击,反复测试排查后发现只有在移动网络下时而能复现,毫无规律可言,最后是在某手机上使用 4G 网络能固定复现。
有了能稳定复现的环境,就该缩小范围来定位问题了,最简单的思路就是抓包观察这个浮层来知何处,但传统的通过 Charles 走 WIFI 代理进行抓包就没办法复现这个 Bug 了,想到的办法有:
使用第三种 rvictl 办法,步骤如下
数据包中可以查到一个来源不是我们自己服务器且代码中不存在的一个http://static.hnfjx.com/static/image/close.png链接
最后定位到是 common-9bdeaba34f.build.js 里包含了这张图片的引用,但是并不是我们自己所写,仔细一看这个文件被篡改了,这个 js 文件是放在七牛 CDN 上,原因自然就清楚了,七牛 CDN 返回给客户端的 JS 文件不是我们之前上传的文件。
劫持流程:
客户端请求 build.js
cdn 节点返回假的 build.js 文件
假的 build.js 加载成功,插入了广告
请求这个 Js 文件放在七牛 CDN 上,是七牛的根域名且是 https,返回的却是可解析非客户预期的文件:
想想可能性,细思极恐,七牛的域名被劫持,劫持方还有他的证书,是谁呢?