
Ghidra для реверса прошивок: практический гайд по восстановлению логики бинарника
kmoseenk только что Ghidra для реверса прошивок: практический гайд по восстановлению логики бинарника Средний 10 мин 6 Блог компании OTUS Реверс-инжиниринг * Информационная безопасность * Туториал Перевод Автор...
Anthropic — What company has the best second artificial intelligence model at the end of June?
В сфере искусственного интеллекта произошло заметное событие. kmoseenk только что Ghidra для реверса прошивок: практический гайд по восстановлению логики бинарника Средний 10 мин 6 Блог компании OTUS Реверс-инжиниринг * Информационная безопасность * Туториал Перевод Автор оригинала: Adam Bromiley Я начал заниматься инфобезопасностью в тот же год, когда NSA осчастливило нас Ghidra. С тех пор она уверенно стала самым востребованным инструментом в моём арсенале для реверс-инжиниринга и исследования уязвимостей. Она бесплатная, расширяемая и поддерживает некоторые из более странных архитектур, с которыми нам приходится сталкиваться.
Но порог входа у неё высокий. Эта статья — итог того, чему я научился за, возможно, слишком много часов перед слепящим и устаревшим интерфейсом Ghidra. Основной фокус здесь — анализ прошивок, так что исследователи вредоносного ПО и охотники за багами в ОС могут немного разочароваться.
Технические детали
Но полезные приёмы должны найтись для всех. Все примеры взяты из реальных исследовательских проектов, которыми мы занимались. Стоит сразу оговориться: реверс-инжиниринг — процесс небыстрый.
Чтобы полностью понять, как работает система, могут уйти недели. Улитка всё-таки взбирается на Фудзи… рано или поздно. СодержаниеОпределяем адрес загрузкиИщем таблицу векторов прерыванийЗадаём карту памятиАннотируем как можно большеИщем функции по строкамНе пропускаем строки на стекеОхотимся за магическими значениямиПланирование в RTOSBSim для поиска библиотечных функцийИмпорт исходного кодаЗакладкиПогружаемся в ассемблерный кодВыжимаем максимум из скриптов и плагиновБольшие языковые моделиОпределяем адрес загрузкиПрошивка редко загружается в память по нулевому адресу.
Во многих архитектурах первые адреса зарезервированы под начальный указатель стека и вектор сброса. CPU переходит по вектору сброса, чтобы продолжить выполнение. Благодаря этому можно загружать разные прошивки: например, основной прикладной код или загрузчик восстановления.
Отраслевые последствия
Если не задать адрес загрузки, дизассемблер создаст некорректные ссылки на память — на функции, строки и другие объекты — и заведёт вас не туда. Базовый адрес можно определить несколькими способами:По даташиту микросхемы. Например, хорошо задокументировано, что STM32 загружает прошивку по адресу 0x0800 0000.
Если обработчики прерываний находятся по адресам 0x20061ae2, 0x2004200c и т. , базовый адрес, скорее всего, равен 0x20000000. По ссылкам на строки.
Возьмите смещение строк и поищите в коде потенциальные указатели на них. Для строки по смещению 0x5eea4 ищите ссылки на 0x5eea4 с учётом порядка байтов. Повторите то же для другой строки, потом ещё для одной.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.





