Чип-тюнингкурс с нуля

Модуль 08. Поиск карт в бинарнике#

Перед вами 2 МБ чисел. Где-то там лежит карта УОЗ. Этот модуль — про то, как её найти. Шесть методов, от самого дешёвого к самому трудоёмкому. Пробуйте по порядку: почти всегда останавливаетесь на 1–3.


Метод 1. Готовое описание (5 минут)#

Ищем в порядке доступности:

Что искать Где Формат
DAMOS / A2L Сообщества калибровщиков, платные базы, поставщики файлов .dam, .a2l, .paf
OLS-проект Обмен между тюнерами .ols, .kp
XDF Открытые сообщества TunerPro .xdf
ECU definitions RomRaider (Subaru) .xml
Mappack / скрины адресов Форумы (mhhauto, ecuedit, chiptuner) текст/картинки
Драйвер ECM Titanium База Alientech внутри софта

Как искать грамотно: ключ поиска — это не «Golf 2.0 TDI», а идентификатор ПО: например 03L906018AB 1037390425, или 0281015029, или Denso 275800-8340. Ищите точный номер, потом близкие ревизии — карты обычно на тех же смещениях внутри семейства.

Если нашли описание от соседней прошивки (та же платформа, другая ревизия) — это уже 90 % работы. Адреса сдвинуты, но структура та же. В WinOLS есть «применить проект к другому файлу» с автоподбором сдвига.


Метод 2. Автопоиск в WinOLS (15 минут)#

WinOLS сканирует файл на области, похожие на таблицы, по признакам: - монотонность/гладкость по строкам и столбцам; - разумный диапазон значений; - рядом лежащая возрастающая последовательность (кандидат в ось).

Порядок работы: 1. Задать корректный тип процессора / порядок байт (иначе всё будет мусором). 2. Задать разрядность (8/16 бит) и знаковость. 3. Запустить автопоиск, получить сотни кандидатов. 4. Отсеять по форме: смотреть в 3D-виде, оставлять «правдоподобные». 5. Опознавать по справочнику форм из модуля 04.

Сильный приём: сначала найдите оси. Их проще всего опознать: это короткие возрастающие последовательности с осмысленным шагом. Найдя ось оборотов, вы найдёте все карты, которые её используют — и это сразу отсекает 95 % ложных кандидатов.

Типовые оси и как их узнать:

Ось Как выглядит raw Множитель
Обороты 20, 30, 40, 50, 60, 80, 100, 120, 140, 160 ×40 → 800…6400
Обороты (16 бит) 0x0320, 0x04B0, 0x0640… ×1 → 800, 1200, 1600
Нагрузка/наполнение 10, 20, 30, …, 190 ×0.01 или ×0.75
MAP кПа 20, 40, 60, 80, 100, 150, 200, 250 ×1 или ×2
Температура 0x28, 0x50, 0x78, … ×0.75 − 48 (Bosch)
TPS/педаль % 0, 26, 51, 77, 102, 128, 153, 179, 204, 230, 255 ×100/255
Напряжение MAF 0, 51, 102, …, 255 ×5/255
IQ дизеля мг 0, 5, 10, 20, 30, 40, 50, 60, 80 ×1 или ×0.01

Метод 3. Дифференциальный анализ (30 минут) — самый недооценённый#

Если у вас есть две прошивки, отличающиеся известным образом, дифф моментально показывает, где лежат нужные карты.

Пары, которые стоит искать:

Пара Что покажет дифф
Сток vs любой чужой тюнинг этого же ЭБУ Карты, которые правят тюнеры: наддув, IQ, УОЗ, лимиты
150 л.с. vs 190 л.с. одного мотора Все карты, отвечающие за мощность
Версия для 95-го vs для 98-го бензина Карты УОЗ и защиты по детонации
Версия с DPF vs без DPF (для рынков без требований) Всё, что относится к DPF
МКПП vs АКПП Ограничители момента, интерфейс с TCU
Разные годы одной модели Изменения стратегий

Практика:

1. Загрузить оба файла в WinOLS → Compare
2. Или бинарный дифф: изменённые байты группируются в «острова»
3. Каждый «остров» — это карта. Смотрим размеры и формы
4. Сопоставляем с известными изменениями

