+ Reply to Thread
Results 1 to 3 of 3

Thread: Реверс x86. Практические вопросы.

  1. #1

    Default Реверс x86. Практические вопросы.

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

    В качестве инструмента использую Olly 2.01.

    На стартовом окне незарегистрированной версии есть кнопка разблокировки, при нажатии на нее выходит окно для ввода рег. ключа.

    Наиболее очевидным кажется то, что правильный ключ в приложении не хранится, скорее всего по результатам чтения введенного ключа генерится хеш и где-то потом производится его прямое сравнение или проверяется соответствие каким-то условиям.

    После однократного нажатия кнопки проверки введенного ключа GetWindowTextLengthA запускается два раза.
    Первый раз читается сам ключ с помощью GetWindowTextW, второй раз функция GetWindowTextLengthA возвращает 0, и GetWindowTextW не запускается.

    После каждого запуска запускается множество инструкций по работе с введенным ключом.
    После второго раза вызывается ShowWindow, который уведомляет о неверно введенном серийнике.

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

    Запускал трассировку с несколькими разными ключами, в стеке мелькали строковые значения в верхнем регистре - предположительно хеши. Судя по всему хеши бывают разной длины в зависимости от введенного ключа. Мне удалось зафиксировать хеши длиной по 3, 6 и 8 символов. Зависимость длины хеша от длины введенного ключа не выявлена.
    Значение 8QORFN встречалось для разных ключей.

    Также в стеке мелькает строка U1U2U3U4U5U6U7U8U9UAUBUCA1A2C1C2C3C4P1D1M1Y1Y2E1R1 R2R3. Догадок о том, что это, пока нет.

    Проблемы:
    1) Количество инструкций обращения к введенному ключу и к хешу достаточно велико, понять логику формирования и проверки в разумные сроки мне не представляется возможным.
    2) Чтобы найти код, который принимает решение о том, какое сообщение о регистрации показывать (успешное или неуспешное) пробовал подняться назад по стеку вызовов от ShowWindow, но судя по всему некоторые адреса возвратов ссылаются на секцию, отличную от секции главного модуля. Olly (2.01) показывает их вопросительными знаками и не дает возможности перейти по ним.
    Уведомительные сообщения не хранятся в файле в виде статических строк, видимо генерятся/расшифровываются на этапе выполнения.

    Цель - получить возможности зарегистрированной версии. Вариант минимум - битхак. Вариант максимум (для чего мне наверное еще далеко) - получить правильный ключ или сгенерить кейген.

    Может ли кто-то из присутствующих на этом форуме подсказать возможные пути решения?
    Версия программы 7.3.
    Last edited by Color; 14-03-2017 at 18:47.

  2. #2
    Darwin's Avatar

    Default Re: Реверс x86. Практические вопросы.

    Может ли кто-то из присутствующих на этом форуме подсказать возможные пути решения?
    Взять IDA Pro и посмотреть на выхлоп Cи декомпилятора в трех местах (где считывается ключ, где он анализируется и где выводится окно информирующее об не успешности). И уже там смотреть по обстоятельствам. Если декомпилятор не покажет ничего вменяемого по коду, то возможно код генерации защищен виртуальной машиной, тогда выбирай другую цель для анализа.
    Счастлив кто отдал, а не взял. (с) Inception

  3. #3

    Default Re: Реверс x86. Практические вопросы.

    Darwin, спасибо. Так действительно информативнее. Буду копать дальше.

+ Reply to Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
All times are GMT. The time now is 01:21
vBulletin® Copyright ©2000 - 2018
www.reverse4you.org