拆解旧设备的通信协议

逆向工程 艾达 C++ 沟通
2021-06-26 08:50:58

我有一台旧设备通过特定的 PCI 卡连接到个人计算机。设备由 C++ 控制应用程序处理,无法在新版本的 Windows 上运行。该设备的制造商不久前被大公司消费,不再继续开发此类设备。

我想要做的是拆解这个设备和计算机之间的通信协议,分别是软件和PCI卡之间的通信协议;但是,我完全是初学者。我下载了 IDA 工具。我能够跟踪应用程序并找到几个在应用程序向设备发送命令时经常触发的子例程,但这些子例程包含其他等。此外,我在反汇编的应用程序中找不到任何有意义的字符串(我期待很多短带有数字参数的字符串指令)。

想请教大家,首先应该怎么做,或者想检测通信协议时要注意什么。

1个回答

您可能希望从一些简单的事情开始,例如监视控制器应用程序正在执行的 API 调用。我不确定您的 Windows 版本有多旧,但可能值得一试API Monitor它至少为您监视应用程序提供了一个良好的开端,并且您可以轻松了解它如何与操作系统交互。

本质上,您要查找的可能是CreateFile,然后是DeviceIoControl调用,这些调用使用与从 CreateFile 返回的句柄相同的句柄。这是应用程序与内核模式软件交互的一种方式。另一种选择是查找 CreateFile 调用,然后是ReadFileWriteFile,这是用户空间应用程序与内核模式驱动程序通信的另一种常用方式。

如果您的软件太旧以至于我们谈论的是 Windows 9x,您可能应该使用类似 SoftICE 的软件。

一旦你弄清楚了这些事情,你就需要检查卡的驱动程序并寻找你之前看到的 DeviceIoControl 调用或 ReadFile、WriteFile 处理的处理程序。我们在这里进行了类似的讨论并且有一个不错的资源,如Clandestiny 的内核模式驱动程序教程,它的内容有点长,但仍然适用。

这是相当多的工作,我强烈建议您购买类似实用逆向工程以及漏洞猎人日记之类的东西他们都讨论了如何逆向工程用户空间和内核模式交互的问题。如果您对此非常认真,我建议您还获取一份Windows Internals, Part 1Windows Internals, Part 2的副本

如果您想查看实际的 PCI 流量,这可能不是您想要做的,我认为您必须走硬件路线。有来自Silicon Control的 PCI 总线分析仪,然后有来自大牌 LeCroy 和 Agilent 的昂贵解决方案。虽然我不确定他们是否仍然生产 PCI 总线分析仪,或者是否每个人都已经转向 PCIe。您还可以选择自己断开总线并使用 FPGA 来嗅探信号。ElectroFriends简要介绍了可用的 PCI 总线