红米音箱Play 开发调试实验 updating



前盖有内扣,拆好之后直接引三根针出来就可以ttl了。

密码 : substr(md5($SN . “5775B10D-15C0-7827-97B9-88EA07FCA97A”), 0, 14),hash salt在 /bin/mi_console 里写死了,根据设备型号判断。

串口波特率115200.

手动启动 ssh。

劫持流量,发现客户端不认第三方的https证书,错误提示是 SSL handshake with client failed: CA certificate could not be matched with a known, trusted CA (unknown_ca)。查了下libxiaomi_http.so,设置了CURLOPT_CAPATH /etc/ssl/certs,然而系统本身是squashfs直接挂载的ro,所以需要曲线救国。

ldd 查看 libxiaomi_http.so,发现引用了 libmbedtls.so libssl.so libcrypto.so,libcurl 的 vtls 里看了下实现,用了 这个函数,同时对比了各个实现,决定还是手工加一下证书。

鉴于系统是readonly挂载的,所以上 overlay 。

这样就可以在 /tmp/certs 里加证书,实现自定义ca。

具体操作我是在一台ubuntu上,把证书pem 文件命名为 .crt后缀放在 /usr/local/share/ca-certificates 下然后执行 update-ca-certificates 再去看 /etc/ssl/certs 里的symlink的hash。

我开发机的charles ca 证书 hash 是 6a3a5fb6.0,所以在我的小爱音箱里,我把证书 pem 文件copy到 /tmp/certs 然后 创建symlink。

再执行 ota check 的实话,观察charles,已经能看到ssl的请求了。



红米音箱Play 开发调试实验 updating by @sskaje: https://sskaje.me/2021/03/%e7%ba%a2%e7%b1%b3%e9%9f%b3%e7%ae%b1play-%e5%bc%80%e5%8f%91%e8%b0%83%e8%af%95%e5%ae%9e%e9%aa%8c-updating/