Реверсим в Ghidra SRE
Ghidra SRE используется в качестве основной платформы реверс-инжиниринга. Все представленные на сайте инструкции и инструменты рассчитаны на работу с Ghidra.
Эта инструкция поможет всего за несколько шагов погрузиться в мир реверс-инжиниринга.
Примерно с 2019 года в Ghidra SRE присутствует баг: FF FF в архитектуре v5t распознаётся как инструкция BL 0xFFE. Это вызывает бесконечный цикл в автоанализе.
Вы должны применить патч ARMTHUMBinstructions.sinc, если планируете работать с прошивками Siemens.
Что сделать перед началом
-
Установите последнюю версию Ghidra SRE и примените патч ARMTHUMBinstructions.sinc
-
Получите fullflash с телефона и удалите из него FFS и EEPROM.
Это важно для автоанализа, так как FFS и EEPROM содержат неоднозначные данные, которые могут быть интерпретированы как инструкции.
Вы можете скачать коллекцию прошивок с уже удалёнными FFS и EEPROM: fullflashes.zip
Шаг 1: Загрузите ваш fullflash.bin в Ghidra
Details


-
Запустите дизассемблер и выберите
File -> Import File -
Выберите файл
fullflash.bin -
Настройте параметры импорта:
- Format:
Raw Binary - Language:
ARM v5t 32 little - Options → Block Name:
FULLFLASH - Options → Base Address:
A0000000
- Format:
-
Щёлкните по
fullflash.binв списке проекта. -
Ghidra предложит автоматический анализ, нужно отказаться (нажмите No).
Шаг 2: Правка атрибутов региона FULLFLASH
Перейдите в Window -> Memory Map и выставьте атрибуты для блока "FULLFLASH":
R W X Volatile
[x] [ ] [x] [ ]
Очень важно снять галочку W, так как это напрямую влияет на декомпиляцию.
Шаг 3: Настройка параметров авто-анализа
-
Выберите
Analysis -> Auto Analyse -
Измените параметры анализа:
Отключить:
-
Embedded media -
Non-returning functions - discovered(иначе дизассемблер может преждевременно останавливаться внутри функции) -
Create Address Tables(лучше запустить как one-shot после основного анализа) -
Demangler GNU
Включить:
-
Scalar operand references -
Shared return callsс опцией[x] Allow conditional jumps
-
-
Нажмите "APPLY". но НЕ НАЖИМАЙТЕ "ANALYZE"!!!
-
Закройте окно анализа.
Шаг 4: Регион памяти для IO регистров
Details
-
Перейдите в
Window -> Memory Map -
Добавьте новый регион с параметрами:
- Block Name:
IO - Start Addr:
0xF0000000 - Length:
0x0F000000 - Attributes:
[x] Read [x] Write [ ] Execute [x] Volatile [ ] Overlay - Uninitialized
- Block Name:
Шаг 5: Импорт дампа RAM с телефона
Импортируйте все полученные ранее дампы памяти.
Пример с RAM:
-
File -> Add to Program -
Выберите файл, например:
C81v51_RAM_A8000000_00800000.bin -
Укажите параметры:
- Block Name:
RAM - Base Addr:
0xA8000000
Нажмите "OK".
- Block Name:
-
Перейдите в
Window -> Memory Mapи задайте атрибуты для блока "RAM":R W X Volatile
[x] [x] [x] [ ]
Шаг 6: Плагины для Ghidra
Details
- Скачайте: ghidra_scripts.zip или клонируйте репозиторий
- Откройте
Window -> Script Manager - Нажмите на "Manage Script Directories"
- Добавьте путь к распакованной папке
ghidra_scripts.
Шаг 7: Импорт C-типов из swilib
Details
- Скачайте подходящий
swilib-types-PLATFORM.hиз Swilib data types for disassembler - Выберите
File -> Parse C Source... - Нажмите
Clear profile(значок ластика) - Добавьте
swilib-types-PLATFORM.hвSource files to parse - Установите
Program architecture:ARM v5t 32 little - Нажмите
Parse to Program -> Continue -> Don't use Open Archives -> OK
Шаг 9: Импорт списка IO регистров CPU
- Скачайте соответствующий
cpu-PHONE.txtилиcpu-pmb887x.txtиз CPU IO registers - Откройте
Window -> Script Manager -> ImportSymbolsWithDataType.java -> Run Script - Выберите
cpu-PHONE.txtилиcpu-pmb887x.txt
Шаг 10: Импорт символов swilib
Details
- Скачайте подходящий
symbols-PHONE.txtиз Firmware symbols for disassembler - Откройте
Window -> Script Manager -> ImportSymbolsWithDataType.java -> Run Script - Выберите
symbols-PHONE.txt
Это займёт некоторое время, так как запустится авто-анализ.
Когда увидите "Finished" в консоли скриптов — можете прервать анализ и переходить дальше.
Шаг 11: Авто-анализ прошивки
Полный анализ
- Откройте
Analysis -> Auto Analyse 'fullflash.bin' - Убедитесь, что параметры совпадают с указанными в Шаг 3
- Нажмите ANALYSE
Это займёт 10-30 минут. Процесс долгий — наберитесь терпения.
Запустить только 1 раз
- Выберите
Analysis -> One-shot -> Create Address Tables
Поздравляю, вы справились! ✨
Ждём ваших патчей в базе патчей patches.kibab.com :)