PDA

Просмотр полной версии : Проблема копирования дампа MCS-48 (возможно защита)



akudelev
21.08.2024, 10:08
Имеется устройство Autohelm-3000 - "авторулевой для парусной лодки".
Произведено американской компанией Raymarine в начале 90х.
Функционал устройства простой - управлять моторчиком 12в, поддерживать заданный магнитный курс движения судна. Корпус лодки повернулся направо - коммутируется соединение "повернуть руль налево и дожидаться возврата на курс", и наоборот. Через микроконтроллер Intel D8749H в авторулевом решается сама логика "руления": "реагировать на кнопки", "мигать/пищать", "отслеживать курс" и подобное.
......
Устройство исправно работало, но в ходе неудачного вмешательства (пытались ему подключить выносные кнопки) - "спалили" микроконтроллеру "ногу №23" и один ряд кнопок перестал работать. В остальном устройство исправно, на подачу питания и нажатие остальных кнопок реагирует как обычно.
......
Вынул чип из разъема, с помощью программатора Willem успешно снял дамп.
Успешно залил дамп в пустой новый чип. Прошивка успешная - программа совпадает 1:1 старый-новый.
Но после установки нового чипа в разъем - устройство не работает.
При подаче питания оно должно кратковременно пискнуть и моргнуть светодиодом.
Но новый чип пищит и светит постоянно (микроконтроллер где-то зависает в начале программы).
После возврата старого чипа - все работает, втыкаю новый - нет, висит.

......
Перепробовал разные чипы, разные варианты прошивки, менял тактовую частоту:
1) Закупил 5 чипов D8749H из от 5 разных производителей (маркировка размещена по разному, цвет пластика разный, производители как INTEL, так и NEC). Одни шьются только с шунтом, другие без. Точно разные партии.
2) Закупил кварцы, менял кварцевый резонатор с оригинальных 11Мгц на 10Мгц, 6Мгц, 4Мгц - старый чип работает на всех частотах, новый чип виснет.
3) Нашел в интернете прошивку с другого рабочего Autohelm-3000, прошивал ее.
Результат прежний - старый чип работает, новый чип зависает и пищит, на всех вариантах чипов и прошивок результат одинаковый.
4) Втыкал "пустой чип" - да, все логично, прибор молчит.

......
Копался в дизассемблерном листинге и корректировал программу:
1) Достал листинг прошивки Autohelm-3000, частично разобрал, сравнил с бинарником - да, это корректный листинг.
2) Корректировал дамп для проверки его функционирования (размещал по нужным адресам NOPы) - пищалка не активируется, только светодиод постоянно горит, то-есть программа выполняется, но или аппаратно или программно зависает где-то дальше.

.....
Выглядит так, будто программа защищена от копирования:
1) Дамп сделан под конкретный чип и выполняется проверка по серийному номеру, - но в мануалах ничего подобного не встречается. Нету в ассемблере MCS-48 команды "программно прочитать серийник".
2) Возможно что-то записано в энергонезависимый(?) RAM, ее нельзя скопировать программатором. Но RAM на этом процессоре обычный, и без питания (и тем более с извлечением чипа) - гарантированно сбрасывается.
3) Возможно производитель для защиты в своем чипе сам "сжег" какие-то невостребованные пины. И программа получая с их значения, определяет свое присутствие в другом микроконтроллере. Но всю схему перелопатил, подозрительные "пины" не втыкал в разъем, а подвешивал в воздух. Нет - все всегда одинаково, старый чип работает, новый - зависает.

.....
А может требуется какая-то дополнительная настройка для "нового чипа", кроме "залить дамп"?
И в программаторе Willem этого функционала нет?
1) Задать тактовую частоту внутреннего таймера - ну, нет такого в мануалах. И старый чип работает с любыми кварцевыми резонаторами: 11Мгц, 10Мгц, 6Мгц, 4Мгц, новый - виснет.
2) Как-то задать направление портов или их назначение? Но работа с портами определяется на уровне программы или питанием на пинах. Здесь все одинаково и схемотехника и дамп.


.....
Подскажите, что может быть?
Голову уже сломал с копированием этого чипа.

