Форум программистов, компьютерный форум, киберфорум
Arduino
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510

Дизассемблинг прошивки микроконтроллера

03.03.2025, 19:44. Показов 1773. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет
интересует вопрос насколько сложно восстановить код из собственно данных которые хранятся в модуле памяти микроконтроллера, неважно ардуино, есп, стм и иные.

Как по мне вполне реально, ведь микроконтроллер как-то же восстанавливает он же исполняет прогрммму, а стало быть читать умеет.

Т.е. вопрос такой, если например микроконтрлллер с програамой окажется у вендора микроконтрллера , вряд ли для него составит большого труда восстановить в плюс минус читаемый код?
конечно же там не будет именований функций и переменных - это понятно, но алгоритмы работы все будут как на лицо.
и кстати - типы данных в том числе собственные они как -то определяться?
т.е. восстановятся ли классы самодельные ?

Добавлено через 56 секунд
т.е. тут уже вопрос в ооп, во что компилятор gcc например и иной общедоступный, понятно что можно свой компилятор написать,
во что он разворачивает классы и наследование и пр?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.03.2025, 19:44
Ответы с готовыми решениями:

Как можно вытащить массив прошивки из файла для микроконтроллера STM32
Приветствую всех. Имею электронный переходник для фотоаппарата Фуджифильм Viltrox-2-EF-FX, после неудачной попытки считать прошивку с...

Можно ли найти микроконтроллер под конкретную задачу?
Мне нужен микроконтроллер способный работать с базами данных, точнее не именно с конкретной базой данных, а настроить механизм транзакций,...

Микроконтроллер семейства AVR, использование таймеров
Может кто работат с такой штукой как микроконтроллер AVR (а точнее ATMEL MEGA8)... Мне нужно делать длинную задержку (1 сек.), думаю...

18
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
03.03.2025, 20:11
pup_kin, инструменты есть (Ghidra, например)

Но вот вытащить прошивку бывает очень сложно
У многих MCU есть защитные механизмы против этого:
- шифрование на случай, если код хранится во внешней памяти(флешке)(а ключи расшифровки write-only...)
- при чтении программатором отдавать нули вместо кода.
- программирование нового кода только полного стирания старого...

Не все так просто...
1
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
03.03.2025, 20:19  [ТС]
Цитата Сообщение от Max Dark Посмотреть сообщение
Но вот вытащить прошивку бывает очень сложно
ну вот к примеру есп
говорят просто вынимается программатором обычным и размножается потом.
там вроедсхема 24 или 25
на каждую схему свои девайсы привет кеп

а как узнать на каком микроконтроллере используется шифрование ?
на ардуино уно нано микро, есп 8266 и стм незнаю модель кажется точно нет.

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

т.е вопрос такой вендор сможет расковырять же - без проблем?
0
Native x86
Эксперт Hardware
 Аватар для quwy
6853 / 3787 / 1024
Регистрация: 13.02.2013
Сообщений: 11,861
03.03.2025, 20:33
Шифрование внешнего ROM может быть реализовано любый контроллером, и ключи прошивает программист, какие ему захочется. Так что никаких "стандартных" отмычек не существует, если чтение памяти контроллера заблокировано, то шансы расшифровать упираются только в криптостойкость алгоритма (алгоритм, кстати, может быть любой, и его тоже нужно сначала угадать).
1
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
03.03.2025, 20:35  [ТС]
Цитата Сообщение от quwy Посмотреть сообщение
Шифрование внешнего ROM может быть реализовано любый контроллером,
а в ардуино ИДЕ это можно сделать?
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
03.03.2025, 20:38
Цитата Сообщение от pup_kin Посмотреть сообщение
а в ардуино ИДЕ это можно сделать?
Да.
Напишите свой плагин с поддержкой шифрования.
1
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
03.03.2025, 20:39  [ТС]
Цитата Сообщение от quwy Посмотреть сообщение
Шифрование внешнего ROM
а куда ключи вшивать и как прописать ключи расшифровки?
и как изменится скоротсь работы программы в этом случае?
как микроконтроллер будет с ней работать?
например записано 100 байт они зашифрованы,
он перед началом их расшифровывает
получает еще 100 байт расшифрованной программы, и куда он их денет?
ему же надо ее куда то загрузить или свопнуть он же все в операивку не засосет, а если места и так нет.
не совсем понимаю.
получается он будет перед каждой операцией производить расшифровку, но это ж снизит скоротсь работы конечной программы?
0
Native x86
Эксперт Hardware
 Аватар для quwy
