Всем доброго дня.
Попался мне на днях один заманчивый экземпляр приложения для тренировки реверса.
Суть задания получить корректную строку которая пройдёт проверку.
Задание сразу же было мной загружено в иду для получения первоначальной информации.
В глаза сразу бросилась непонятная строка - KFFSE_XHKYOKXOHOFEDM^E_Y.
Ок. Перехожу в процедуру main. Тут у нас все просто выводим сообщение - "Are you feeling lucky today?" и ждём ввода от пользователя:
Странным является сравнение нашей строки с 0x0FFFFFFFFh по адресу 0x080485D3. Затем как я понимаю последний символ сравнивается с 0x0A и в случае успеха заменяется на 0x0. Как я понимаю автор таким образом удаляет перевод строки из сравнения.
После проделанных манипуляций мы попадем в ветвление, где сравнивается первый символ с набором ABC, A- зацикливается на месте, нам не интересен; C выводит foo и выходит - не интересно; наш Выбор -B;
После этого мы попадаем в процедуру checkKey. Тут мы начиная со 2го символа введённую строку XORим на 0x2A и сравниваем с той что нашли в листинге программы.
И Вот тут я споткнулся. В регистры мы помещаем сравниваемые строки EDI - статическую строку, в ESI нашу поксореную на 2A, счётчик устанавливаем на 0х19. Сравнение (по адресу 08048505) возвращает 0, что означает не равны.
Я перепроверил все корректно строки равны, за исключением того что у нас в конце строки нарисовался пробел.
Прошу помощи в данной задаче. Я некорректно распутал алгоритм или есть какие-то хитрости?
Попался мне на днях один заманчивый экземпляр приложения для тренировки реверса.
Суть задания получить корректную строку которая пройдёт проверку.
Задание сразу же было мной загружено в иду для получения первоначальной информации.
В глаза сразу бросилась непонятная строка - KFFSE_XHKYOKXOHOFEDM^E_Y.
Ок. Перехожу в процедуру main. Тут у нас все просто выводим сообщение - "Are you feeling lucky today?" и ждём ввода от пользователя:
Странным является сравнение нашей строки с 0x0FFFFFFFFh по адресу 0x080485D3. Затем как я понимаю последний символ сравнивается с 0x0A и в случае успеха заменяется на 0x0. Как я понимаю автор таким образом удаляет перевод строки из сравнения.
После проделанных манипуляций мы попадем в ветвление, где сравнивается первый символ с набором ABC, A- зацикливается на месте, нам не интересен; C выводит foo и выходит - не интересно; наш Выбор -B;
После этого мы попадаем в процедуру checkKey. Тут мы начиная со 2го символа введённую строку XORим на 0x2A и сравниваем с той что нашли в листинге программы.
И Вот тут я споткнулся. В регистры мы помещаем сравниваемые строки EDI - статическую строку, в ESI нашу поксореную на 2A, счётчик устанавливаем на 0х19. Сравнение (по адресу 08048505) возвращает 0, что означает не равны.
Я перепроверил все корректно строки равны, за исключением того что у нас в конце строки нарисовался пробел.
Прошу помощи в данной задаче. Я некорректно распутал алгоритм или есть какие-то хитрости?