PS:
Файл со схемой устройства к сообщению приложить не дает.
Может у меня рейтинг маловат.
Выложил файл вот сюда:
https://disk.yandex.ru/i/xPJaC6uoOHsDGQ

- - - Добавлено - - -

Открывал аналогичную тему на "cyberforum" (не уверен, что здесь принято прикладывать ссылки на него)
Вот ключевые дополнения оттуда:
............

Прошивку скачанную из интернета - я разбирал.
Очень логичная в части работы с портами и шиной и засылаемыми масками.
Видно как засылает маску:
anl bus,#07FH - на включение пищалки
anl bus,#0BFH - на включение лампочки
orl bus,#040H - на выключение лампочки

Видно как последовательно перебирает переключатель для определения его положения
anl bus,#0DFH - маска на 6 положение переключателя
call L051F
anl bus,#0EFH - маска на 5 положение переключателя
call L051F
anl bus,#0F7H - маска на 4 положение переключателя
call L051F
итд

короче, понятная логичная прошивка, верю что от Autohelm-3000
Но в работе ее не видел.

Снятая мной прошивка - гораздо более запутанная.
Явно видна только работа с пищалкой - anl bus,#07FH
Но других понятных конструкций в работе с портами и шиной со знакомыми масками - так сразу не обнаруживается.
Прошивка вообще другая по структуре - очень мало общих элементов с предыдущей прошивкой.
Но эта прошивка - точно работает на старом чипе!

Обе прошивки рабочие, одну в работе видел практически, в работу другой можно поверить теоретически.
Обе одинаково "зависают" на новом чипе - пищат и светят лампой.
если вместо anl bus,#07FH поставить NOP - обе не пищат, а только светят.
Процессор пытается выполнять и ту и другую прошивку, где-то чуть дальше обе виснут с одинаковым эффектом.

.......
Есть подозрение на strt t и прочие таймерные функции.
В интенет-прошивке запуск таймера идет сразу вначале программы.
Может ему что-то мешает нормально таймеру аппаратно работать в новых чипах?
Ибо, что на кварце 11Мгц, что на кварце 4Мгц - на старом чипе писк и свет длится ровно полсекунды, несмотря на разницу тактовых частот более чем в 2 раза. А вот на новых чипах - писк и свет начинается, но не заканчивается.

- - - Добавлено - - -

Еще дополнения касательно подозрений на "сверку программы с серийным номером":
.........
На электронной схеме нет более ни одного поставщика цифрового кода, ни внешней памяти, ни внешнего ПЗУ.
Есть несколько DIP-микросхем, но они уникальный код хранить не могут
IC5 = M74HC4066B1R = "четыре двунаправленных переключателя"
IC4 = CD4051BE = "Мультиплексор аналоговый 8-каналов"
IC3 = CA3130EZ = "Операционный усилитель"
.........
Ну и новый чип со скопированной программой вставляется в ту-же самую плату!
Если бы были поставщики "серийного номера платы" - то номер был бы тот-же самый!

jerri
21.08.2024, 10:11
akudelev, а прошивка какого обьема?
может прощен дизассемблить?

akudelev
21.08.2024, 10:30
Было подозрение на то, что 23й пин используется для формирования адреса, и что считанный дамп мог оказаться некорректным.
......
Но для 2к нужно 11 бит адресации, и согласно мануалам программатор будет использовать: BUS+P20+P21+P22
То-есть до 23го контакта очередь не доходит (это для 4к нужно 12бит адресации - для intel 8050)
Но, дамп из интернета и скачанный дамп на новом процессоре ведут себя одинаково.

- - - Добавлено - - -

Прошивка 2килобайта
Прочитанную - дизассемблировал... очень запутанная, это немного смутило.
...
Скачанную из интернета - получил с "ASM-исходником дизассемблированным" - вполне понятная.
Разбирал, нашел множество ожидаемых точек работы с BUS и портами.
ASM - https://disk.yandex.ru/d/QhAxfpMO5yirXw
BIN - https://disk.yandex.ru/d/x9OyLHragY3ryQ
.....
Сверял в ключевых местах, где идет работа с BUS - да, дизассемблирована корректно.
Модернизировал прошивку NOP-ами - да, где нужно "звук выключается" - BIN выполняется.
Но виснет где-то дальше.
....
Совсем не хочется разбирать ASM на функции, память на переменные, вручную собирать из него C++ и вникать во всю алгоритмику вычисления угла перекладки руля и длительности работы моторчика.
Когда этот BIN выполняется на старом чипе - к алгоритмам его работы претензий нет.
Ошибка не в алгоритмах, а в какой-то особенности прошивки D8749H, или в его возможной необычной защите от копирования.

