Взлом крэкми на Visual Basic: убираем НАГ двумя способами. Крэкинг ч.27

Обсудить статью на форуме


Массу свежих 2020 года крэкерских инструментов, видеоуроков и статей вы сможете найти на видеокурсе от нашего сайта. Подробнее здесь.


Продолжаем с Visual Basic'ом

Ок, продолжаем с Visual Basic’ом. Здесь у нас крэкми, в котором нужно избавиться от наг-окошка. Я это сделаю это тем способом, который подойдёт для данного конкретного случая (мне нравится размышлять и пробовать новое), но конечно, используя OllyDbg, специально заточенный для VB, тот же, что и в прошлой главе. Потом мы рассмотрим механический способ, позволяющий сэкономить время. Можно было бы сразу дать его, но я считаю, что очень важно самому попытаться это сделать, чтобы понять как его работает, поэтому сначала рассмотрим мой способ снятия нага, а потом – механический способ, потому что вы должны знать и уметь применять оба.

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

Если запустим крэкми в OllyDbg, то увидим наг-окошко.

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

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

Первое побеждение, возникающее при исследовании программы с наг-окном — это посмотреть JMP-переходы, ведущие в разные части программы.

Взлом программ отладчиком OllyDbg

Запускаем программу и нажимаем F9.

Взлом программ отладчиком OllyDbg

Указанное время прошло и кнопка CONTINUE становится доступной для нажатия.

Знаем, что при закрытии нага осуществляется проход через JMP в секции кода, поэтому устанавливаем BPM ON ACCESS в указанной секции (что в реальности будет BPM ON EXECUTION) и нажимаем кнопку CONTINUE.

Взлом программ отладчиком OllyDbg

Взлом программ отладчиком OllyDbg

Останавливаемся здесь.

Взлом программ отладчиком OllyDbg

То есть видим, что собственно программа начинает выполнение в 40D090, то есть мы видим JMP-переход на 40D090, где начинается указанная часть и видим остальные JMP на разные части программы. Устанавливаем BP на все эти JMP, чтобы куда и в каком случае они ведут.

Взлом программ отладчиком OllyDbg

Перезапускаем программу.

Взлом программ отладчиком OllyDbg

Видим, что после выхода из нага останавливаемся здесь. Есть большой соблазн поменять JMP на JMP 409090, чтобы происходил прямой переход на программу, но это вызывет ошибку и запуска не происходит, так что опять делаем RUN.

Взлом программ отладчиком OllyDbg

Видим, что останавливаемся на следующем JMP и если нажмём RUN снова:

Взлом программ отладчиком OllyDbg

Несколько секунд и останавливаемся снова, и так – 5 раз, что говорит мне о том, что в этой процедуре содержится таймер.

Оттрасируем эту процедуру и посмотрим, что в ней находится.

Взлом программ отладчиком OllyDbg

Ничего хорошего, продолжаем трассировать с помощью F8.

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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

И нажимаем RUN.

Взлом программ отладчиком OllyDbg

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

Идём к строке, которую забиваем NOP’ами до запуска чего бы то ни было.

Взлом программ отладчиком OllyDbg

Взлом программ отладчиком OllyDbg

Убираем все BP и ставим один сюда. Теперь делаем RUN.

Взлом программ отладчиком OllyDbg

Останавливаемся здесь и трассируем, чтобы посмотреть, где завершается процедура и происходит возврат в библиотеку Visual Basic’а.

Взлом программ отладчиком OllyDbg

Видим, что дошли до RETN, но переходит не в DLL VB, а продолжаем с 40d714.

Продолжаем трассировку.

Взлом программ отладчиком OllyDbg

Здесь видим RETN, который, согласно пояснению, производит возврат в DLL Visual Basic’а, поскольку тут уже всё подготовлено для запуска программы, так что можем попытаться изменить этот RETN 4 на переход в начало программы. Смотрим.

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

Пробуем, запустится ли. Делаем RUN.

Взлом программ отладчиком OllyDbg

Можем сохранить эти изменения, начальные NOP’ы и эти два перехода.

Взлом программ отладчиком OllyDbg

Нажимаем правую кнопку мыши – COPY TO EXECUTABLE – ALL MODIFICATION и сохраняем всё, что изменили.

Взлом программ отладчиком OllyDbg

Нажимаем COPY ALL.

Взлом программ отладчиком OllyDbg

Ahora click derecho SAVE FILE

Теперь правая кнопка мыши – SAVE FILE.

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

Делаем RUN.

Взлом программ отладчиком OllyDbg

Видим, что сначала происходит остановка на том переходе, который создает наг-окошко (404b7a), а спустя нескольких секунд происходит закрытие окошка и остановка на 404b87, после чего сразу запускается программа благодаря нашему патчу, так что нам нужно изменить переход, который создаёт наг-окно, чтобы сначала выполнялась пропатченная нами процедура, а затем сразу запускалась сама программа.

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

Сохраняем изменения и пробуем ещё раз.

Взлом программ отладчиком OllyDbg

Происходит «чистый» запуск без каких-либо всплывающих окон – чистый как слеза младенца.

Метод 4c – это механический метод, который очень полезен, чтобы сделать это быстро и просто, и основывается на знании того, как устроен VB-файл.

Посмотрим на точку входа:

Взлом программ отладчиком OllyDbg

Видим, что программы, написанные на VB начинаются с PUSH и CALL (если вам они не встретились, значит, что exe-файл был изменён, тогда необходимо найти PUSH и записать адрес, который кладётся в стек, в данном случае 40436C).

Взлом программ отладчиком OllyDbg

Как видим, это адрес VB-заголовка.

К этому адресу необходимо прибавить 4C.

40436c + 4c

Взлом программ отладчиком OllyDbg

Это 4043b8.

Взлом программ отладчиком OllyDbg

Вот он, теперь ищем адрес, который здесь лежит – это 4044c0.

Взлом программ отладчиком OllyDbg

Находим данный адрес в DUMP’е.

Взлом программ отладчиком OllyDbg

Видим похожие элементы, каждый из которых соответствует какой-то форме (FORM). Двадцать четвёртый байт каждого из этих элементов – это порядок, в котором формы должны появляться. Смотрим:

40440c +24=404430

Взлом программ отладчиком OllyDbg

Здесь находится 00, то есть эта форма будет появляться первой, а 01 означает, что это вторая, так что можем изменить порядок.

Взлом программ отладчиком OllyDbg

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

Взлом программ отладчиком OllyDbg

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

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

Файлы к статье

  [C] Рикардо Нарваха, пер. Aquila

Обсуждение статьи: Взлом крэкми на Visual Basic: убираем НАГ двумя способами. Крэкинг ч.27 >>>


При перепечатке ссылка на https://exelab.ru обязательна.



Видеокурс ВЗЛОМ