special

Крекинг - это искусство исследования ассемблерного кода с целью поиска уязвимого места, с последующим его анализированием и взломом

Введение в крекинг

Начало

Крекинг - это искусство исследования ассемблерного кода с целью поиска уязвимого места, с последующим его анализированием и взломом.
Огорчу тех кто думает, что заняться крекингом можно просто так без определённых знаний, навыков, упорства. Не получится просто взять скачать нужный для взлома софт и взломать программу. Не думай, что программа ломается за 5 минут (хотя если уже есть опыт, и защита программы на 1 то это возможно даже ещё и за более короткий промежуток времени).
Итак, если ты загорелся желанием научится крекингу, готов прочитать уйму документов, потратить много времени то это статья для тебя.
Для начала тебе нужно изучить основы ассемблера, даже не обязательно учиться писать на нём программы просто нужно знать значение функций и команд, нужно уметь читать код. Как ты думаешь сможешь ли ты читать книгу на испанском языке не зная его ?Из материала по асму советую почитать: рассылку Калашникова (http://www.Kalashnikoff.ru), "Ассемблер IBM PC" Юрова, из статей "Ассемблер для Cracker'ов" от Dr.Golova и "Cracking для карапузов" от Crack.
Освоив материал, ты должен знать предназначение функций, немного разбираться в ассемблерском коде программы. Понять, что любая программа, написанная на любом языке программирования, передаётся для обработки процессору в ввиде машинного кода, для дальнейшей обработки и выполнения заложенных в неё функций. Машинный код для того, чтобы он был читабельным преобразуется в ассемблер. Его то мы и можем просмотреть, изменить с помощью специальных программ. Но изменения не возможны если программа упакована.Упаковка программы производится для того, чтобы уменьшить её размер и защитить от взлома (например, UPX, Aspack и многие другие).

Разновидности и предназначение программ

Продвижение дальше не возможно без специального софта, нам нужны:
  • Дебаггер/отладчик - служит для отладки программного кода, трассировки, установки брейкпоинтов и др.
    (OllyDBG)
  • Дизассемблер - программа которая из машинного кода получает исходный код на ассемблере
    (kWdsm)
  • Анализатор - анализирует программный файл и сообщает чем он запакован.(если он запакован:)br>(PEiD)
  • Анпакер - распакует запакованный файл.
    (QUnpack)
  • Патчер - программа с помощью, которой можно заменить ассемблерский код файла с последующим сохранением изменений.
    (hiew)
  • Патчмейкер - понадобится тем у кого нет возможности написать кряк/патч самому. Принцип работы программы прост, после того, как у нас имеется уже пропатченая программа с помощью (hiew) и не пропатченая, патчмейкер вычисляет изменения в программа, после создаёт exe файл-патч.
    (tpe)
    Весь этот софт можно скачивать по отдельности, но есть и комбинированный вариант, называется он CrackersKit (версия на время написания статьи: 1.1, вес: 7 мб) скачать его можно с cracklab.ru почти все вышеперечисленные программы там есть (или их аналоги).После того, как мы имеем начальные знания в этой области, и у нас имеется нужный для исследования софт разберёмся в Видах ПО:
    shareware - условно-бесплатное ПО
    freeware - бесплатное ПО
    adware - рекламно оплачиваемые программы
    commercialware - Платить!
    donation ware - плата при желании
    Цель - программы типа shareware, ad ware и commercial ware.

    Панель инструментов в Olly и DASM

    Запускаем Olly
    Думаю вы уже имеете хоть какой-то опыт работы с олли (если нет можете почитать статью Olly Debugger от А до Я cracklab.ru)
    Напомню функции отладчика, с которыми мы будем работать:

  • M - Memory map (Карта Памяти)
  • C - CPU главное окно олли
  • / - Patches патчи, т.е пропатченые места программы
  • B - Breakpoints брейкпоинты
  • R - referenced text string ссылочная текстовая строка
    Всегда на виду должны быть CPU (главное окно олли), Breakpoints и Patches.
    Окно CPU:

    Запускаем kWdsm
    Разберёмся в предназначении самых основных функций дасма.
  • Open file to disassambler - открыть файл в дизассемблере
  • Project Files and and Comments - сохранить листинг в ASCII файл
  • Find Text - поиск текста
  • Goto Code Start - переместиться на начало кода
  • Goto Program Entry point - точка входа программы
  • Goto Page - перейти на страницу
  • Execute JMP - выполнить переход
  • Return From Last Jmp - возврат из последнеднего перехода
  • Execute Call - выполнить вызов
  • Return From Call - возврат из последнего вызова
    Для того, чтобы анализировать код защиты для начала его нужно найти.

    Способы поиска кода проверки (с помощью OllyDGB и kWdsm)


    Цель поиска - розыск и произвольное модифицирование кода, либо нахождение валиного серийного номера. Поиск кода проверки обязателен для взлома программы.
    Основное предназначение этого кода:
    1 сверить валидность серийного номера (введенных данных в форме ввода СН)
    2 перейти по адресу, если он верен/неверен
    3 сообщить о не/корректной регистрации

    Основные способы нахождения кода проверки:
    1 брейкпоинт (Intermodular call)
    2 Referenced
    3 поиск по средствам окна (дампа) памяти
    4 поиск в стеке
    5 поиск с помощю kWdsm
    |1|
    Брейкпоинт - точка прерывания функции.
    Поставить брейкпоинт можно либо через
    _командную строку, например:
    bpx MessageBoxA
    bpx - команда точки прерывания
    MessageBoxA - функция, на которую устанавливается брейкпоинт
    о предназначениях функций можно узнать из СПРАВОЧНИА ПО WinAPI (cracklab.ru)
    Либо через
    _поиск межмодульных вызовов (Intermodular calls) например:
    находим функцию MessageBoxA кликаем правой кнопкой и выбираем Set breakpoint on every call MessageBoxA
    |2|
    Поиск по ссылочной текстовой строке (referenced text string).
    При таком виде поиска используется фраза которая выводится например при вводе некорректного серийного номера. Запускаем программу, вводим СН, программа ругается что СН не верен (например так: Wrong SN!Trying again) =>для поиска и будет использоватся данная фраза, дальше идём в All referenced text string (котора во вкладке Search for) и ищем эту фразу.
    |3|
    Запускаем программу, заполняем окна регистрации, нажимае в букву M (Memory Window) В окне DUMP кликаем правой кнопкой, и вводим введённые нами данные в поле пароль. После того как программа нашла кусок памяти, где сохранились введённые нами данные, ставим брейкпоинт на строку с паролем (клик правой кнопкой брейкпоинт -> Мемори аксес) опять пытаемся зарегистрировать программу. Вводим данные и она останавливается на куске кода в котором был найден введённый нами пароль. Снимаем брейкпоинт с памяти и продолжаем исследование.
    |4|
    Поиск в стеке производиться следующим образом, клик в окне стека правой кнопкой мыши Search For -> Binary Sting и ищем по фразе которая выводится при неверном вводе СН.Дальше найдя эту фразу смотрим левее в поле Dissambly видим там команду, копируем её идём в главное окно (CPU) кликаем правой кнопкой мыши Serach for -> Command
    |5|
    Поиск с помощю kWdsm.Поиск с помощю kWdsm очень прост, для того, чтобы найти код проверки нужно либо ввести фразу выводящуюся при некорректной регистрации, либо искать по строке Possible StringData Ref from Code Obj ->"

    Пример взлома программ с разными типами защит

    Для того чтобы научится крекингу, нужно исследовать как можно больше программ, с разной по степени сложности защитой, поэтому перейдём к делу. В этой статье я рассмотрю только 2 типа защит (так как они самые распространённые):
    1 форма введения СН
    2 надпись в программе (например, Unregistered)
    Программы для исследования берём либо с журнальных болванок (ПЛ, хакер, игромания), либо с сайтов типа softodrom.ru, и др (ищем там шарованный софт (т.е вид shareware)и исследуем).
    Теоретический план взлома:
  • поиск кода проверки
  • анализ функций кода
  • нахождение СН либо правка вывода функций
  • патчинг программы, либо введение найденного СН
    Начнём непосредственно сам процесс поиска кода и его взлома, я покажу вам эти операции на примере EscapeClosePro
    Все нижеперечисленные действия рекомендую выполнять вместе со мной, так как это тяжело воспринимается только путём прочтения материала. Если ты пока не понимаешь как это у меня получилось потренируйся на крякмисах можно от фантома и крафта (ngh.void.ru/soft/d/crackme.rar; ngh.void.ru/soft/d/craft1.rar )
    EscapeClosePro

    Метод защиты: СН, надпись Unregistered в окне программы
    Пакер/протектор: отсутствует (а узнали мы это благодаря PEiD, а если бы программы была запакована, то просто нужно было бы найти под неё анпакер)
    Стоимость: 100 руб :)
    Взлом путём поиска СН:
    Этот способ взлома характеризуется тем, что задача состоит в том чтобы найти код проверки это может быть путём установки брейкпоинта на нужную команду, либо просмотром ссылочной текстовой строки, либо просто просмотром дизассемблерного кода программы и поиска валидного серийного номера.
    1
    Ставим брейкпоинт bpx MessageBoxA (способ нахождения кода проверки № 1).Запускаем окно регистрации, вводим данные:
    имя vizor
    СН vizor
    программа остановилась на адресе 0040262E по этому адресу находится команда call с помощью этой команды выводится (в нашем случае) текст: Неправильный код!.Обратим внимание на окно дампа памяти (в главное окно CPU), попытаемся найти интересные вещи путём просто просмотра кода, скролим вверх и видим по адресу 0012F3D0 какие-то цифры больше 10 цифр на взгляд: 56C520AE713B563D5119 возникает подозрение на СН, тестим и облом.
    никто не запрещал использовать несколько (хоть все) способы поиска сразу
    Тепер устанавливаем брейкпоинт не на само сообщение, а на команду извлечения фразы (Неправильный код!) т.е на push.Снова заполняем формы ввода, ок, программа остановилась по адресу 00402620 (там где PUSH 0).Снова обращаем свой взор на дамп памяти и видим там:
    0012F438 004088E8 ASCII "9B2BC2C55272E0C32B44" << подозрение на СН
    0012F43C 0012F518 << тут наш бряк
    0012F440 00402200 EscapeCl.00402200
    
    Тестируем ещё 1 найденный нами СН на валидность.(имя vizor sn 9B2BC2C55272E0C32B44) и Спасибо за регистрацию!
    2
    Попробуем ещё раз но немного другим способом, опять возвращаемся на адрес 00402620 (кто забыл это push) и начинаем искать что-то интересное в главном окне.. скролим выше.. и натыкаемся на адрес 00402598 в котором видим в открытом виде уже знакомый нам СН ) 9B2BC2C55272E0C32B44.(можете ещё раз проверить его валидность:)
    3
    Идём в Search For -> All referenced text string и видим просто страшные вещи :) валидный СН в открытом виде стречается раз 10 в ссылочной текстовой строке.
    Смена вывода функции:
    Смена вывода функции в свою очередь характеризуется поиском кода проверки, произвольным изменением его на циклический т.е на такой который при любых введённых данных будет считать себя зарегистрированным.
    Опять же устанавливаем брейкпоинт на MessageBoxA как и раньше, вводим теже самые данные в поле имя, СН, останавливаемся там же. Только теперь движемся выше в поиска перехода (джампа, прыжка).По пути наверх анализируем все переходы. А вверх продвижение производится потому, как, если например функция вывода сообщения находится грубо говоря на адресе 5, то её тестирование происходит выше этого адреса, так как тестирование происходит всегда выше результата (понятие стека).
    Скроля выше видим:
    004025CD > 85C0 TEST EAX,EAX
    004025CF . A3 58AF4000 MOV DWORD PTR DS:[40AF58],EAX
    004025D4 74 4A JNE SHORT EscapeCl.00402620 
    
    Анализируя JNE 00402620 переход, обращаем внимание в первую очередь на адрес джампа т.е 00402620.Смотрим что находится по этому адресу, видим что вывод сообщения о том что программа незарегистрированна.Теперь если мы изменим переход JNE (jump if not equal т.е прыжок если не равно) на JE (jump if equal т.е прыжок если равно).Двойным кликом левой кнопки мыши нажимаем на:
    004025D4 74 4A JNE SHORT EscapeCl.00402620 
    
    и меняем JNE на JE.Теперь любой введенный СН программа считает за верный (конечно кроме настоящего СН:), а происходит это из-за того, что её вывод функции изменён таким образом, чтобы программа всегда возвращала положительный результат при любых введённых данных.
    Но это её не всё, не стоит торопиться и бежать патчить 1 вывод этой программы. Вспомним, какой ещё способ защиты использует программа? верно, простая на первый взгляд надпись Unregistered в окне программы. Просто после перезапуска программы, она смотрит была ли изменена это надпись на что-то другое и если это так то она считает себя зарегистрированной, но у нас такого небыло поэтому ещё не всё сделано двигаемся дальше.
    Устанавливаем брейкпоинт на уже достаточно поднадоевшую MessageBoxA.
    Начинаем рассуждать если программа незарегистрирована то у неё видно надпись Unregistered следовательно где-то в коде программы она должна быть.Начинаем поиск, но перед этим просто проскролим код и посмотрим его.. скролим вниз и видим:
    0040265F . 85C0 TEST EAX,EAX << сравнение данных в регистрах
    00402661 74 23 JE SHORT EscapeCl.00402686 << переход
    00402663 . 8B5424 70 MOV EDX,DWORD PTR SS:[ESP+70]
    00402667 . 68 64724000 PUSH EscapeCl.00407264 ; /Text = "Unregistered version!"
    ...
    00402686 > 8B7424 70 MOV ESI,DWORD PTR SS:[ESP+70]
    0040268A . 8B3D 70714000 MOV EDI,DWORD PTR DS:[<&USER32.SetDlgIte>; USER32.SetDlgItemTextA
    00402690 . 68 54724000 PUSH EscapeCl.00407254 ; /Text = "Registered to:"
    
    "SetDlgItemTextA - функция заголовка или текста в окне"
    А вот и это сообщение. Начинаем анализ кода. Видим стандартную конструкцию проверки содержимого регистров и функцию джампа. JE 00402686 - JE - переход дальше по коду. Смотрим что находиться по адресу 00402686 а там находится сообщение о том, что программа RegiRegistered to: => если изменить JE на JNZ программа при людом раскладе считает себя зарегистрированной и пишет об этом в своём главном окне.
    Таким образом изменив эти 2 функции программа всегда будет зарегистрирована и всё это балгодаря всему 2-м байтам изменённым в коде.
    Патчинг:
    Патчинг программы производится непосредственно после взлома программы.
    Для того, чтобы пропатчить нашу подопытную программу нужно изменить:
    адрес функция и изменение
     адрес функции
    	 перехода
    004025D4 JNE 00402620 JE
    00402661 JE 00402686 JNE
    
    Для патчинга будем использовать hiew, о командах hiew'a можно узнать из моей статьи (ngh.void.ru/lec/crack.html).
    До того, как мы будем производить патчинг программы нужно создать папку (где поудобнее, можно в корне диска) и скопировать туда exe файл EscapeClosePro, на тот случай если мы что-то сделали не верно. После того, как мы его скопировали, запускаем hiew находим и открываем в ней наш файл (EscapeClosePro.exe).На этом месте я хотел бы немного рассказать об основных опциях hiew'a.В этом меню выбираем Decode.
    меню выбора отображения кода

    Главная панель hiew'a:

  • Help - функция хелпа (F1)
  • Edit - редактирование (F3)
  • Mode - режим просмотра текста (F4)
  • Goto - поиск по адресу (F5)
  • Search - поиск по тексту (F7)
  • Files - сохраниение изменений (F9)
    Загружаем наш файл, EscapeClosePro.exe в hiew, ищем либо по фразе (F7), либо по адресу (F5).Я бы советовал искать по фразе, поэтому нажимаем F7 и вводим Registered to:, после нахождения этой фразы, вспомним какие выводы нам нужно патчить:
    004025D4 JNE 00402620 JE
    00402661 JE 00402686 JNE
    
    Патчим.После пропатчивания, (помнишь я говорил нам нужно скопировать ехе файл программы и патчить его) дак вот после того, как мы его пропатчили переминуем его например в p.exe и скопируем НЕИЗМЕНЁНЫЙ файл программы, т.е теперь у нас в папке 2 файла, 1 пропатчиный, а другой дефлотовый програмный.Это нам нужно для того, чтобы сделать патч с помощю патчмейкера tpe:

    Для того, чтобы создать патч нужно в этом окне в форме Original file (оригинальный, т.е неизменённый/непропатченный) нужно выбрать непропатченный файл, а в окне Patched File соответственно пропатченный файл.После в главном окне tpe заполнить формы, кто создатель патча, и его сайт.И во вкладке File выбрать создание патча.После сохранить под нужным именем и всё патч готов!
    Надеюсь это статья помогла тебе в освоении основ крекерского искусства, ответили на некоторые твои вопросы.Дальше всё будет гораздо интереснее, больше практикуйтесь, читайте и у вас всё обязательно получится.
    p.s к этой статье есть приложение в виде ведео-роликов взлома программы EscapeClosePro различными способами.
    p.s огромное спасибо Armiоlu за то что натолкнул меня не верный путь, помог в освоении непонятных для меня вещей)
    By Rel4nium (ngh.void.ru)



    Дата створення/оновлення: 25.05.2018