UncleDim
21.08.2024, 10:55
off: а реанимировать пин не пробовали? бывают счастливые случаи, когда "дожиганием" ушедшего в кз (или около того) защитного диода работоспособность восстанавливается, иногда требуется навесить внешнюю подтяжку

Serg6845
21.08.2024, 11:59
Имеется устройство Autohelm-3000 - "авторулевой для парусной лодки".


Но новый чип пищит и светит постоянно (микроконтроллер где-то зависает в начале программы).
После возврата старого чипа - все работает, втыкаю новый - нет, висит.


глянув на схему - первое что бросается в глаза - это подстроечник на 39 ноге. контроль питания возможно, и по нему есть переходы в программе (2 штуки). а поскольку у 48 серии нет аналоговых входов - все работает за счет порога переключения ножки из 0 в 1. а он у разных экземпляров может отличаться.




.....
Выглядит так, будто программа защищена от копирования:
1) Дамп сделан под конкретный чип и выполняется проверка по серийному номеру, - но в мануалах ничего подобного не встречается. Нету в ассемблере MCS-48 команды "программно прочитать серийник".
2) Возможно что-то записано в энергонезависимый(?) RAM, ее нельзя скопировать программатором. Но RAM на этом процессоре обычный, и без питания (и тем более с извлечением чипа) - гарантированно сбрасывается.
3) Возможно производитель для защиты в своем чипе сам "сжег" какие-то невостребованные пины. И программа получая с их значения, определяет свое присутствие в другом микроконтроллере. Но всю схему перелопатил, подозрительные "пины" не втыкал в разъем, а подвешивал в воздух. Нет - все всегда одинаково, старый чип работает, новый - зависает.

да какой там, у 48 серии вроде даже защиты ПЗУ от считывания нет...

akudelev
21.08.2024, 12:13
Прошивка 2килобайта
Прочитанную - дизассемблировал... очень запутанная, это немного смутило.
...
Скачанную из интернета - получил с "ASM-исходником дизассемблированным" - вполне понятная.
Разбирал, нашел множество ожидаемых точек работы с BUS и портами.
ASM - https://disk.yandex.ru/d/QhAxfpMO5yirXw
BIN - https://disk.yandex.ru/d/x9OyLHragY3ryQ
.....
Сверял в ключевых местах, где идет работа с BUS - да, дизассемблирована корректно.
Модернизировал прошивку NOP-ами - да, где нужно "звук выключается" - BIN выполняется.
Но виснет где-то дальше.
....
Совсем не хочется разбирать ASM на функции, память на переменные, вручную собирать из него C++ и вникать во всю алгоритмику вычисления угла перекладки руля и длительности работы моторчика.
Когда этот BIN выполняется на старом чипе - к алгоритмам его работы претензий нет.
Ошибка не в алгоритмах, а в какой-то особенности прошивки D8749H, или в его возможной необычной защите от копирования.

глянув на схему - первое что бросается в глаза - это подстроечник на 39 ноге. контроль питания возможно, и по нему есть переходы в программе (2 штуки). а поскольку у 48 серии нет аналоговых входов - все работает за счет порога переключения ножки из 0 в 1. а он у разных экземпляров может отличаться.

Там все просто.
Это не подстроечник, это "переключатель направления вращения мотора".
В зависимости от положения этого реостата (выкручен полностью вправо или влево) - на 39й ноге или +5в или 0в.
Программа через инструкцию JT1 читает уровень на 39й ноге и дает прямую или обратную полярность для вращения мотора на пинах 37 и 38 (старшие биты Port2)

- - - Добавлено - - -

Приложил краткий мануал по D8749
Там назначение пинов рассписано
https://disk.yandex.ru/i/DBp0y2BS9MGoiA

