/* ANTI IMMO firmware Простой вариант эмулятора иммобилайзера. Отвечает на некоторые запросы параметров. Попытка сделать работу иммобилайзера некорректной. igorkov / fsp@igorkov.org / 2017 Site: igorkov.org/anti_immo */ #include #include #include #include #include "leds.h" #include "can.h" void ProtectDelay(void) { int n; for (n = 0; n < 100000; n++) { __NOP(); } } void BeepOff(void) { LPC_SYSCON->SYSAHBCLKCTRL |= (1UL<<6)|(1UL<<16); // pio init: LPC_IOCON->R_PIO1_1 &= ~0x07; /* As */ LPC_IOCON->R_PIO1_1 |= 0x01; /* GPIO */ // set 0: LPC_GPIO1->DIR |= (1UL<<1); LPC_GPIO1->DATA &= ~(1UL<<1); } void can_dispatcher(CAN_msg *p) { // Первый запрос по шине, видимо, связанный с ииммобилайзером: if (p->id == 272) { if (1) { // Отправляем неверный запрос: CAN_msg frame_a; frame_a.id = 256; // immo requre id frame_a.len = 4; frame_a.format = STANDARD_FORMAT; frame_a.type = DATA_FRAME; frame_a.data[0] = 0x12; frame_a.data[1] = 0x34; frame_a.data[2] = 0x56; frame_a.data[3] = 0x78; CAN_wrMsg(&frame_a); } } else // Если пришел запрос от ЭБУ... if (p->id == 256) { if (0) { // Повторяю запрос со своими х-ками... CAN_msg frame_a; frame_a.id = 256; // immo answer id frame_a.len = 4; frame_a.format = STANDARD_FORMAT; frame_a.type = DATA_FRAME; frame_a.data[0] = 0x12; frame_a.data[1] = 0x34; frame_a.data[2] = 0x56; frame_a.data[3] = 0x78; CAN_wrMsg(&frame_a); } // Здесь проверка условия блокировки if (1) { // Отправляем неверный ответ: CAN_msg frame_a; led_red(1); frame_a.id = 273; // immo answer id frame_a.len = 3; frame_a.format = STANDARD_FORMAT; frame_a.type = DATA_FRAME; frame_a.data[0] = 0x12; frame_a.data[1] = 0x34; frame_a.data[2] = 0x56; CAN_wrMsg(&frame_a); } } } int main (void) { leds_init(); /* init led signalization */ CAN_setup(); /* setup CAN Controller */ CAN_noFilter(STANDARD_FORMAT); /* all receive */ CAN_start(); /* start CAN Controller */ CAN_waitReady(); /* wait til tx mbx is empty */ led_green(1); while (1) { __WFI(); } }