Link: 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/
前盖有内扣,拆好之后直接引三根针出来就可以ttl了。
密码 : substr(md5($SN . “5775B10D-15C0-7827-97B9-88EA07FCA97A”), 0, 14),hash salt在 /bin/mi_console 里写死了,根据设备型号判断。
串口波特率115200.
手动启动 ssh。
1 2 3 |
cd /tmp dropbearkey -t rsa -f dropbear_rsa_host_key dropbear -r dropbear_rsa_host_key |
劫持流量,发现客户端不认第三方的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 。
1 2 3 |
cd /tmp mkdir certs workdir mount -t overlay -o lowerdir=/etc/ssl/certs,upperdir=/tmp/certs,workdir=/tmp/workdir none /etc/ssl/certs/ |
这样就可以在 /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。
1 2 3 |
cp xxxxxx /tmp/certs/dev-charles.pem cd /tmp/certs ln -s dev-charles.pem 6a3a5fb6.0 |
再执行 ota check 的实话,观察charles,已经能看到ssl的请求了。