Анализ прошивки халдекс 3 поколения

Общая информация

Внутри блока используется процессор Siemens Super ST10. Флеш память разбита на 2 блока

Оперативная память

При загрузке прошивки в дизассемблер грузить её нужно по нулевому смещению.
Настроки для DPP регистров следующие

Логирование данных

Логирование данных контроллера

Из коробки, прошивка халдекса gen 2 и gen 3 для Volvo не поддерживает возможность чтения данных контроллера. Во так выглядит секция разбора диагностического сообщения протокола D2 в прошивке S60R 2007 года

mov     r13, r8
add     r13, #D2RequestStruct.srvId
movb    rl1, [r13]
cmpb    rl1, #0A0h
jmpr    cc_Z, loc_A0_process
cmpb    rl1, #0A1h
jmpr    cc_Z, loc_A1_process
cmpb    rl1, #0A3h
jmpr    cc_Z, loc_A3_process
cmpb    rl1, #0A6h
jmpr    cc_Z, loc_A6_process
cmpb    rl1, #0ACh
jmpr    cc_Z, loc_AC_process
cmpb    rl1, #0AEh
jmpa    cc_Z, loc_AE_process
cmpb    rl1, #0AFh
jmpa    cc_Z, loc_AF_process
cmpb    rl1, #0B1h
jmpa    cc_Z, loc_B1_process
cmpb    rl1, #0B9h
jmpa    cc_Z, loc_B9_process
cmpb    rl1, #0BAh
jmpa    cc_Z, loc_BA_process
jmpa    cc_UC, loc_service_unsupported_process

Поддерживаются следующие сервисы

Как видно из вышеописанного, возможности достать данные из оперативной памяти отсутствуют. Поэтому, для глубокого анализа поведения прошивки, была дописана функция, которая производит реализацию сервиса BB - Read data by addr (прочитать данные по адресу)

newProcessD2Request:
    movb    rl1, [r12+#8]
    cmpb    rl1, #0BBh
    jmpr    cc_Z, loc_BB_process
    jmps    3, processD2Request
loc_BB_proccess:
    jmps    3, processBB_D2Request

processBB_D2Request:
    mov     [-r0], r13
    mov     [-r0], r7
    mov     [-r0], r6
    mov     r1, #0
    movb    rl1, [r12+#9]
    movb    rl2, [r12+#0Ah]
    movb    rl3, [r12+#0Bh]
    movb    rl4, [r12+#0Ch]
    movb    rl7, rl4
    cmpb    rl4, #0
    jmpr    cc_NZ, loc_length_not_zero
    calls   3, d2ErrorSubFuncNotSuppOrInvalMessForm
    jmpr    cc_UC, loc_return

loc_length_not_zero:
    cmpb    rl4, #40h
    jmpr    cc_ULE, loc_length_not_exceed
    calls   3, d2ErrorSubFuncNotSuppOrInvalMessForm
    jmpr    cc_UC, loc_return

loc_length_not_exceed:
    movbz   r6, rl1
    movbz   r5, rl2
    shl     r5, #8
    addb    rl5, rl3
    mov     r3, r12
    add     r3, #0Dh

loc_loop:
    exts    r6, #1
    movb    rl1, [r5]
    movb    [r3], rl1
    add     r5, #1
    addc    r6, #0
    add     r3, #1
    subb    rl4, #1
    jmpr    cc_NZ, loc_loop
    movb    rl1, #0FBh
    movb    [r12+#D2RequestStruct.srvId], rl1
    addb    rl7, #5
    movb    [r12+#58h], rl7
    mov     r13, #0
    mov     [r12+#6], r13

loc_return:
    mov     r6, [r0+]
    mov     r7, [r0+]
    mov     r13, [r0+]
    rets

Вызов изначального обработчика был замещён вызовом функции newProcessD2Request, таким образом появилась возможность получать содержимое оперативной памяти (флеша за одно) из контроллера халдекса.

Отключение проверки контрольной суммы

Следующим этапом было отключение проверки контрольной суммы. Нужно в прошивке найти место, которое отвечает за её проверку и переделать условный переход на истину в любом случае. Можно поступить и другим способом, разобрать алгоритм проверки контрольки, найти проверяемые области и обновлять прошивку правильными контрольками. Тут каждый поступает так, как считает нужным. Мне нужно было получить результат, поэтмоу пошёл максимально прямым путём. Как подсказку, могу сказать, что данный вопрос освещался на сайте nefariousmotorsports.com в теме про халдекс.

Что было выяснено

Прошивка принимает следующие параметры из CAN

В прошивке есть некий параметр, текущий режим работы, он используется почти в 200 местах при выборке из карт и прочего. Параметр принимает значение от 0 до 8. Как именно он меняется, пока, не выяснено, но некоторые карты измеют разное значение по этой оси.

Прошивка S60R была сравнена с прошивками от XC90 2.5T и XC70 2.5T. По калибровкам, найдено только одно отличие. В обычных прошивках в одной из карт стоят нулевые значения, в эрочной прошивке эта карта заполнена отрицательными значениями. Осью в прошивке как раз является описанный в прошивке режим работы.

Карта отличие эрочной прошивки от остальных

Дальнейшие работы

На текущий момент времени это всё, что удалось раскопать. Далее процесс анализа будет затрагивать следующие направления