Введение в крэкинг с нуля, используя OllyDbg - Глава 23

  • На форуме работает ручное одобрение пользователей. Это значит, что, если Ваша причина регистрации не соответствует тематике форума, а также Вы используете временную почту, Ваша учётная запись будет отклонена без возможности повторной регистрации. В дальнейшем - пожизненная блокировка обоих аккаунтов за создание мультиаккаунта.
  • Мы обновили Tor зеркало до v3!
    Для входа используйте следующий url: darkv3nw2...bzad.onion/
  • Мы вновь вернули telegram чат форуму, вступайте, общайтесь, задавайте любые вопросы как администрации, так и пользователям!
    Ссылка: https://t.me/chat_dark_time

AnGel

Администратор
Команда форума

AnGel

Администратор
Команда форума
27 Авг 2015
3,411
2,025
Это последняя глава, посвящённая антиотладке, в которой рассказывается о флагах ProcessHeap и NTGlobalFlag, и как они используются. Таким образом, мы получим представление о самых известных антиотладочных приёмах. конечно, это не все, но думаю, что это все основных, которые нужно знать и которые обычно применяются. Конечно, есть протекторы вроде execryptor, который является чемпионом по обнаружению OllyDbg и использует кроме приёмов, описанных здесь, ещё 4 или 5, но они весьма специфичны, и прочитать о них можно в туториалах Хуана Хосе об этом протекторе, а также нужно знать, что в каждой следующей версии execryptor'а добавляются новые приёмы, поэтому для этого нужно изучать уже не антиотладку вообще, а конкретно данный протектор.

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

8f4d8f9fcc71f0a429a02f8f25a3e885.png

Это плагин HideOD, красным обведены опции, которые прячут OllyDbg от обнаружения с помощью этих флагов, но мы будем исследовать вручную.

Эти два флага показывают, что процесс находится под отладкой, их легко найти. Если вы не можете вспомнить, как найти область, где находится байт IsDebuggerPresent, то прочитайте главу 19, в которой объясняется как найти её врунчную, так как эти флаги располагаются неподалёку.

1525a105a0d1c3ff71ad8bf608c943fd.png

Пока отключим эту настройку, чтобы посмотреть, какие значения у вышеуказанных флагов, а иначе плагин их скроет.

Чтобы попрактиковаться с этими флагами, будем использовать крэкми Cruehead'а I, в котором и отыщем оба из них.

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

180ce8baff91b613e20786a1f9426b5d.png

Хорошо, теперь посмотрим, как найти и изменить оба эти флага вручную.

Их можно найти в той же области, где находится и байт IsDebuggerPresent, о котором рассказывалось в 19-ой главе. Простой способ заключается в том, чтобы прямо на точке входа отметить EBX и выбрать FOLLOW IN DUMP, а о полном варианте, если вы его забыли, прочитайте в вышеуказанной главе.

Находим на точке входа.

Отмечаем EBX-FOLLOW IN DUMP.

0f3e1b80ca6c14bf93cd18156128260b.png

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

4b2c5587340b9a35402110de2336ce9e.png

Разумеется, мы помним, что этот байт заполняется API-функцией IsDebuggerPresent, а NTGlobalFlag находится по соседству - надо прибавить 68 к адресу, который находился в EBX, в моём случае EBX содержал 7ffda000, прибавляем 68 и получается 7ffda068.

7df9067337eb356fba9f16ba6d039ed1.png

Это и есть знаменитый NTGlobalFlag, значение которого отличается от нуля, если есть отладчик и ноль, если нет, так что можем вручную выставить его значение в ноль.

f4957d8c62961f105870515399807299.png

Помещаем сюда ноль.

7cf1cf0e5f068b6262c40994c6c258e9.png

Так мы нашли флаг NtGlobalFlag и поместили в него ноль.

Теперь нужно найти другой флаг ProcessHeap, что также нетрудно сделать.

К значение, которое содержится в EBX на точке входа, надо прибавить 18, это адрес, по которому в моём случае лежит 014000, это тоже адрес - адрес "кучи", то есть область памяти, созданная при запуске программы, куда та может помещать какие-то свои данные, не будем заострять на этом много внимания.

760e57962a09db5f1fe9982dfbb5090b.png

Идём посмотреть, что находится в "куче".

c4eeafa55947ea834763cb50b30eb327.png

Отмечаем байти и выбираем FOLLOW DWORD IN DUMP, что перенесёт нас в область памяти, зарезервированной под "кучу".

992d4c1ace659bee34fdf65166831b17.png

И прибавляем 10 к исходному адресу кучи, это отмеченный на картинке dword, в котором содержится ноль, если отладчика нет, значит сейчас там ноль из-за установленных плагинов, поэтому откроем крэкми в OllyDbg без плагинов.

709d36a8b64d4d402fb324d9348c44a6.png

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

Теперь вернёмся, чтобы включить настройки в HideOdb.

8270e097fe79449017f91f6dfdfc62bb.png

И перезапустим крэкми cruehead'а.

4eb67d9795f063acb9dd50e1a4cfc199.png

Видим, что остановились на точке входа, флаги IsDebbuggerPresent, как и NtGlobalFlag равны нулю, и поищем ProcessHeapFlag.

8fb38ca448915cff0482fe8512af8c7a.png

Он также равен нулю, то есть плагин работает правильно. Кроме того, мы научились искать и менять эти флаг вручную.

Последний противооллиный приём также предотвращается установленными плагинами.

dd9153679966c24665b0b2910950a7b9.png

И

3fda3cd0caff8dfe5c1294b8867b9f0d.png

520835d026c11c85319e4c5890008bff.png

Текст на картинке гласит:

"Хорошо, таким же образом я понял, что проблема связана с противооллиным приёмом, основанный на OutputDebugString и использованный данной программой. Этот приём заключается в передаче Олли специально подготовленной строки, которую та не может обработать, и происходит ошибка, закрывающая OllyDbg. В реальности я никогда не встречался с этим, так как плагин HideDebugger нейтрализует данный антиотладочный метод и выдаёт следующее сообщение:

Способ реализации очень прост: вызывается OutputDebugStringA, которой передаётся строка, состоящая из множества символов %s, я насчитал 100d:"

Это описание из прекрасного туториала. Плагины позаботятся об этом баге OllyDbg в лучшем виде.

Чтобы попрактиковаться,
Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!
, где применяются все приёмы, о которых рассказывалось в главах, посвящённых антиотладке, плюс пара других, хе-хе. Идея в том, чтобы запустить его в OllyDbg с отключенными плагинами, и вручную обезвредить антиотладочные приёмы. Для этого вам потребуется немного воображения, например, там есть приём, который можно победить, забив строку нопами. Чтобы обнаружить такие места, нужно зайти в DEBUGGIN OPTION-EXCEPTIONS и убрать все галочки, так как при использовании INT68 генерируется ошибка, которая, если эти настройки включены, приведёт к тому, что Olly не выдаст нам предупреждение об исключении и просто закроется.

То есть, знайте, что если остановились на каком-то исключении (которое не было отмечено в настройках), то нужно нажать SHIFT+F9, чтобы миновать его. Мы рассмотрим это подробнее в следующей главе. Но если исключение генерируется через INT68, то надо забить NOPами это место и сделать RUN, чтобы пройти его без каких-либо проблем.

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

О нас

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

    Dark-Time 2015 - 2022

    При поддержке: XenForo.Info

Быстрая навигация

Меню пользователя