当年微信跳一跳刚出来时,有使用过 Charles 抓取微信 HTTPS 包直接更改分数的同学一定对这款工具印象深刻。但 Charles 是个收费的闭源软件,另一款 Fiddler HTTPS 分析工具也无从获取源代码。我在使用 ptrace 之后,发现可以将之前实现的重定向工具 graftcp 工作原理应用于 HTTPS 监控及明文分析方面。下面简单说下想法:
- 事先在本地生成 HTTPS 的证书,并添加到系统信任。
- 通过 ptrace 将应用程序的 TCP 流量重定向到一个本地中间工具去,SSL/TLS 握手阶段,这个工具会用本地的证书秘钥和应用程序握手,而自己和目标服务器进行真正的 SSL/TLS 握手。
- 完成握手后,应用程序发送请求的数据,中间工具自然就可以拿到明文了。解密到明文后再用目标服务的公钥进行 HTTPS 数据加密后转发给目标服务器。同样,应答数据也是这般处理转发给应用程序。
拿到得到的明文数据就可以各种分析了。如果要实时查看通信过程,开启 wireshark, 在本地再开一个服务,中间工具实时地把明文转发给它,这样 wireshark 就能监控到这个明文的传输过程了。
这种做法相对于 Charles 监控整个端口所有流量的做法,有个好处:完全不影响其他程序的流量,仅仅被监控的应用程序受到影响。
另外,ptrace 的应用还有许多,比如实现个沙盒系统、通过监控 brk 分析程序的大概堆内存(可能不太现实)。
有时间的话,可能会开个新坑做下概念验证吧...