学习法语或如何从PSA诊断扫描仪获取通用适配器

为了防止自我孤立时智商下降,人们希望做一些对自己有用的事情,如果幸运的话,不仅可以。切开公寓周围的第n个圆圈,我的眼睛被汽车扫描仪吸引住了,我从朋友那里带走了汽车扫描仪,这就是Lexia 3,又名Actia XS Evolution。这是一个:
图片
它的巨大缺点是只有设计用于诊断Peugeout / Citroen汽车的DiagBox软件才能使用它。不可能忍受后者,因此提出了一个想法,即如果迫使该扫描仪向车辆的CAN总线发送和接收任意消息,从而将其转变为通用适配器。

因此,行动计划:

  1. 收集PC与患者之间的USB通信。
  2. 了解适配器驱动程序和软件之间如何进行通信。
  3. 重复进行交换,并感觉良好(破坏者:事实证明它要复杂一些)。

1.交流


DiagBox软件复合体可自由浏览Internet,因此第1步没有任何困难,特别是因为它带有一个用于识别适配器的小实用程序,从某种程度上简化了第2步的任务。当通过USB接收交换时,USBLyzer的试用版提供了帮助
我们将走向成功。在图中,发送的数据包,调度程序中的设备类型以及相同的实用程序。

图片

查看打开设备并与之交换时的IRP,我们可以得出结论,该工作是通过标准Windows I / O机制完成的,即打开设备的虚拟文件CreateFile函数以及用于交换的DeviceIOControl。

图片

2.汇报


收集数据,接收到IOCTL ID和标志,但对于较小的情况仍然如此,请打开文件设备并在其中发送字节数据包。刚打开吗?通过WinObj进行搜索没有给出任何结果,连接后适配器没有确切的名称,只有具有不断变化的ID的隐式链接,也就是说,仅打开像COM端口这样的设备是行不通的

CreateFile("\\\\.\\COM1", ...)

通过仔细研究程序文件,发现一切都非常简单-适配器具有自己独特的GUID,在操作系统的帮助下,要求操作系统提供具有此类GUID的所有设备的列表,如果存在,我们将获得指向该设备的链接,
\\?\USB#VID_103A&PID_F000#6&268bff9b&0&7#{75a835f4-d77d-4402-8585-c42247f25b76}\vcommusb0打开该链接将成功。

函数返回路径而不是GUID:

CM_Get_Device_Interface_List(InterfaceClassGuid, pDeviceID, Buffer, BufferLen, ulFlags);

“文件”成功打开,不要忘记通过USBLyzer获得的标志

Device = CreateFile(DeviceName, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);

3.决赛


我们发送一个字节的数据包,作为回应-沉默...

bStatus = DeviceIoControl(Device, 0x220003, send_buf, send_len, out_buf, max_out_len, &returned_len, NULL);

我坐了很长时间,看着监视器,这里是相同的交换,这里是设备的答案,这里是标志,与我重复的完全相同,但没有任何结果。

图片

终于失去了一切成功的希望,我还有最后一件事-用OllyDbg程序从Hacker杂志以磁盘的形式装上重型火炮。我们开始,附加到该过程,将断点放在DeviceIoControl函数和我们看到的内容上。

图片

国王不是真实的。完全不同的IOCTL代码,数据根本不像通过USBLyzer看到的那样。

发送到设备的内容:

<b>00 FA</b> <i>AA</i> BA 7C 15 00 00 00 00 00 00

然后通过USB:

40 05 15 C0 <b>00 FA</b> 00 00 <i>AA</i> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 41

提示是在任务管理器中可见的设备名称中。我Microsoft网站找到有关UMDF USB驱动程序的文章。清晰的框图:

图片

事实证明,我们在USBLyzer中看到的是客户端数据传输的传输层,该传输层是在UMDF驱动程序(图中的方向7)中实现的,而我们将数据传输到设备(图中的方向2)时,首先将进入驱动程序,然后进入USB总线。我希望我能清楚地解释。

现在,所有其他IOCTL ID和数据都来自哪里。嗯,它甚至更简单,您不必费心去实现传输,我们拥有最简单的请求-响应界面。同样在程序文件中,交换协议(部分)的描述被意外重载,仅法语是一个遗憾。

图片

据他介绍,在上述消息中,请求了固件版本(00 FA),并通过APPLI_XS_Fuji_ P106138A V4.3.0 @ACTIA 02.01.12这行收到了响应。

所有。我们配置CAN,使用ISO-TP协议发送请求响应地址以进行通信,并获得与汽车完全兼容的适配器。为了易于使用,编写了尽可能符合PassThru J2534标准的包装器,以便该适配器可与包括其自身设计在内的各种汽车软件一起使用。

工作视频(为方便调试,stdout输出到控制台):


来源可以在这里找到

All Articles