Не знаю, как тебе, а мне часто приходится сталкиваться с реверсом и отладкой на 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 строк кода в одном файле;
- много логических ошибок.

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

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


Check Also

В королевстве PWN. Препарируем классику переполнения буфера в современных условиях

Сколько раз и в каких только контекстах не писали об уязвимости переполнения буфера! Однак…

1 комментарий

  1. Аватар

    s00mbre

    15.05.2019 at 00:20

    Очень круто! Надо обязательно потестировать…

Оставить мнение