Реверсим в 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 :)