Следующая новость
Предыдущая новость

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

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

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

  • Готовые (ли) решения?
  • PEDA
  • GEF
  • Pwndbg
  • Код Франкенштейна
  • Профит
  • Взаимодействие с IDA Pro

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

INFO

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

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

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

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

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

INFO

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

PEDA

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

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

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

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

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

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

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

GEF

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

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

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

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

INFO

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

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

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

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

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

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

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

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

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

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

1 год

7590 р.

Экономия 1400 рублей!

1 месяц

720 р.

25-30 статей в месяц

Уже подписан?

Источник

Последние новости