Ключевой момент: дифф даёт вам расположение, но не смысл. Смысл подтверждается только логом с машины (метод 6).


Метод 4. Поиск по известным величинам (20 минут)#

Вы знаете, что отсечка 6500 об/мин. Ищите:

Величина Что искать в hex
Отсечка 6500 0x1964 (6500 LE: 64 19), или 6500/40 = 162 = 0xA2
Ограничение скорости 250 км/ч 0xFA, 0x00FA, 250×...
Порог вентилятора 100 °C По формуле Bosch: (100+48)/0.75 = 197 = 0xC5
Целевое давление рампы 1800 бар 0x0708 (при ×1) или другие масштабы
Атмосферное 1013 мбар 0x03F5
Максимальный наддув 2500 мбар 0x09C4

Метод грубый, но для скаляров (1D) он работает отлично — а именно скаляры чаще всего и нужны быстро (отсечка, скорость, лимиты).

Улучшение: изменяйте параметр в машине штатными средствами (если можно), сравнивайте дампы — увидите точный адрес.


Метод 5. Реверс кода в Ghidra (часы–дни)#

Когда данных нет вообще. Подробно — модуль 09. Короткая идея:

  1. Найти функцию интерполяции (у всех ЭБУ одного производителя она одна и та же, вызывается сотни раз).
  2. Найти все вызовы этой функции.
  3. У каждого вызова первый аргумент — указатель на карту.
  4. Получить полный список карт с адресами за один проход.
  5. Опознать назначение по тому, что делает код дальше с результатом.

Это единственный метод, дающий исчерпывающий список карт, включая те, которые автопоиск не увидел (маленькие, ступенчатые, «некрасивые»).


Метод 6. Верификация на машине — обязательный финал любого метода#

Ни один из методов 1–5 не даёт уверенности. Уверенность даёт только это:

1. Взять карту-кандидат
2. Изменить ОДНО заметное значение на явно другое
   (например, УОЗ в одной ячейке: было 20°, ставим 5°)
3. Записать
4. Вывести машину в режим, попадающий в эту ячейку
5. Смотреть live-data
   → УОЗ упал на 15° ровно в этой точке = карта опознана,
     множитель подтверждён, ось подтверждена
   → Ничего не изменилось = не та карта, или её перебивает
     коррекция/ограничитель, или вы не попали в ячейку
6. Вернуть значение

Это и есть «сопоставление карт с реальными данными из авто». Без этого шага вы работаете на вере.

Приёмы для верификации: - Меняйте значение в ячейке, куда легко попасть (ХХ, круиз на 2000). - Меняйте на большую величину, чтобы отличить от шума. - Меняйте «полосой» (весь столбец), чтобы гарантированно попасть. - Для карт целей (наддув, λ) смотрите не результат, а именно параметр «цель» в live-data — он реагирует мгновенно и без влияния регулятора.


08.1 Практический воркфлоу «нет документации»#

┌─ Определить процессор и endianness ──────────────────────┐
│  • по маркировке MCU на плате (фото!)                    │
│  • по «сигнатуре» файла (векторы прерываний в начале)    │
│  • по базам: какой MCU в каком блоке                     │
└──────────────────────────┬───────────────────────────────┘
                           ▼
┌─ Определить базовый адрес загрузки ──────────────────────┐
│  Файл может начинаться не с адреса 0. Ищем таблицу       │
│  векторов: массив похожих значений вида 0x800xxxxx —     │
│  это адреса. Их старшая часть = база                     │
└──────────────────────────┬───────────────────────────────┘
                           ▼
┌─ Найти границу CODE / DATA ──────────────────────────────┐
│  Код выглядит как «шум» с повторяющимися паттернами      │
│  инструкций. Данные — гладкие последовательности.        │
│  Часто есть явная граница и «пустая» зона 0xFF           │
└──────────────────────────┬───────────────────────────────┘
                           ▼
┌─ Найти оси ──────────────────────────────────────────────┐
│  Короткие монотонно возрастающие последовательности      │
│  с осмысленными значениями. Отметить все.                │
└──────────────────────────┬───────────────────────────────┘
                           ▼
