Чтение микроконтроллеров (MCU Readers)
Все описанные здесь считыватели микроконтроллеров используют конструктивный недостаток микросхем Oki MCU. Этот недостаток позволяет получить доступ к внутренней памяти ROM, даже если она изначально защищена.
Описание уязвимости:
- MCU могут использовать внутренний или внешний ROM для хранения программ.
- Состояние сигнала _EA (обычно имеет линию над EA) определяет, какая память (внутренняя или внешняя) используется:
- GND: внешний ROM.
- +5V: внутренний ROM.
- Проблема:
MCU Oki не фиксируют (не “защелкивают”) состояние пина _EA при запуске. Это позволяет “разблокировать” внутреннюю память с помощью определенных действий, даже после запуска микроконтроллера.
Алгоритм работы считывателя:
- Подключить пин _EA к одному из I/O пинов вручную, используя при необходимости подтягивающий/подтягивающий вниз резистор.
- Использовать ROM, который больше по размеру, чем внутренний ROM микроконтроллера. Убедитесь, что все адресные линии подключены.
- Инициализировать последовательный порт MCU для связи с ПК.
- Перейти в область памяти выше защищенного ROM (например, 32 кБ для 66207, 48 кБ для 66507).
- Изменить состояние _EA через I/O пин.
- Ввести цикл задержки, чтобы дать внутреннему ROM отобразиться в памяти.
- Скопировать содержимое ROM через последовательный порт на ПК.
Тестированные схемы считывателей:
OBD2 Oki66507 Reader Didier
Обновленный дизайн считывателя для Oki66507, созданный Didier.
OBD0 Oki83 C154 Reader
Адаптация Blundar для микроконтроллеров Oki83 C154.
OBD1 Oki66207 Reader-DIP64
Оригинальная разработка Doc для чипов DIP64.
OBD1 Oki66207 Reader-PLCC68
Адаптация John de Sol для JDM SMT-чипов Oki66207.
OBD2 Oki66507 Reader Nico
Оригинальный считыватель для Oki66507, разработанный Nico.
Для других микросхем:
Для считывания других чипов потребуется изменить:
- Физический формат платы (тип корпуса чипа).
- Код, чтобы учесть разную тактовую частоту и размер памяти ROM.