Я новичок, с реверсом только начинаю знакомиться. Есть программулина (прямую ссылку давать не хочу, оф. сайт гуглится по запросу "кроссворд форге"). В триальном режиме недоступны некоторые функции. В принципе функции мне эти не нужны, как и сама программа, изучаю ее ради спортивного интереса.
В качестве инструмента использую Olly 2.01.
На стартовом окне незарегистрированной версии есть кнопка разблокировки, при нажатии на нее выходит окно для ввода рег. ключа.
Наиболее очевидным кажется то, что правильный ключ в приложении не хранится, скорее всего по результатам чтения введенного ключа генерится хеш и где-то потом производится его прямое сравнение или проверяется соответствие каким-то условиям.
После однократного нажатия кнопки проверки введенного ключа GetWindowTextLengthA запускается два раза.
Первый раз читается сам ключ с помощью GetWindowTextW, второй раз функция GetWindowTextLengthA возвращает 0, и GetWindowTextW не запускается.
После каждого запуска запускается множество инструкций по работе с введенным ключом.
После второго раза вызывается ShowWindow, который уведомляет о неверно введенном серийнике.
Тест-кейс с введенным ключом в нижнем регистре показал, что исходный введенный ключ хранится в памяти как есть, но в какой-то момент в другое место памяти копируется его представление в верхнем регистре и дальше гуляет по стеку.
Запускал трассировку с несколькими разными ключами, в стеке мелькали строковые значения в верхнем регистре - предположительно хеши. Судя по всему хеши бывают разной длины в зависимости от введенного ключа. Мне удалось зафиксировать хеши длиной по 3, 6 и 8 символов. Зависимость длины хеша от длины введенного ключа не выявлена.
Значение 8QORFN встречалось для разных ключей.
Также в стеке мелькает строка U1U2U3U4U5U6U7U8U9UAUBUCA1A2C1C2C3C4P1D1M1Y1Y2E1R1 R2R3. Догадок о том, что это, пока нет.
Проблемы:
1) Количество инструкций обращения к введенному ключу и к хешу достаточно велико, понять логику формирования и проверки в разумные сроки мне не представляется возможным.
2) Чтобы найти код, который принимает решение о том, какое сообщение о регистрации показывать (успешное или неуспешное) пробовал подняться назад по стеку вызовов от ShowWindow, но судя по всему некоторые адреса возвратов ссылаются на секцию, отличную от секции главного модуля. Olly (2.01) показывает их вопросительными знаками и не дает возможности перейти по ним.
Уведомительные сообщения не хранятся в файле в виде статических строк, видимо генерятся/расшифровываются на этапе выполнения.
Цель - получить возможности зарегистрированной версии. Вариант минимум - битхак. Вариант максимум (для чего мне наверное еще далеко) - получить правильный ключ или сгенерить кейген.
Может ли кто-то из присутствующих на этом форуме подсказать возможные пути решения?
Версия программы 7.3.



Reply With Quote
Thanks