Pelajari bahasa Prancis atau cara mendapatkan adaptor universal dari pemindai diagnostik PSA

Untuk mencegah penurunan IQ selama isolasi diri, ada keinginan untuk melakukan sesuatu yang berguna untuk diri mereka sendiri, dan jika Anda beruntung - tidak hanya. Memotong lingkaran ke-3 di sekitar apartemen, mata saya tertuju pada pemindai mobil, yang saya ambil dari seorang teman untuk studi lebih lanjut, yaitu Lexia 3, alias Actia XS Evolution. Ini satu:
gambar
Kelemahannya adalah hanya perangkat lunak DiagBox yang dirancang untuk mendiagnosis mobil Peugeout / Citroen yang dapat bekerja dengannya. Mustahil untuk bertahan dengan yang terakhir, oleh karena itu timbul gagasan bahwa jika pemindai ini dipaksa untuk mengirim dan menerima pesan sewenang-wenang ke bus CAN kendaraan, dengan demikian mengubahnya menjadi adaptor universal.

Jadi, rencana tindakan:

  1. Kumpulkan komunikasi USB antara PC dan pasien kami.
  2. Pahami bagaimana komunikasi terjadi antara driver adaptor dan perangkat lunak.
  3. Ulangi pertukaran dan merasa baik (spoiler: itu ternyata sedikit lebih rumit).

1. Pertukaran


Kompleks perangkat lunak DiagBox secara bebas menjelajahi Internet, sehingga tidak ada kesulitan dengan langkah 1, terutama karena dilengkapi dengan utilitas kecil untuk mengidentifikasi adaptor, yang agak menyederhanakan tugas dari langkah 2. Versi percobaan program USBLyzer membantu menerima pertukaran USB .
Kita akan sukses. Dalam gambar, paket data yang dikirim, jenis perangkat di operator, dan utilitas yang sama.

gambar

Melihat IRP ketika membuka perangkat dan bertukar dengannya, kita dapat menyimpulkan bahwa pekerjaan dilakukan melalui mekanisme Windows I / O standar, yaitu, untuk membuka file virtual perangkat, fungsi CreateFile dan untuk pertukaran itu, DeviceIOControl.

gambar

2. Pembekalan


Data dikumpulkan, ID IOCTL dan bendera diterima, itu tetap berlaku untuk kecil, buka perangkat file dan mengirim paket byte di sana. Buka saja? Cari melalui WinObj tidak memberikan hasil apa pun, ketika terhubung, adaptor tidak memiliki nama yang tepat, hanya tautan implisit dengan ID yang terus berubah, yaitu, hanya membuka perangkat seperti port COM tidak akan berfungsi

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

Mempelajari file program membuatnya jelas, semuanya ternyata cukup sederhana - adaptor memiliki GUID uniknya sendiri, dengan bantuan yang diminta sistem operasi untuk daftar semua perangkat dengan GUID ini dan jika ada, kita akan mendapatkan tautan ke perangkat, yang
\\?\USB#VID_103A&PID_F000#6&268bff9b&0&7#{75a835f4-d77d-4402-8585-c42247f25b76}\vcommusb0pembukaannya akan berhasil.

Fungsi mengembalikan jalur sebagai ganti dari GUID:

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

"File" berhasil dibuka, jangan lupa tentang flag yang diperoleh melalui USBLyzer

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

3. Final


Kami mengirim paket byte, dan sebagai tanggapan - diam ...

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

Untuk waktu yang lama saya duduk dan memandangi monitor, ini pertukaran yang sama, inilah tanggapan dari perangkat, ini adalah benderanya, persis sama dengan yang saya ulangi, tetapi tidak ada yang datang darinya.

gambar

Setelah akhirnya kehilangan semua harapan untuk sukses, saya memiliki satu hal terakhir - artileri berat dalam bentuk disk dari majalah Hacker dengan program OllyDbg. Kita mulai, lampirkan ke proses, letakkan breakpoint pada fungsi DeviceIoControl dan apa yang kita lihat.

gambar

Raja itu tidak nyata. Kode IOCTL yang sama sekali berbeda, datanya sama sekali tidak seperti yang terlihat melalui USBLyzer.

Apa yang dikirim ke perangkat:

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

Dan itu melewati 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

Petunjuk itu ada di nama perangkat yang terlihat di task manager. Saya menemukan artikel di situs web Microsoft tentang apa itu driver USB UMDF. Hapus blok diagram:

gambar

Ternyata apa yang kita lihat di USBLyzer adalah lapisan transport transfer data klien, yang diimplementasikan dalam driver UMDF (arah 7 pada gambar), sementara kami mentransfer data ke perangkat (arah 2 pada gambar), yang pertama akan pergi ke pengemudi, dan kemudian pergi ke bus USB. Saya harap saya menjelaskan dengan jelas.

Sekarang semuanya jelas dari mana ID dan data IOCTL lainnya berasal. Yah, itu bahkan lebih sederhana, Anda tidak perlu memeras otak Anda tentang cara mengimplementasikan transportasi, kami memiliki antarmuka permintaan-respons paling sederhana. Juga dalam file program deskripsi protokol pertukaran (sebagian) secara tidak sengaja kelebihan beban, sangat disayangkan hanya dalam bahasa Prancis.

gambar

Menurutnya, dalam pesan di atas, versi firmware (00 FA) diminta, yang menerima respons dengan garis APPLI_XS_Fuji_ P106138A V4.3.0 @ACTIA 02.01.12.

SEMUA. Kami mengonfigurasi CAN, mengirim alamat respons permintaan untuk komunikasi menggunakan protokol ISO-TP, dan mendapatkan adaptor yang berfungsi penuh dengan mobil. Untuk kemudahan penggunaan, pembungkus ditulis bahwa, sejauh mungkin, memenuhi standar PassThru J2534, sehingga adaptor ini dapat digunakan dengan berbagai perangkat lunak otomotif, termasuk desainnya sendiri.

Video kerja (stdout adalah output ke konsol untuk kenyamanan debugging):


Sumber dapat ditemukan di sini

All Articles