Отладка MIPS. Как я собрал рабочий инструмент из сломанных запчастей

Содержание статьи

Не знаю, как тебе, а мне часто приходится сталкиваться с реверсом и отладкой на MIPS. И как ни печально, но достойных инструментов для этого совсем мало, особенно если сравнивать с другими архитектурами. Да чего уж там говорить, если даже в HexRays до сих пор нет декомпиляции MIPS. Поэтому лучшим решением для меня стало сконструировать собственный инструмент.

INFO

MIPS — микропроцессорная архитектура, которая была разработана в восьмидесятых годах прошлого века сотрудниками компании MIPS Computer Systems в соответствии с концепцией проектирования процессоров RISC (то есть для процессоров с упрощенным набором команд).

В этой статье речь пойдет именно об отладке с помощью всеми проклинаемого любимого GDB. Сначала я хотел найти какое-нибудь решение, чтобы каждый раз не вводить тонну магических команд типа x/* $reg, которые помогают понимать то, что происходит с регистрами, стеком, кучей и прочим.

Готовые (ли) решения?

Я, как адекватный человек, полез в Google в поисках готовых инструментов, которые помогут облегчить мою жизнь. Вот что мне удалось накопать.

INFO

GDB по умолчанию имеет поддержку исполнения скриптов, через команду source или аргумент командной строки -x. В случае если GDB был скомпилирован с поддержкой Python, появляется также возможность использовать скрипты на этом языке.

PEDA

A точнее — PEDA-MIPS. Скачиваем и запускаем.

Никаких переживаний о пользователяхНикаких переживаний о пользователях

Понятно: у меня везде стоит Python 3, который не допускает одновременного использования табуляции и пробелов в качестве разделителей, а авторы, видимо, не слышали о прекращении поддержки Python 2 в 2020 году. Ну да ладно, исправим это и запустим еще разок.

Результат работыРезультат работы

И вроде бы все хорошо, но хочется большего: например, поддержку IDA Pro или удобный вывод состояния кучи. Разбираться почти в 7000 строк, чтобы добавить новую фичу, не очень-то заманчиво.

Плюсы:
+ может работать с MIPS;
+ простота реализации.

Минусы:
- 7000 строк кода в одном файле;
- отсутствует расширяемость.

GEF

Скачиваем и приступаем к тестированию.

На этот раз хотя бы запускается без ошибок. Но строки здесь не разыменовываются.

INFO

Разыменование — термин, применяемый к указателям, позволяет получить значение, записанное в области памяти, на которую ссылается указатель. В случае со строками очень удобно, когда в результате такого чтения отладчик вместо последовательности 0x41414141 показывает строку AAAA.

Идем в код, чтобы узнать причину, и, перелопатив около 10 000 строк кода, видим, что GEF настолько хитрый, что не понимает бинари, в которых не определяются секции, а в случае с MIPS это практически каждый второй.
Зато GEF умет работать с IDA и даже импортировать структуры! К сожалению, и тут не без косяков…

Не, ну вы это видели?!Не, ну вы это видели?!

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

Плюсы:
+ может работать с MIPS;
+ изящно выполнена система команд.

Минусы:
- 10 000 строк кода в одном файле;
- много логических ошибок.

Продолжение доступно только подписчикам

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

Подпишись на «Хакер» по выгодной цене!

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

Читать новость в источнике Xakep

0