Как стать автором
Поиск
Написать публикацию
Обновить

KatWalk C2: ч.5: Учимся разбирать ARM в Ghidra (aka оверклокинг и багфиксинг)

Уровень сложностиСредний
Время на прочтение23 мин
Количество просмотров3.8K
Всего голосов 8: ↑8 и ↓0+9
Комментарии15

Комментарии 15

Вторая ссылка (платформа VR) ведёт на "todo". Желательно исправить.

Спасибо! поправил :)

Гидра умеет разные форматы, но вот HEX не умеет,

Странно, неоднократно загружал HEX, он значительно более информативен, чем BIN. Имеется в виду Intel HEX https://ru.wikipedia.org/wiki/Intel_HEX.

Просто процитирую вики:

Достоинством формата (в отличие от простого двоичного) является возможность указывать только определённые области адресов (с точностью до байта). Многие микроконтроллерные архитектуры имеют несколько областей программирования с обширными пустотами в адресации между ними.

Он позволяет загружать меньше "мусора".

А в целом, конечно, грандиозная работа (и проделана и описана!..)

Лично вчера загрузил Intel HEX в Гидру для анализа прошивки от коробки Haval F7. Версия Гидры какая-то не слишком новая, но и не слишком старая.

Да, там бага была что hex в фильтре файлов не был добавлен - но работало и раньше. :)

Просто делаем Импорт файла (File -> Import...), далее выбираем свой hex-файл и появится диалог, в котором у кажете Language и всё, как обычно...

Метрическая сила...!

Меня вот это смутило - отсутствие тут *.hex.

Да, если выбрать hex файл, тогда он даёт выбор:


Теперь смогу сэкономить 5 секунд в следующий раз :)

p.s.: пойду отправлю пулреквесть :)

Тут не только экономия времени, возможно более точное описание блоков памяти: не обязательно вся память в bin файле была заполнена/использована, тогда возможно определить промежутки и не использовать их или задать что-то типа "bss".

Да, разумеется я заметил дырку (там вначале код, потом дыра под стандартную либу, потом дыра под конфигурацию и в конце немного параметров настройки прошивки)...

Кстати, может, я так же не заметил генерацию патч-файла, как в IDA есть? :) а то заниматься экспортом и диффингом немного устаёт.

Так что с чем надо сравнивать? С какой целью?

Вроде в Ghidra есть мощный аппарат для сравнения разных вариантов. Смотри в хелпе "Program Differences", там много что написано. Тем более, что у Ghidra в отличие от IDA чуть ли не изначально предполагается возможность одновременной работы над одним проектом нескольких особей. А результаты надо уметь сливать в одну кучку... Опять же встроенная система версий...

У Ghidra иногда совсем другие подходы по решению проблем, чем, например "традиционные".

Эквивалент IDAшного "File=>Produce file=>Create dif file", где сохраняется результат редактирования образа в базе данных.

Гидра вообще, если я редактирую через memory -- подсвечивает синеньким что я менял. Если редактирую через ассемблер -- нет. В итоге надо помнить где что менял, либо экспортить весь бинарь и сравнивать потом. И то и то -- неудобственько.

Есть вероятность, что уже существует скрипт, который делает эту операцию:

  • он может быть в составе уже имеющегося штатного комплекта.

  • он может быть в составе какой-нибудь коллекции скриптов в инете (стоит поискать/поспрашивать на форумах). Допускаю, что их должно быть изрядное количество, хотя сам ничего специально не искал пока.

  • есть подозрение, что всё это может быть написано в пределах десятка операторов на Python.

Кстати, да, порой у Ghidra очень забавный интерфейс и обработка событий!. Сам до некоторых операций никак дойти не могу, хотя в IDA они тривиальны...

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации