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

我要做的是拆卸该设备与计算机之间的通信协议,分别分解软件与PCI卡;但是,我是完整的初学者。我下载了IDA工具。我能够跟踪应用程序并找到几个子例程,当应用程序向设备发送命令时,这些子例程通常会被触发,但是这些子例程包含其他子例程等。我希望有许多带有数字参数的短字符串指令。)

,我想请教一些建议,首先应该做什么,或者在检测通信协议时要注意些什么。

#1 楼

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

本质上,您正在寻找的可能是CreateFile,然后使用DeviceIoControl调用与从CreateFile返回的句柄相同。这是应用程序与内核模式软件进行交互的一种方式。另一种选择是先查找CreateFile调用,然后再调用ReadFile和WriteFile,这是用户空间应用程序与内核模式驱动程序进行通信的另一种常用方法。 9倍,您可能应该使用类似SoftICE的工具。

一旦弄清这些东西,就需要检查卡的驱动程序,并寻找之前看到的DeviceIoControl调用的处理程序或ReadFile,WriteFile处理。我们在这里进行了类似的讨论,并且有很多不错的资源,如Clandestiny的《内核模式驱动程序教程》,虽然花了点时间但仍然适用。因此,我强烈建议您购买实用逆向工程以及《猎虫手》日记。他们都讨论了如何反向工程用户空间和内核模式交互的问题。如果您对此非常认真,我建议您还获得一份Windows Internals,第1部分和Windows Internals,第2部分的副本。

如果要查看实际的PCI通信量(可能不是您想要的),我认为您必须走硬件路线。 Silicon Control提供了一个PCI总线分析仪,然后还有LeCroy和Agilent提供的昂贵解决方案。尽管我不确定他们是否仍在制造PCI总线分析仪,还是每个人都转而使用PCIe。您还可以选择自己断开总线,并使用FPGA嗅探信号。 ElectroFriends简要介绍了可用的PCI总线。

评论


非常感谢您的建议。我要解决它。谢谢。

– Michal
2014年4月12日在9:52