Ломаем с IDA PRO #0

Наибольшая часть софта вскрывалась с OllyDbg, когда не было внятной документации по IDA.

К счастью, уже написана IDA PRO BOOK, а в англоязычной части сети можно найти любые ответы. Идея адаптировать туторы Нарвахи для IDA подсмотрена у мистера bearchik’а.

Давайте вскроем предложенный Нарвахой crackme используя современные инструменты!

Осмотр цели

Загружаем кряк в IDA и нажимаем F9, выбираем Local Win32 debugger. Теперь по F9 можно запускать отладку:

no_luck

Вбиваем случайные данные в окно регистрации

Обычно предлагают искать интересующий нас участок кода предугадывая использованные рядом с ним WinApi, в данном случае DialogBoxParamA. Мне кажется надежнее использовать для поиска данные, так что заглянем в View->Open subviews->Strings. Кликаем по строке сообщающей что мы нашли правильный ответ. Далее нажимаем X для поиска всех ссылок на этот адрес:

str_ref

Кликнув по имени функции и нажав N можно дать ей более осмысленное имя. Посмотрев кто ссылается на функцию сообщающую об успехе, находим место принятия решения о прохождении:code

Управление здесь абсолютно olly-like, ставим брейкпойнт по f2, идем вперёд с заходом по f7 и без захода в функцию по f8. В отладке хорошо видно, что делает каждая функция.

Разбор защиты

Есть 2 функции преобразующие входную строку в DWORD, я обозначил их префиксом Hash. Посмотрим как они устроены:

hash_user

  • Алгоритм посимвольно обрабатывает строку, пока не встретит NULL-byte
  • Символ должен иметь аски-код не меньше чем 0x41 = ‘A’
  • Если он больше или равен 0x5A = ‘Z’, то из него вычитается 0x20
  • После проверки “валидности”, коды всех символов складываются в DWORD
  • И его XOR’ят c 0x5678, это и есть “хеш” от UserName

hash_pass

  • Строка обрабатывается ровно до NULL-byte
  • Из каждого символа вычитается 0x30 = ‘0’
  • Значение EDI умножается на 0xA = 10
  • И к нему прибавляется аски-код текущего символа
  • После конца строки EDI ксорят на 0x1234, это и есть “хеш” от PassWord

Для успешного прохождения CrackMe значения обоих “хешей” должны быть равны.
Дополнительными условиями на Hash_User автор намекает, что нужно подбирать значение пароля, а не имени. Введём имя ‘VXLAB‘ и получим в регистре EAX = 0x5705. Сразу избавимся от лишнего ксора: 0x5705 ^ 0x1234 = 0x4531, это значение мы и будем подбирать.

Для удобства перепишем алгоритм на Python. Автор намерено внёс в алгоритм “уязвимость”, при символе 0x30 = ‘0’ хеш будет умножен на константу, но просуммирован с нулем, так что это даёт нам возможность быстро подобрать нужное значение. В нашем случае это ‘VXLAB’ и ‘A70=’

ok

End

Статья написана в рамках (очередной) моей попытки пересесть на Иду. Если тема окажется полезной, вполне вероятно будет продолжение цикла, так что не стесняйтесь высказываться по этому вопросу.

2 thoughts on “Ломаем с IDA PRO #0

Добавить комментарий