使用Wireshark抓包解析macOS钉钉视频回放下载地址

背景

上上周末我参加了《陶辉的网络协议集训班》。这是极客时间在疫情环境下做的线上视频直播课,是仿线下段时间集中高强度培训的尝试。这个课程使用钉钉授课,视频回放在钉钉内不提供下载且只能看7天。虽然我知道我即使下载下来也可能不会再看,但是我就是手痒痒想下载下来。那究竟应该如何下载呢?

题外话: 我报这个班有两个目的,一个是这些年来我本身因为工作接触和个人兴趣就在网络协议和抓包方面积累了不少经验,已经完成了大学阶段集中学习理论->工作实践遇到问题->通过理论解决并零散深化理解理论 的过程,需要系统性的梳理和总结,再一次完成理论化。另外也通过这种形式感受下工作性质的技术培训的套路和方法,为后续给团队进行培训建立概念。实际感受是对应我7年的经验,深度确实不够,但系统性和广度是到位的。相信这是为了平衡受众做出的选择,做成一次提纲挈领式的梳理,并且包含一定的实践。这次明显的3个收获是
– 浏览器系加密库采用环境变量导出关键信息配合Wireshark进行抓包解包
– 系统性讲解了HTTP2/HTTP3的协议,比较有收获
– 讲解TLS1.3和OCSP,对于实践有重大帮助

总体感觉还是不错的。

方法

用啥方法呢?虽然钉钉应用页面上禁止了下载,但可以观看。所以说这大概率是业务上做了限制,但通过抓取观看资源链接的方式肯定能成功。

于是就转化成了如何抓取HTTPS的内容的问题。之前我曾经自己使用过的方法是使用自签名的公私钥对,在被抓包系统上信任自签发的根证书,搭建中间人代理劫持连接,并在中间人处强行使用RSA进行密钥交换来进行Wireshark抓包,然后因为已知私钥所以所有TLS通信全部都能正常解密。这个操作在之前是没问题的,但现在这个手段不太好使了。主要是有两个问题

  • 客户端只信任特定根证书
  • 客户端或浏览器逐渐禁用了RSA密钥交换

那今天正好学了新方法,即让浏览器读取环境变量并把关键信息导出到日志,再进行抓包解密。何不直接试试呢?

实操

首先打开Wireshark并选择正确的网卡开始抓包
然后执行以下命令

然后在钉钉应用中挨个把回放视频都点开一遍。

然后点击上方菜单栏Wireshark,在下拉菜单中选择Preferences,再在左侧选中Protocols,再选中TLS。在(Pre)-Master-Secret log filename提示下方选择导出的/tmp/sslkey.log文件,然后点击OK

此时稍等片刻,已经抓到的包中被记录了加密相关参数信息的连接就已经被解密了

接下来进行观察,我发现确实出现了一些m3u8和ts的记录。所以为了批量过滤出链接,我这里使用了http2.headers.path contains ".m3u8?"作为过滤条件,然后得到了下图

可以看到链接已经被导出来了。

然后直接进行下载,使用

直接进行下载即可。

总结

使用Electron或CEF类做基于H5的应用时,一定程度上认为关掉调试使用HTTPS就可以达到一定的安全效果,如果有一定的反分析手段需求,其实类似这样的机制还是要加以注意的。不过严格讲这只是个成本问题,做好权衡取舍不留明显的低成本手段即可。