• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

[Revers] Разбор упражнения

Andr0G3n

One Level
12.04.2020
6
2
BIT
0
Всем доброго дня.
Попался мне на днях один заманчивый экземпляр приложения для тренировки реверса.
Суть задания получить корректную строку которая пройдёт проверку.
Задание сразу же было мной загружено в иду для получения первоначальной информации.
В глаза сразу бросилась непонятная строка - KFFSE_XHKYOKXOHOFEDM^E_Y.
Ок. Перехожу в процедуру main. Тут у нас все просто выводим сообщение - "Are you feeling lucky today?" и ждём ввода от пользователя:
01_main_pict.png

Странным является сравнение нашей строки с 0x0FFFFFFFFh по адресу 0x080485D3. Затем как я понимаю последний символ сравнивается с 0x0A и в случае успеха заменяется на 0x0. Как я понимаю автор таким образом удаляет перевод строки из сравнения.
После проделанных манипуляций мы попадем в ветвление, где сравнивается первый символ с набором ABC, A- зацикливается на месте, нам не интересен; C выводит foo и выходит - не интересно; наш Выбор -B;

01_main_case.png

После этого мы попадаем в процедуру checkKey. Тут мы начиная со 2го символа введённую строку XORим на 0x2A и сравниваем с той что нашли в листинге программы.
03_checkKey.png

И Вот тут я споткнулся. В регистры мы помещаем сравниваемые строки EDI - статическую строку, в ESI нашу поксореную на 2A, счётчик устанавливаем на 0х19. Сравнение (по адресу 08048505) возвращает 0, что означает не равны.
Я перепроверил все корректно строки равны, за исключением того что у нас в конце строки нарисовался пробел.
Прошу помощи в данной задаче. Я некорректно распутал алгоритм или есть какие-то хитрости?
 

Вложения

  • task.zip
    3 КБ · Просмотры: 119
Решение
Привет, @Andr0G3n!

В IDA есть режим графов. Попробуй его. Он удобный. Клавиша "Пробел".

main в режиме графов:

1626075216488.png



Ballyourbasearebelongtous

strcmp возвращает 0, если строки равны.

В конце строки не должен быть пробел. У этого символа тоже есть код (0x20 - man ascii). strcmp проверяет по кодам символов, а не по символам.

В регистрах edi и esi при правильном решении одинаковые строки.

1626076674496.png


Результат операции xor возвратим.

Код:
KFFSE_XHKYOKXOHOFEDM^E_Y xor 0x2A = allyourbasearebelongtous
B + allyourbasearebelongtous = Ballyourbasearebelongtous (Добавляем символ "B" для перехода в функцию checkkey) .

CyberCheaf хорошо помогает в решении тасков :)...

Mogen

Red Team
27.08.2019
316
614
BIT
26
Привет, @Andr0G3n!

В IDA есть режим графов. Попробуй его. Он удобный. Клавиша "Пробел".

main в режиме графов:

1626075216488.png



Ballyourbasearebelongtous

strcmp возвращает 0, если строки равны.

В конце строки не должен быть пробел. У этого символа тоже есть код (0x20 - man ascii). strcmp проверяет по кодам символов, а не по символам.

В регистрах edi и esi при правильном решении одинаковые строки.

1626076674496.png


Результат операции xor возвратим.

Код:
KFFSE_XHKYOKXOHOFEDM^E_Y xor 0x2A = allyourbasearebelongtous
B + allyourbasearebelongtous = Ballyourbasearebelongtous (Добавляем символ "B" для перехода в функцию checkkey) .

CyberCheaf хорошо помогает в решении тасков :)
1626076861295.png


1626077055475.png


В остальном у тебя вроде всё верно (y)
Молодец :)
 
Последнее редактирование:
Решение

Andr0G3n

One Level
12.04.2020
6
2
BIT
0
Проблема в том, что Ballyourbasearebelongtous у меня возвращает Nope. Поэтому и запостил сюда. Какие могут быть причины? Какой у Вас linux ?
task_err.png
 

Mogen

Red Team
27.08.2019
316
614
BIT
26
Проблема в том, что Ballyourbasearebelongtous у меня возвращает Nope. Поэтому и запостил сюда. Какие могут быть причины? Какой у Вас linux ?
Посмотреть вложение 51294
У меня Arch, но это не особо должно влиять на результат.
Можно попробовать удалить файл и заново распаковать. Если это не помогает, то сделать запись экрана в отладчике при верном ключе.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!