Steam Link另类玩法,打通家庭流媒体任督二脉

由于众所周知的一些历史原因,虽然大部分电视里跑着的是一个安卓系统,但这个系统却并不怎么自由;比如除了在电视上看视频除了购买视频网站的会员外,还需要额外购买一个“电视会员”,虽然名称繁多但本质上就是要给广电交税。

不过广电管不着电脑、手机,所以很多时候可以通过“投屏”的方式绕过。不过投屏的坏处是直投竟然会冒出广告,镜像投屏又经常不稳定。比较好的方式是直接把电视当成一个显示器用,接上电脑就可以想看啥看啥了。不过这样的方式也有一些弊端。

比如我的一个很典型的应用场景,我喜欢看B站的一个游戏直播。B站的“非官方客户端”的确非常的好用,操作逻辑简单运行也很流畅,但是唯一缺少的就是观看直播功能(其实本来是悄悄地加上了这个功能,后来不知道为什么又下了)。所以我只能在客厅的大电视插上一个笔记本来观看。

有时候经常看着看着就有点困,想去卧室使用卧室的投影看,结果呢就需要把笔记本从客厅转移到卧室。这个过程需要拔插显示器插头和电源适配器,还得移动电脑,对于一个已经“有点困”的我来说实在是有点过于“提神醒脑”了点……除了拔插麻烦,还给客厅和卧室多了一堆不美观的线缆。

为此我甚至尝试在电视上装了个B站的手机端apk,确实够得着“能用”。那个app在电视上会有很多奇怪的bug,比如无法正常退出播放界面,需要点击送礼再退出才能正常退出。还有各种操作逻辑也并没有对电视进行优化,我需要额外在电视上插一个鼠标才能正常的使用。我甚至还想过是不是要自己写一个app专门给我自己用。

一次偶然的机会我尝试使用Steam Link在电视游玩书房台式机电脑上的游戏。游玩的体验还可以,延迟在可接受的范围之内。但是更加令人震惊的发现是这个Steam Link模式的大屏幕是可以最小化的。最小化后就可以调出桌面,可以用连接电视的手柄控制。于是我打开浏览器点开了B站的直播……发现效果出奇的完美,没有延迟、没有卡顿、没有色差、满帧流畅!

同时我还发现了很多额外的好处,比如我可以使用手机连接电脑把手机当成遥控器;或者我可以在洗澡的时候打开手机无缝观看客厅电视的内容;以及那个从客厅到卧室的场景再也不需要移动任何东西了,打开投影,点开Steam Link的App,完成。Steam Link让台式机成了家里各种智能设备的内容中心,让台式机强大的GPU性能可以发挥在各种有屏幕的设备上,忽然间家里的各种智能设备就像点开了“任督二脉”,全部可以无缝衔接了。

当然,使用这个方案的前提是各个设备间有稳定的网络连接。为此我专门把之前开发商接的电话线给拆了重新打了水晶头,才让内网的网线上升到千兆的速度(虽然一个设备100M就够用了,但是同时多个的话一定还是要保证内网有千兆的速度的)。

配置方法也很简单:

1.需要一台基本上不怎么关机的Windows台式机,在台式机上打开Steam客户端。

2.在内网的另外的设备上下载Steam Link App(各大应用商店都能下到),根据提示操作配对就能够连接完成了。

3.需要获取台式机内容的时候只要随时打开App连接就可以了。App内可以设置是否默认显示桌面。控制可以使用手柄连接电视控制,右摇杆是鼠标,右板机健是鼠标左键。

尝试Hack自己的车

背景

自从有了车之后生活方便了很多。我的车是 Lexus NX 300h,开起来没什么毛病,动力平顺且充沛,省油,行驶质感也不错。但是美中不足是车自带的导航不太好用,不支持 CarPlay。在 2019 款后雷克萨斯在国外的车都是自带 Carplay 的,并且放出了固件可以让 2018款的车升级支持 Carplay 的版本。见链接:https://camryupdate.home.blog/2019/08/26/carplay-update-files/

经过

根据文档,只要把固件下载下来放到U盘里,然后把U盘插到车机上,在车机上选择更新程序就能将固件刷入。但是这里有个问题是,提供的固件是供给北美市场的,和大陆市场的固件不一样。

我的车机的ID 17LDLMCN-EB02 而需要的车机ID为 17LDL1NA-EB02。根据各种信息都可以得知除了ID不一样其他的各种东西都是一模一样的。那么思路就变成了:可以把固件的信息修改了,欺骗程序使得把提供给美国市场的固件强刷入国内市场的车机么?

首先第一个想到的是修改文件名,把文件名从 17LDL1NA-EB02_1990.kwi 改成了 17LDLMCN-EB02_1990.kwi。这个非常简单估计不会成功,试了一下果然失败了。

然后就想到能不能通过修改固件来实现,于是我用 HEX 编辑器打开了固件文件(使用的 Hex 编辑器是Mac下的 Hex Fiend),结果第一行就看到:

果断修改之,然后扔到了U盘里又试了一次,结果又失败了,提示“新软件与系统不兼容”。

不过这也算是一个进步,遂猜想应该是固件里内置了什么 checksum 之类的东西,需要通过升级软件的校验才能开始刷机。校验首先猜的是会不会在固件最后append了几个字节,于是尝试了 sha256、md5、crc32,都不对。

忽然想到了下载的文件里有好几个固件应对不同的机型的,会不会其实那个里面的机型中也有只改了ID其他都不变的固件呢?

果然 17LDL1NA-EB02_1990.kwi 和 17LDL1NA-EB42_1990.kwi 文件大小都是一样的,非常有可能是这样。

所以我用下面的命令给这两个文件做了比较

$ xxd 17LDL1NA-EB02_1990.kwi EB02.hex && xxd 17LDL1NA-EB42_1990.kwi EB42.hex && diff EB02.hex EB42.hex

结果是这样的

所以我们锁定了offset 从 1771 开始的 256bytes 分别为

9D212608 2ABFF029 B3FD68F7 45257806 B8DEFE33 AA21AB09 4501A576 AE0BBB3E EE3DDB84 EC23E1D5 DDC9663B 2DED0343 785E8BED 3CBF8A64 A20B7413 3A7EFA35 43DA6A79 918BD013 D76CDB5E B705B8BC AD052E1A 0FAD812A DC716337 332829EF 4E23203D B897EE0E 247E84A0 0772CE9A 84F0A0BF F5BBBC11 5F40A535 FBEEBBD4 8854E76E 772F2DAC CB2E8304 14FE79D1 F1A18DB2 1E9DBE96 3830F8A0 A244DF8F 6F43BAA8 C1C4A298 B8F35970 B4985F2A 3DFC7608 0191958A 2C86A9C9 2B6CF678 C4585F0A 52BD417B 6058E94A 7EF3CCCC 434B02BF DBB6FFBC 9B3B4476 4AFCE56A F622EC41 6E0162B6 797B4539 D860CB17 DBD74308 7F9C88BE F0281F62 7A1B654F

063F105A FBA80CA2 51195DFC DCD99632 B5E91529 EB52FB08 860271B6 AA1ADB7E 26639C3D 48A7E3E6 E2A309B0 99666E4C 987E0119 90C63BAE D6B4FA1A 697B2C08 92015F0C B751BEA9 25ACB0A6 15549E6F F2E27F14 9D669391 66A17832 6D033E1E 5E43E333 8886B804 179F15AF 33360DFA 4530AE28 FFE7FF34 24EE6D60 FEF5C6E6 F94C2BE9 69B610EB FBE932E1 C0FCBBCF A12CE1C1 86F48256 3EED271F A65A3C6B 8FCDFB20 7AFE9240 3CE6BF1A 9BCBF61E 43D98530 24D1A8F2 10F12A91 F1629F24 EA44C87E DF638378 9B361321 62EFB8A9 04D5F90D EA4DC405 94D10CD4 BABBFE99 F463A22A ADFE4C7A 37DEC566 FBFFA9AE E4C2DCEF B45FE8F3 7E8AB970 9C467C7F

对比后虽然只改了两个字符,但是这一串就比较离散,很有可能是某一种hash,不过我暂时想不到一个可以生成这么长hash的算法,或者是某几个hash的合并。也有可能是一种签名。不过如果是签名的话,没有私钥基本上就没有办法了。

过程大概就到这里,目前可以确定的是,只要能够将这个 256byte 替换成正确的值,那么理论上强刷就不会有问题。

后记

这里给出过程是希望抛砖引玉,没有什么技术含量,主要是给其他人一些参考。虽然最后也没有成功但是折腾的过程还是很开心的。另外刷机有风险,尤其是汽车这样的东西……

淘宝上有那种汉化中东版车机的服务,原理应该是拆了芯片欺骗程序然后强刷的国行固件。反过来这个应该可以用于国行强刷海外固件。不过要拆芯片,有可能会降低系统稳定性所以我暂时不考虑这个方案。

另外虽然支持了 CarPlay 但是还是需要插着 USB 线才可以使用,如果有非常想要 CarPlay 功能的车友也可以考虑在淘宝上购买第三方的加装车机,提供了无线的CarPlay。成本大概在 2k+。缺点是需要装额外的车机以及没有那么原生。

还有是腾讯科恩实验室发现了一个蓝牙的bug成功刷入了恶意固件,详情见 https://keenlab.tencent.com/zh/2020/03/30/Tencent-Keen-Security-Lab-Experimental-Security-Assessment-on-Lexus-Cars/

其中提到了

逆向uCOM固件及其固件更新逻辑,我们能够将一个恶意固件重新刷写到uCOM电路板模块中

可能意味着这个固件的更新逻辑没有我想象的那么复杂。不过能力有限,就先不继续探索了。

在2021年他们按照流程公布完整技术报告的时候可能就有非常多有价值的信息可以使用了。

也许丰田会在提供补丁的时候顺便给了新的系统?(做梦=。=)