逆向工程 USB 外设驱动程序

逆向工程 视窗 Python 串行通讯 司机 USB
2021-06-29 11:10:03

我正在寻找对我这里的打印机的 Windows 驱动程序进行逆向工程。我发现了一些关于 USB 嗅探的信息,但我认为 Snoopy 不能在 Windows 7 上运行。我知道驱动程序在我电脑上的某个地方,但它的位置并不明显。有人可以概述我需要采取的步骤来实现这一目标吗?我以前从来没有这样做过😐。网络上有很多,但对于要往哪个方向走有点混乱。我正在使用 python 3

3个回答

嗯,你的问题有点宽泛,但让我们一一回答。现在通常(但并非总是)打印机的驱动程序是用户模式驱动程序 (UMDF),这意味着您正在寻找 DLL。如果不是这种情况,您将寻找某种 .sys 文件。

多年来,Microsoft 提出了许多“简化”的驱动程序模型。其中一些在用户模式下运行,一些在内核模式下运行。如果这是现代设备并且供应商已更新所有内容,他们将使用用户模式驱动程序。

为了让您开始,您需要首先找出负责您的打印机的驱动程序。假设您确实在处理 USB 打印机,您应该可以通过USBDeView看到它,这也可以帮助您识别驱动程序名称。或者尝试更通用的DevManView

如果您使用的是最新版本的 Windows ,则无法查看打印机属性并使用“共享”选项卡。在那里,您至少可以看到已安装驱动程序类型我的一台打印机的示例:

附加驱动程序对话框

有了这些信息,我们就可以查看文件夹C:\Windows\System32\spool\drivers( %SystemRoot%\System32\spool\drivers) 并找到实际的驱动程序(还要检查prtprocs子文件夹而不是drivers)。

此外,您可以HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers使用 Windows 内置的注册表编辑器查看有关驱动程序的详细信息。特别是在与相关打印机对应的子项中,您应该找到一个名为Print Processor(类型字符串)的值,其中包含打印处理器的名称。在我的情况下,ssa7mPC这反过来可以追溯​​到 DLL C:\Windows\System32\spool\prtprocs\x64\ssa7mpc.dll

从那时起,您的问题根本不清楚您想要实现什么。也就是说,您是想拦截某些东西,还是想对有线协议进行逆向工程,还是只关心能够与打印机通话等等……(因此,在您澄清之前,我也无法提供更多详细信息)。

由于您也没有提供有关打印机型号的信息,因此除了我刚刚提供的内容之外,很难提供任何有意义的细节。

我对 linux 比较熟悉,但有些步骤是相似的。要找到您的驱动程序在哪里,我相信如果您插入设备并进入设备管理器,在设备上单击右键,然后单击属性,您可以找到驱动程序的路径。要对协议进行逆向工程,您可以结合使用驱动程序反汇编(使用radare、IDA 或其他工具)和USB 嗅探/捕获。我通常发现在运行虚拟机时更容易捕获 USB 流量。Wireshark 可以在 Linux 上完成,显然也可以在 Windows 上完成,请参阅此页面如果您的设备使用诸如串行或 SCSI over USB 之类的已知协议,这将非常有帮助,否则您将真正需要了解 USB,是一个好的开始。

这个问题的答案涉及 USB 设备的通用反转,但如果您想从驱动程序文件开始,请在设备管理器中找到打印机,转到属性,然后驱动程序选项卡-驱动程序详细信息...以查看驱动程序文件。有关打印机驱动程序开发WDK 示例的MSDN 主题也可能有用。