6853 / 3787 / 1024
Регистрация: 13.02.2013
Сообщений: 11,861
03.03.2025, 20:41
Везде можно сделать. Считанные из внешнего чипа данные просто прогоняются через функцию дешифровки перед использованием. Функция может быть какой угодно, от обычного XOR до AES или чего угодно, на что хватит мощности контроллера.

Добавлено через 2 минуты
Цитата Сообщение от pup_kin Посмотреть сообщение
а куда ключи вшивать и как прописать ключи расшифровки?
Туда же, куда и все остальные константы программы.

Цитата Сообщение от pup_kin Посмотреть сообщение
и как изменится скоротсь работы программы в этом случае?
Уменьшится, очевидно.

Цитата Сообщение от pup_kin Посмотреть сообщение
как микроконтроллер будет с ней работать?
Как с любыми другими данными.

Цитата Сообщение от pup_kin Посмотреть сообщение
например записано 100 байт они зашифрованы,
он перед началом их расшифровывает
Это уже ваша забота. Хотите шифровать, придумайте где будете хранить расшифрованное.
1
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
03.03.2025, 20:42
pup_kin, RTFM для ESP
1
Модератор
Эксперт Java
 Аватар для alecss131
2840 / 1349 / 403
Регистрация: 11.08.2017
Сообщений: 4,306
Записей в блоге: 2
03.03.2025, 21:25
Цитата Сообщение от pup_kin Посмотреть сообщение
ведь микроконтроллер как-то же восстанавливает он же исполняет прогрммму
В смысле восстанавливает? Программа компилируется в машинные коды (последовательности байт) конкретного процессора и сохраняется в бинарном виде в прошивке. Для ее исполнения не надо ничего восстанавливать, грубо говоря просто читает байты и исполняет их.
Цитата Сообщение от pup_kin Посмотреть сообщение
во что он разворачивает классы и наследование и пр?
Для процессора нету ни ООП, ни структур, ни даже типов, для него все переменные различаются только размером. Да и для МК можно писать не только на ООП языках, а так же на более низких, например на Си или ассемблере. ООП и прочие абстракции существуют только в виде исходного текста программы. По идее код с ООП и функциями при хорошем компиляторе может выдать один и тот же ассемблерный код.
Так что восстановить чтото читаемое и нормальное из прошивки можно только если она написана на Java/C#/Python/JS, но они редкие зверьки для МК
В этом плане МК от ПК мало чем отличается. Это не касаясь извлечения прошивки.
1
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
03.03.2025, 22:05  [ТС]
Цитата Сообщение от alecss131 Посмотреть сообщение
читаемое и нормальное из прошивки можно только если она написана на Java/C#/Python/JS
не совсем понятно почему, она же в конце концов превращается все в тот же бинарный файл.
или вы имеете ввиду что платформа Java/C#/Python/JS сама разгребет и представит ?

Вот он ответ, т.е. если я напишу компилятор, то для меня не составляет труда и обратная задача декомпилировать.

т.е.у вендора 100% есть декомпилятор условный,
и ничего о него не скроешь, не существует способа, если устройсто попало в руки к вендору и содердит все необходимые данные на своем борту скажем так, а ключи например не получаются с внешнего устройства

т.е. все что написано и даже зашифровано, при полноте данных раскрывается?

А существует например декомпилятор к gcc ?
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
03.03.2025, 22:32
Лучший ответ Сообщение было отмечено pup_kin как решение

Решение

Цитата Сообщение от pup_kin Посмотреть сообщение
А существует например декомпилятор к gcc ?
Дизассемблров - множество их.
Часть довольно продвинутые и могут восстановить из бинарника что то похожее на сишный код.

* IDA Pro
* Radare2
* Ghidra
* ...
1
Модератор
Эксперт Java
 Аватар для alecss131
2840 / 1349 / 403
Регистрация: 11.08.2017
Сообщений: 4,306
Записей в блоге: 2
03.03.2025, 22:49
Лучший ответ Сообщение было отмечено pup_kin как решение

Решение