im2
21.08.2024, 13:29
D8749 в керамике с окном? читайте дамп с оригинала несколько раз и сравнивайте, вероятно есть плавающие биты в прошивке. На АОН'ах так прошивки защищали в свое время.

akudelev
21.08.2024, 13:51
D8749 в керамике с окном? читайте дамп с оригинала несколько раз и сравнивайте, вероятно есть плавающие биты в прошивке. На АОН'ах так прошивки защищали в свое время.

Да, D8749H - с окном.
Спасибо, попробую прочитать несколько раз, сравню прочитанное.

- - - Добавлено - - -


off: а реанимировать пин не пробовали? бывают счастливые случаи, когда "дожиганием" ушедшего в кз (или около того) защитного диода работоспособность восстанавливается, иногда требуется навесить внешнюю подтяжку

Спасибо, померю напряжение на пинах.
Дожечь - вариант "последней надежды".

RCgoff
22.08.2024, 12:26
Было подозрение на то, что 23й пин используется для формирования адреса, и что считанный дамп мог оказаться некорректным.
......
Но для 2к нужно 11 бит адресации, и согласно мануалам программатор будет использовать: BUS+P20+P21+P22
То-есть до 23го контакта очередь не доходит (это для 4к нужно 12бит адресации - для intel 8050)

У вас тут ошибка. 23-й пин - это P22, адресная линия A10, до него доходит очередь.
Если он отгорел, вы не сможете считать все 2Кб прошивки, а только половину

akudelev
22.08.2024, 15:10
Перепроверил мануал - да, точно!
P22 он на пине 23!
Увы, значит прошивка читается с ошибками.
Потому она меня смутила, и так отличается от той второй прошивки.
.....
Ладно, буду разбираться с второй прошивкой, скачанной из интернета.
И попробую снять дамп с заведомо исправного устройства.

i8088
23.08.2024, 17:59
+5V на pin 26 есть?

При дефекте A10 по идее два раза одно и тоже должно прочитаться, те в считанной
прошивке должны быть одинаковые верхняя и нижняя половина. А у Вас они
отличаются. Может быть, из-за апаратного повреждения нарушилась возможность
корректного чтения внутренней памяти извне (в смысле не только из-за A10)?

Прошивка, скачанная с интернет, может не работать у Вас по причине отличия
аппратной части (те возможно выпускалось несколько ревизий устройства, со
своими прошивками под каждую ревизию)


Совсем не хочется разбирать ASM на функции, память на переменные, вручную собирать из него C++ и вникать во всю алгоритмику вычисления угла перекладки руля и длительности работы моторчика.
Какой C++? Для него и Си нет, по понятным причинам, да и не нужен Си для него.

AlexG
25.08.2024, 13:43
именно за это чип не скажу, однако в каких-то моделях была "защита от копирования" - в древности это был XOR "волшебное число" с каждым байтом программы во время чтения в программаторе. в гораздо более современных защита от копирования была реализовано отсутствием чтения (читается все "FF").
Нужно читать описание на проц... а мне нынче лень
пс: кажется это применимо к 51 семейству, а 48 вроде можно всё читать.

RCgoff
26.08.2024, 09:45
А у Вас они
отличаются.

В теме не была выложена считанная прошивка

akudelev
12.02.2025, 01:08
Итого, спустя полгода:
Оба дампа оказались битыми.
Один дамп (самостоятельно снятый) был кривой по причине подгоревшей 23й ноги (она отвечает за старший бит в адресации при чтении/записи EEPROM) - поэтому в 2кб прочтенного дампа были два абсолютно одинаковых блока 1кб+1кб.
Второй дамп (скачанный из интернета) был кривой по непонятным причинам.
......
Найдено рабочее устройство и снят рабочий дамп.
Все ОК, все работает.
Эпопея завершена!
Всем спасибо, кто помог советом!

- - - Добавлено - - -

В коллекцию готовых решений - электросхема устройства и дамп с чипа:
...
Для поисковых роботов:
Autohelm 2000,3000,4000 дамп епрома, прошивка, бинарник, firmware, eeprom dump, binary file
Autohelm 2000,3000,4000 принципиальная электронная схема, electronic circuit, electronic diagram
Скачать бесплатно, с регистрацией, без смс. :-)