[Информационная безопасность, C, Реверс-инжиниринг, CTF] Работаем с Cutter — основы реверса. Решение задач на реверсинг с r0от-мi. Часть 3

Автор Сообщение
news_bot ®

Стаж: 6 лет 9 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
05-Авг-2020 18:31

В данной статье разберемся с декомпиляцией ELF файлов в Cutter на примере легеньких задач. Прошлые части введения в реверс:
Часть 1: C, C++ и DotNet decompile — основы реверса
Часть 2: Реверсим MIPS и Golang — основы реверса

Организационная информация

SPL
Специально для тех, кто хочет узнавать что-то новое и развиваться в любой из сфер информационной и компьютерной безопасности, я буду писать и рассказывать о следующих категориях:
  • PWN;
  • криптография (Crypto);
  • cетевые технологии (Network);
  • реверс (Reverse Engineering);
  • стеганография (Stegano);
  • поиск и эксплуатация WEB-уязвимостей.

Вдобавок к этому я поделюсь своим опытом в компьютерной криминалистике, анализе малвари и прошивок, атаках на беспроводные сети и локальные вычислительные сети, проведении пентестов и написании эксплоитов.
Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в Telegram и группу для обсуждения любых вопросов в области ИиКБ. Также ваши личные просьбы, вопросы, предложения и рекомендации рассмотрю лично и отвечу всем.
Вся информация представлена исключительно в образовательных целях. Автор этого документа не несёт никакой ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения данного документа.

Fake Instructions

Это восьмое задание данной категории, и нам сообщают о наличии фейковых инструкций. Начнем с просмотра информации о файле.

Я открываю программу в Cutter — GUI для radare2 со встроенным декомпилятором ghidra, имеющим возможность эмуляции, а с недавних пор и отладки. И сразу получаем интересный список функций.

Перейдем к функции main и декомпилируем ее.

В самом начале происходит инициализация канарейки и проверка количества аргументов. После чего выделяется 0x1f байт, куда копируется указанная константная строка, адрес сохраняется в переменную iVar3, впоследствии отдельный байты этой строки подвергаются изменению. Далее происходят преобразования со строкой s1, которая для нас не представляет интереса. Также происходит инициализация функции WPA, а веденный нами пароль записывается по адресу auStack50 и передается вместе с преобразованной строкой iVar3 в функцию WPA, после выполнения которой происходит проверка значения канарейки и завершение программы.
Давайте перейдем к функции WPA.

Заложенная заранее в программе строка снова подвергается изменению, после чего происходит сравнение двух строк. Если они равны, будет вызвана функция blowfish(), которая выведет нас верный пароль для сдачи, иначе будет вызвана функция RS4().

Так как происходит расшифрование заранее внесенных значений, мы можем отладить программу и изменить результат сравнения. Давайте перейдем к месту сравнения строк и поставим точку останова.

Теперь запустим отладку — F9, и введем аргументы программы.

Нажимаем на кнопку далее на навигационной панели, пока не дойдем то своей точки останова. Результат сравнения строк с помощью функции strcmp() будет записан в регистр EAX, который потом и будет проверяться. Так как строки не равны, данный регистр содержит значение 1.

Давайте изменим его на 0, чтобы изменить ветку поведения программы и продолжим ее выполнение. После завершения в консоли Cutter мы увидим верный ответ, который следует сдавать на сайте.

Ptrace

Скачиваем программу и проверяем ее.

Ничего необычного, нужно найти пароль. Но вот есть маленкая защита от отладки (ptrace) и переходы, которые нужно править вручную. Так показывает граф в IDA Pro.

Делать это задание будем также в Cutter, он автоматически поправит все переходы.

Перейдем к декомпиляции функции main.

И верный пароль — это соответствующие 4 буквы из строки, заданной в самом начале.

ARM ELF

Это бинарь для архитектуры ARM, закидываем его в Cutter и выбираем функцию main. По графу функции видим, с чем имеем дело, и скорее всего это посимвольное сравнение.

Открываем декомпилятор и анализируем программу.

Первым делом проверяется наличие аргумента программы и его длина, она должна быть равна 6.

Так переменная var_14h выступает как индекс и принимает значение 0. А далее происходят ряд сравнений, которые мы расценим как условия:
str[0] == str[5]
str[0] + 1 == str[1]
str[3] + 1 == str[0]
str[2] + 4 == str [5]
str[4] + 2 == str[2]
0 == str[3] ^ 0x72
Давайте реализуем алгоритм и получим пароль.

И получаем нужный пароль. На этом пока все.
Вы можете присоединиться к нам в Telegram. Там можно будет найти интересные материалы, слитые курсы, а также ПО. Давайте соберем сообщество, в котором будут люди, разбирающиеся во многих сферах ИТ, тогда мы всегда сможем помочь друг другу по любым вопросам ИТ и ИБ.
===========
Источник:
habr.com
===========

Похожие новости: Теги для поиска: #_informatsionnaja_bezopasnost (Информационная безопасность), #_c, #_reversinzhiniring (Реверс-инжиниринг), #_ctf, #_reverse_engineering, #_ralf_reverse, #_informatsionnaja_bezopasnost (информационная безопасность), #_ctf, #_informatsionnaja_bezopasnost (
Информационная безопасность
)
, #_c, #_reversinzhiniring (
Реверс-инжиниринг
)
, #_ctf
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 23-Ноя 00:03
Часовой пояс: UTC + 5