Цитата Сообщение от pup_kin Посмотреть сообщение
она же в конце концов превращается все в тот же бинарный файл
Неа, они используют промежуточный байт код, который без особых проблем восстанавливается даже включая имена. Не знаю про все из перечисленных языков, но я видел МК на JS, например Iskra JS
Цитата Сообщение от pup_kin Посмотреть сообщение
если я напишу компилятор, то для меня не составляет труда и обратная задача декомпилировать
Не верно, компиляция в любом случае односторонний процесс, включая оптимизацию кода, когда некоторые куски выбрасываются или упрощаются. Обратно это очень сложный и кропотливый процесс и позволяет узнать в основном логику работы без исходных абстракций
Цитата Сообщение от pup_kin Посмотреть сообщение
А существует например декомпилятор к gcc ?
Компилятор и декомпилятор в пределах одного языка никак не связаны между собой
0
3758 / 2637 / 580
Регистрация: 11.09.2009
Сообщений: 9,416
04.03.2025, 01:15
Цитата Сообщение от pup_kin Посмотреть сообщение
Вот он ответ, т.е. если я напишу компилятор, то для меня не составляет труда и обратная задача декомпилировать.
Ага. Включая коментарии.
Может вам сначала книжку какую почитать? Типа "Введение в программирование" по информатике для пятого класса какую-нибудь...
1
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
04.03.2025, 02:38  [ТС]
Цитата Сообщение от alecss131 Посмотреть сообщение
Компилятор и декомпилятор в пределах одного языка никак не связаны между собой
я имел ввиду не в пределах языка, а в пределах разработчика компилятора
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
04.03.2025, 07:43
Цитата Сообщение от pup_kin Посмотреть сообщение
а в пределах разработчика компилятора
У вас есть котлеты и бульон на косточке приготовленный одним производителем на одной фабрике в одну смену. Вопрос - какого цвета была корова, из которой эти блюда были сделаны?
Вот так же и с компилируемыми в машинный код языками.
2
649 / 402 / 76
Регистрация: 21.09.2008
Сообщений: 1,387
04.03.2025, 16:43
Ещё один продукт для исследователя кода: Cutter
Цитата Сообщение от pup_kin Посмотреть сообщение
если я напишу компилятор, то для меня не составляет труда и обратная задача декомпилировать.
С ассемблера в машинный код и обратно - вполне возможно, но не всегда. В RISC-V есть псевдоинструкции, которые после компиляции разворачиваются в другую команду, а то и несколько команд. А если ещё и обфускацию кода использовать, то дизассемблер выдаст не пойми какой результат.
0
 Аватар для MallSerg
91 / 58 / 14
Регистрация: 16.11.2018
Сообщений: 269
04.03.2025, 17:11
Лучший ответ Сообщение было отмечено pup_kin как решение

Решение

Стоит упомянуть про скальпирование чипов и обратный инжиниринг схемотехники кристаллов. Что делает защиту прошивки довольно условной.
Для стандартных чипов это 8 - 16 дырочек просверленных в нужных местах, что дает полный контроль над чипом и его памятью. Можно не замарачиваться с расшифровкой а читать уже расшифрованный код.

Это конечно добавляет заморочек но в Китае на радиорынках это делают за 20-100 баксов за полдня.
1
16 / 18 / 2
Регистрация: 02.03.2024
Сообщений: 510
04.03.2025, 17:24  [ТС]
Цитата Сообщение от MallSerg Посмотреть сообщение
Это конечно добавляет заморочек но в Китае на радиорынках это делают за 20-100 баксов за полдня.
да, я ж пишу , от хавалов и иных погремушек китайских кючи шифрования гуляют по сети, садись в лбой на выбор и ехай на металлоприемку
воздействие паяльником через дырки - наше всё ))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.03.2025, 17:24
Помогаю со студенческими работами здесь

Какой микроконтроллер сможет работать с частотой от 1 до 3 ГГц?
Какой микроконтроллер сможет работать с частотой от 1 до 3 ГГц?

Нужен микроконтроллер с поддержкой USB -slave, и можно было подключить модуль wifi и модуль 3g
Нужен микроконтроллер с поддержкой USB -slave, и можно было подключить модуль wifi и модуль 3g... Спасибо за внимание

Микроконтроллер ADuC 842, выполнить функцию
Здравствуйте, надеюсь что вы хоть меня выручите. Есть задача, написать программу для выполнения функции y=k*b/4+k*x . Проблема в том что ни...

Как узнать какой микроконтроллер стоит
В общем ситуация такая, есть CTS(Colorado Time System) - система автоматизации для плавательных бассейнов(организация соревнований), так...

КАк проверить микроконтроллер FT232BL по USB
1.Спаял микроконтроллер на FT232BL, TX и RX соединил вместе для проверки посылки и получения бит. 2.Подкинул USB и драва, в диспетчере...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru