Alti-2高度表COM通信协议逆向分析记录

Alti-2高度表COM通信协议逆向分析记录

这几天世界范围内的Alti-2高度表出现故障,时间在2025-08-01后的跳伞记录无法从Logbook中访问,菜单中View点下去会卡一下然后回退到该日期前的最后一跳,按官方邮件的说法是不会丢数据,但要等固件更新。其实这个表是支持通过电脑导出跳伞数据的,想起来之前插入电脑充电,会创建设备,拿出来逆一下协议看看,万一官方没修好,也能自己尝试把后面的跳伞记录dump出来。

先不拆解设备,优先纯软件逆向,后考虑硬件芯片读取方案。Type-C数据线插入电脑后,设备管理器会出现未知设备。

设备管理器显示未知设备

等待一下Windows自动安装了驱动,出现新串口,查看属性是FTDI设备,猜测SoC主控后连接FTDI串口转USB芯片。

FTDI设备信息
先查资料。根据这份 ALTI-2 COMMUNICATION PROTOCOL PDF材料可知,通信过程会加密,旧型号的逻辑是先6字节敲门,高度表为PC响应一个Type0帧,包含固件版本、设备序列号等信息,关键在于通信过程完全基于该帧进行密钥协商。尝试后发现这一套解密已经失效了,看来Alti-2更新了通信密钥协商算法。市面上能用的跳伞数据同步工具只有商业的Paralog,卖挺贵而且这个东西混淆得厉害,再说大量代码都是Logbook功能设计相关,我也不关心,翻找起来太费劲,先换个思路找简单办法。Alti-2官方邮件提及后面会有固件更新工具,在官网找到上一次发的固件更新工具(之前就出过一个日期BUG,唉,这东西到底可不可靠),检查一下是C#写的,连混淆都没做,那就先拿这个开刀。
Alti-2 Customer Update Utility

直接反编译,得到基本的连接创建、串口协商逻辑,但这个工具没有其他的指令参考,只有bootloader擦写的逻辑,这个东西暂时不管,只关注通信过程和设计架构。

Alti-2 Customer Update Utility Decomplied

从导出的resx中可以得到各种版本的固件本体,实际上是HEX String构造的纯文本,搜索一下发现是TI-TXT HEX FORMAT,把Hex串还原到二进制,拖进IDA,架构是TI MSP430 16-bit,可以识别到函数。好像换Ghidra的分析效果好一点。不管这个,目标是还原数据,不是修复这高度表的BUG。

Alti-2 Firmware
Alti-2 Firmware Disassembled

现在思路就比较清晰了,高度表连接PC后,FTDI芯片在PC上创建USB设备,此时高度表只充电。PC端通过特定方式打开串口,发送6字节敲门帧,高度表进入传输模式,响应自身数据,开始密钥协商,PC侧程序计算出密钥,后续通信完全加密。现在理论上已经可以建立正常通信了,但仍然无法确定PDF资料中的读写协议是否被更新。不过有了密钥和加解密算法,这些就比较好办了。

既然Paralog可以用,那就有两种简单的验证方法。

第一是编写一个dll,注入进Paralog,Hook掉COM通信的函数,将双向通信dump出来,这样虽然方便,但不太好调试,后面要修改代码的时候还要处理卸载/重载dll,管理Hook状态,所以不用这个方案。

第二种办法就是骗过Paralog,做一个串口桥,编写中间人程序连接物理设备,让Paralog连接虚拟串口,这样所有的加密流量都会从中间人程序中通过,这样可以非常方便地加解密/注入/过滤任意流量,而且中间人程序可以随便启动退出方便实时修改。

COM to COM Bridge

好在Paralog支持直接指定COM号,而不是像官方的固件更新工具一样通过VID/PID自动确定COM号,这样就不需要再注入Hook或者手动修改注册表来欺骗Paralog连接到虚拟串口上了,用com0com创建一个虚拟串口对,Paralog连接该虚拟串口的一侧,中间人程序连接虚拟串口的另一侧。这样准备工作就完成了。

COM MITM Log

中间人程序还用C#写,方便移植官方的写法,先验证实现,后面再移植到其他语言和平台。程序本身没有什么技术含量,就是打开串口,建立通信链路,在回调中填缓冲区,解析Type0帧计算密钥,按逆向得到的加解密算法还原通信流量明文。

取出一条解密后的明文指令:07 A0 0E 00 00 00 02 B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Read Memory Command

对比参考前面的PDF文档,这是一条标准的READ_MEMORY_COMMAND,只是加解密算法更新了,通信协议数据结构并没有变更,所以编写一个数据恢复工具就容易多了。

看来跳伞日志数据确实没有丢,那先这样吧。

Acknowledgments

Special thanks to Alexey Lobanov for his groundbreaking work on alti2reader. Without his research and documentation, this reverse engineering effort would not have been possible.

References

  1. Lobanov, A. alti2reader - Alti-2 Neptune Data Reader. GitHub. https://github.com/evilwombat/alti2reader

  2. McGinty, J. alti2 - Alti-2 Communication Tool. GitHub. https://github.com/mcginty/alti2

  3. Paula, K. com0com - Null-modem Emulator. GitHub. https://github.com/paulakg4/com0com

  4. Kelly, P. MinHook - Windows API Hooking Library. GitHub. https://github.com/TsudaKageyu/minhook

  5. Texas Instruments. TI-TXT Hex Format Specification. https://downloads.ti.com/docs/esd/SPRUI03/ti-txt-hex-format-ti-txt-option-stdz0795656.html

  6. Rheinwald, K. Paralog - Skydiving Logbook Software. https://www.paralog.net/