┌─ Автопоиск карт + ручная фильтрация по форме ────────────┐
└──────────────────────────┬───────────────────────────────┘
                           ▼
┌─ Приоритизировать: искать не всё, а нужное ──────────────┐
│  Для Stage 1 бензин турбо надо ~8 карт, а не 400.        │
│  Список — в модуле 11.                                    │
└──────────────────────────┬───────────────────────────────┘
                           ▼
┌─ Верифицировать каждую правкой на машине ────────────────┐
└──────────────────────────────────────────────────────────┘

08.2 Как отличить карту от «не карты»#

Ложные срабатывания автопоиска — главная проблема. Признаки настоящей калибровочной карты:

✅ Размеры — «круглые»: 8×8, 16×16, 12×8, 16×10, 10×6. Редко простые числа. ✅ Значения монотонны хотя бы по одной оси. ✅ Рядом (или по общему указателю) есть возрастающая последовательность-ось. ✅ При смене типа данных карта «разваливается» — значит тип угадан верно. ✅ В 3D-виде — гладкая поверхность без иголок.

❌ Строки текста (VIN, номер ПО, отладочные строки) — читаются в ASCII. ❌ Таблицы переходов кода (jump tables) — значения похожи на адреса (одинаковая старшая часть). ❌ Таблицы DTC — повторяющиеся структуры фиксированной длины с «кодами» P0xxx. ❌ Константы фильтров/PID — короткие, не образуют поверхности. ❌ Область 0xFF/0x00 — незанятая флеш.


08.3 Приоритетный список карт для типовых задач#

Не ищите всё. Ищите то, что нужно для конкретной работы.

Бензин турбо, Stage 1 — 8 карт#

  1. Целевой наддув / целевое наполнение
  2. Упреждение (pre-control) клапана WG
  3. УОЗ основной
  4. Ограничение УОЗ / карта детонации
  5. Целевая λ на полной нагрузке (обогащение)
  6. Ограничители момента (все применимые)
  7. Порог overboost cut
  8. Ограничение по IAT / компонентная защита

Бензин атмо, Stage 1 — 4 карты#

  1. УОЗ основной
  2. Целевая λ на полной нагрузке
  3. VE или MAF-характеристика
  4. Отсечка + ограничители момента

Дизель CR, Stage 1 — 7 карт#

  1. Момент → IQ (основная карта количества топлива)
  2. Дымовой ограничитель (IQ по воздуху)
  3. Ограничитель IQ абсолютный / по оборотам
  4. Целевой наддув
  5. Целевое давление рампы
  6. SOI (момент впрыска)
  7. Ограничение по EGT

Диагностика чужой работы — 3 действия#

  1. Дифф со стоком → список того, что трогали
  2. Проверка ограничителей (часто «забыты» и режут результат)
  3. Проверка защит (часто отключены — вот где опасность)

08.4 Организация работы: делайте свою базу#

Каждый разобранный ЭБУ — актив. Заведите структуру:

/knowledge/{производитель ЭБУ}/{семейство}/{номер ПО}/
    original.bin
    project.ols или definitions.xdf
    notes.md            ← адреса, множители, что проверено, чем
    verified_maps.csv   ← карта | адрес | размер | тип | factor | offset | ПОДТВЕРЖДЕНО?
    diff_vs_{другая}.txt

Через год у вас будет то, за что коллеги платят деньги. Через три — вы будете работать быстрее всех в городе, потому что 80 % машин повторяются.


Практическое задание#

  1. Возьмите открытый Subaru ROM с определениями RomRaider. Закройте определения. Попробуйте найти карту УОЗ методами 2 и 4 самостоятельно. Затем откройте определения и проверьте себя. Это упражнение — главное в модуле.
  2. Найдите две версии одной прошивки (сток и любой тюнинг). Сделайте дифф. Составьте список «островов» с адресами и размерами. Сколько из них вы можете опознать по форме?
  3. Найдите в вашем ROM: отсечку по оборотам методом 4. Проверьте правкой на машине (метод 6). Если не машина — на донорском ЭБУ через live-data.

Следующий модуль: 09. Ghidra + ИИ

КПЦ — Комплекс Промышленной Цифровизации · kpc-control.ru

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