[Информационная безопасность, C, Реверс-инжиниринг, CTF] Работаем с Cutter — основы реверса. Решение задач на реверсинг с r0от-мi. Часть 3
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
В данной статье разберемся с декомпиляцией 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
===========
Похожие новости:
- [Системное администрирование, Софт, IT-компании] Microsoft Defender начал помечать файл hosts как зловредный, если там блокируется сбор телеметрии Windows 10
- [IT-инфраструктура, Сетевые технологии, Asterisk, Сетевое оборудование] Микростота «Наше Всё» или DECT-мобильность на рабочем месте от Snom
- [Разработка веб-сайтов, CSS, JavaScript, Клиентская оптимизация] Оптимизация производительности фронтенда. Часть 1. Critical Render Path
- [] Секретная миссия: как «Агенты Okko» помогают создавать лучший сервис
- [Информационная безопасность, IT-компании] Мошенники начали массово создавать клоны Delivery Club, «Яндекс.Еды» и «СберМаркета» во время пандемии
- [Учебный процесс в IT, Управление персоналом, Карьера в IT-индустрии, IT-компании] Как инженеру профессионально развиваться в компании. Конспект митапа из серии “Инженер заходит в бар"
- [.NET, C#] Интеграция с «Госуслугами». Место СМЭВ в общей картине (часть I)
- [Тестирование IT-систем, Клиентская оптимизация, Беспроводные технологии, Развитие стартапа, Голосовые интерфейсы] «Московский акселератор» выведет финтех-стартапы на рынок
- [Python, Алгоритмы, Обработка изображений, Машинное обучение] Нет времени объяснять, сделай автопилот
- [Криптография, Python] Дешифровка текста методом частотного анализа
Теги для поиска: #_informatsionnaja_bezopasnost (Информационная безопасность), #_c, #_reversinzhiniring (Реверс-инжиниринг), #_ctf, #_reverse_engineering, #_ralf_reverse, #_informatsionnaja_bezopasnost (информационная безопасность), #_ctf, #_informatsionnaja_bezopasnost (
Информационная безопасность
), #_c, #_reversinzhiniring (
Реверс-инжиниринг
), #_ctf
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 00:03
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
В данной статье разберемся с декомпиляцией ELF файлов в Cutter на примере легеньких задач. Прошлые части введения в реверс: Часть 1: C, C++ и DotNet decompile — основы реверса Часть 2: Реверсим MIPS и Golang — основы реверса Организационная информацияSPLСпециально для тех, кто хочет узнавать что-то новое и развиваться в любой из сфер информационной и компьютерной безопасности, я буду писать и рассказывать о следующих категориях:
Вдобавок к этому я поделюсь своим опытом в компьютерной криминалистике, анализе малвари и прошивок, атаках на беспроводные сети и локальные вычислительные сети, проведении пентестов и написании эксплоитов. Чтобы вы могли узнавать о новых статьях, программном обеспечении и другой информации, я создал канал в 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 =========== Похожие новости:
Информационная безопасность ), #_c, #_reversinzhiniring ( Реверс-инжиниринг ), #_ctf |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 00:03
Часовой пояс: UTC + 5