Keselamatan dalam elektronik otomatis - Halo dunia pada pengontrol dasbor

Setelah bereksperimen dengan bus CAN di mobil, ada keinginan liar untuk menggali sedikit lebih dalam ke tempat suci yang paling suci. Saya pikir semua orang tahu istilah seperti "tuning chip"; dalam bahasa Rusia, ini adalah firmware sederhana untuk unit kontrol (mesin, gearbox, dll.). Pabrikan peralatan awalnya menetapkan fungsionalitas dalam perangkatnya untuk memperbarui atau mengubah perangkat lunak mikrokontroler, tetapi mekanismenya tidak diungkapkan kepada siapa pun karena alasan yang jelas, dan untuk mempersulit proses ini, program itu sendiri, yang berfungsi dengan memori non-volatil, tidak disimpan dalam firmware, tetapi dimasukkan ke dalam firmware, tetapi dimasukkan ke dalam firmware pengontrol hanya pada saat layanan. Artikel ini adalah tentang cara membuat mikrokontroler dashboard mengeksekusi kode orang lain sementara memiliki akses ke konektor diagnostik otomatis.

Secara umum, mekanisme pemuatan data dalam ECU (unit kontrol elektronik) dijelaskan dalam protokol diagnostik UDS , yaitu fungsi:

34 - Permintaan Unduh
36 - Transfer Data

Tetapi dalam hal menerapkan UDS, pembuat mobil tidak mudah tersinggung untuk membuat perubahan / penambahan protokol, menciptakan add-on eksklusif. Dalam kasus saya, proses pembaruan terlihat seperti ini:

  1. Masuk ke sesi diagnostik yang diperpanjang
  2. Reboot di bootloader
  3. Memperoleh akses keamanan untuk memungkinkan operasi memuat data
  4. Transfer alamat dalam memori tempat rekaman dan volume data akan disimpan
  5. Pemuatan data
  6. Melakukan apa yang dimuat
  7. Berikutnya adalah pemrograman EEPROM dengan program yang telah Anda unduh sebelumnya.

Poin 1-3 tidak sulit, tetapi apa yang harus dilakukan selanjutnya? Di mana mendapatkan alamat dan jumlah data maksimum? Bagaimana setelah boot untuk melakukan apa yang telah diunduh? Sebenarnya, demi ini, artikel sedang ditulis.

Kombinasi perangkat dipilih sebagai subjek uji, karena, pertama, saya punya satu lagi dalam kasus kiamat, dan kedua, pengontrolnya dapat dibaca dengan adaptor USB-RS232 sederhana. Setelah mempelajari bagian dalam, kami memiliki pengontrol Fujitsu MB91F223. Ini adalah mikron 32-bit dengan inti FR60Lite, memori 512 KB, dan RAM 16 KB. Datasheet, RM, Assembler manual, seorang programmer untuk itu mudah dicari di Internet, saya tidak akan berhenti di sini. Di sini dia tampan:



Rencana aksi:

  1. Temukan Penangan Permintaan Diagnostik
  2. Temukan alamat di memori tempat Anda dapat menulis sesuatu
  3. Temukan cara untuk mengeksekusi kode yang direkam

Untuk melakukan langkah 1, Anda perlu mempelajari pengendali interupsi dari bus CAN dan memahami di mana data disimpan untuk diproses lebih lanjut. Banyak pengontrol memiliki tabel vektor interupsi yang disebut, yang berisi alamat fungsi yang bertanggung jawab untuk memprosesnya. Dalam keluarga FR Fujitsu, tabel ini ada di industrinya, dan penunjuknya disimpan dalam register TBR (Table base register). Pencarian teks sederhana di IDA memberikan hasil positif dan alamat tabel interupsi dengan kami.



Menurut manual, alamat interupsi CAN terletak pada offset 0x370 dari awal TBR. Itu dia.



Dia, tetapi sudah dalam pertumbuhan penuh, juga penangan pesan menggunakan protokol ISO-TP

Penangan ISO-TP tidak lengkap, tetapi di mana bingkai dari berbagai jenis berbeda


Dari database perangkat lunak diagnostik dealer, saya memiliki pengidentifikasi SID dan LID (31E1) dari protokol UDS yang memulai prosedur eksekusi kode, ini menyederhanakan tugas dan memungkinkan saya untuk bertindak dari awal hingga awal. Dalam penangan fungsi 31E1, sebuah fragmen ditemukan di mana alamat milik area RAM dimuat, dan kemudian panggilan dibuat ke alamat ini. Bukankah ini yang kita cari?



Pencarian untuk menggunakan konstanta 0x3F100 membawa kita ke tempat lain di firmware, ke penangan fungsi UDS 34 - Minta unduhan! Ini persis apa yang Anda butuhkan, alamat untuk menulis data dan jumlah maksimum (0x700 byte) dalam RAM ditemukan.



Sekarang, setelah mengirim perintah untuk meminta izin untuk mengunduh data 34 03F100 00 00010C (alamat yang dicetak miring ditunjukkan dengan huruf tebal), dasbor merespons dengan respons 740401 yang baik. Selanjutnya, data pengguna dimuat menggunakan fungsi Transfer data dan perintah dikeluarkan untuk memenuhi. Kami telah menemukan pemuatan dan eksekusi, tetapi sekarang Anda perlu menemukan apa yang harus diunduh. Saya tidak menemukan lingkungan pengembangan sumber terbuka untuk mikrokontroler ini, tetapi setelah sebulan ada ketukan pada dukungan teknis cypress (ya, bukan fujitsu, mereka juga menyerapnya, secara umum, saya tidak tahu) mereka memberikan tautan ke IDE yang disebut Shaggy Softune Workbench 97 tahun di mana kompiler berada di bawah kernel FR.

Seperti itulah tampilannya, bukan pasangan vscode.

Dalam tangkapan layar, sebuah fragmen program untuk memasang LED (jangan menendang untuk gaya penulisan assembler, ini adalah pengalaman pertama saya).



Kode yang sama, tetapi sudah dalam si

void delay(int loops) { while(--loops) { #pragma asm NOP NOP #pragma endasm __asm(" nop"); } } #define DDR2 (*((char*)0x402)) #define PDR2 (*((char*)0x2)) #define WPR (*((char*)0x485)) #define LVRC (*((char*)0x57D)) void wdt_reset(void) { WPR = 0xA5; WPR = 0x5A; LVRC = 0x10; } void main(void) { int current_pin = 2; DDR2 |= 0x7E; while(1) { wdt_reset(); PDR2 |= current_pin; delay(0x7FFF); PDR2 &= ~current_pin; delay(0x7FFF); current_pin <<= 1; if(current_pin >= 0x80) { current_pin = 2; } } } 

Nah, hasilnya sendiri


Dengan node lain, semuanya terlihat hampir sama, dengan pengecualian arsitektur controller dan urutan perintah dijalankan. Apakah aman meninggalkan celah seperti itu di peralatan otomotif? Rupanya ya, karena pabrikan melakukannya. Kenapa saya melakukan ini? Itu hanya menarik, yah, perakit itu menarik bagi saya untuk waktu yang lama, saya bertemu, sehingga untuk berbicara.

Subjek - Mitsubishi 8100B197 panel instrumen, komunikasi pada bus CAN dilakukan oleh adaptor Tactrix OpenPort 2.0, perangkat lunak pada komputer desainnya sendiri.

Source: https://habr.com/ru/post/id474718/


All Articles