Авторские статьи ...:: Основы Крекинга программного обеспечения ::...

Discussion in 'Статьи' started by KindEcstasy, 11 Oct 2006.

  1. KindEcstasy

    KindEcstasy Banned

    Joined:
    30 Sep 2006
    Messages:
    105
    Likes Received:
    64
    Reputations:
    54
    :: Основы Крекинга программного обеспечения ::​




    : Вводная :

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

    Обычно, при исследовании программного обеспечения крекер не имеет исходного кода программы, в этом случае он прибегает к использованию вспомогательного стороннего п.о. Такие программы называются "дизассемблерами". Дизассемблер - программа которая позволяет увидеть текст кода программы на языке ассемблера. Ассемблер - низкоуровневый (ниже - только машинные коды) язык программирования (низкоуровневый - не значит плохой или лёгкий! В программировании, чем ниже язык, тем он гибче и мощнее). Но одного дизассемблера недостаточно! В арсенале взломщика всегда присутствует и программа-отладчик. Отладчик, также переводит программу в код ассемблера но и позволяет устанавливать ловушки (точки останова, брейкпоинты) на API функции программы, следить за условными переходами в интерактивном режиме, и многое другое. Взломщику также необходим редактор 16-ричного кода для внесения изменений в бинарный файл (будь то exe,com,dll - всё это бинарные файлы).


    : Ассемблер :


    Для того, чтобы заниматься исследованиями програмного обеспечения необходимы хотя бы минимальные знания языка Ассемблера. Это не значит что ВЫ должны уметь писать на нем программы нужно просто знать некоторые операторы и мнемоники этого языка. Наиболее важные операторы Ассемблера приведены ниже в таблице:


    PHP:
    |PUSH       Сохранение значения в стеке для последующего использования|

    |
    CMP        Сравнение двух регистров|

    |
    TEST       Сравнение двух регистров|

    |
    JMP        Безусловный переход|

    |
    JNZ        Переходесли оператор TEST или CMP возвратили не нуль|

    |
    JE         Переходесли оператор TEST или CMP возвратили нуль|

    |
    CALL       Вызов функции|

    |
    MOV        Присваевает регистру значениенапримерMOV EAX,1|

    |
    POP        Вытащить из стека сохраненное значение|

    |
    INC        Увеличение на еденицу|
    |
    DEC       Уменьшение на еденицу|


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


    : Инструменты :

    Итак для успешного взлома программы нам понадобиться хотя бы два инструмента, хотя в некоторых взломах хватает и одного отладчика, но давайте определимся в своих инструментах и в будущем будем использовать их:

    Дизассемблер: Я по превычке использую старый-добрый WinDASM.
    Отладчик: Предпочитаю OllyDebuger как самый второй по крутости.
    HEX-Редактор: Тут уж разницы нет, никакой какой вам удобней такой и берите, мой выбор - HIEW!
    Анализатор: С помощью него можно выяснить, запакованна программа или нет, мой выбор - PeID!

    Все эти инструменты можно слить с сайта: www.cracklab.ru (BadGuy is catching Respect!!!)


    : Взлом :


    Давайте потренируемся во взломе на простенькой программке.Ну возьмём к примеру программу Dots2 - Это простая но очень занимательная игра в точки с поддержкой opengl!

    Но перед тем как загружать отладчик, давайте я расскаже вам про API-функции. Говоря простым языком это функции отдельных библиотек о.с. windows, к которым в любой момент может обратиться другая программа за нужной ей функцией, например: я пишу программку в которой мне нужно, чтобы при каких то условиях программа выдавала мне окошко с сообщением. Я не буду описывать алгоритм появления окна в своей программе, а обращусь к API-функции 'MessageBox' из библиотеки user32.dll операцонной системы windows.Поставив на функцию, брейкпоинт, мы сможем контролировать процесс выполнения программы.
    Запустите игру и попробуйте зарегистрировать её с заведомо неверными параметрами. Что вы видите? Вы должны наблюдать вот такое предупреждение:

    Wrong email and reg.number combination

    Вот теперь то нам есть за что зацепиться! Мы будем ловить программу на предмет этого сообщения!
    В прочем грузите dots2.exe в отладчик (для этого в Olly нажмите F3 и выберите файл dots2.exe). Отладчик обработает код. В окне кода нажмите:

    Правую кнопку мышм ---> Search for ---> All referenced text strings

    Попадёте в экран со строками. Теперь поищем строку: "Wrong E-mail and Registration Number combination", для этого:

    Правую кнопку мышм ---> Search for text

    Вводим текст и жмём ок. Попадаем на строку c этим текстом жмём на ней два раза и попадаем в отладчик как раз на этом месте. Поднимаемся выше и смотрим:


    PHP:
    004126EC   E8 8EAA0000    CALL Dots2.0041D17F             ; \Dots2.0041D17F
    004126F1   
    83C4 20        ADD ESP,20                      
    004126F4   85C0           TEST EAX,EAX                    ; <---!!!
    004126F6     74 18          JE SHORT Dots2.00412710         ; <---!!!
    004126F8   6A 10          PUSH 10                         ;
    004126FA   68 40AC4400    PUSH Dots2.0044AC40             ;  ASCII "Error"
    004126FF   68 D0AE4400    PUSH Dots2.0044AED0             ;  ASCII "Wrong E-mail and reg....


    По адресу 004126F6 стоит условный переход. Несложно догадаться, что это переход активируется, когда соотношение E-mail и SerialN - верное, т.е. правильное! Смотрим выше... Там стоит TEST EAX,EAX. Это выражение даёт 1, так как ещё выше есть переход в процедуру где с регисром EAX выполняются какие-то действия, а чтобы переход сработал нам нужно чтобы был 0. Тогда прога подумает что мы ввели валидный сериал и маил. Конечно можно исправить je на jmp, но это не всегда приводит к желаемому результату, так что мы пойдём самым бронебойным путём:

    Заходим в функцию по адресу 004126EC, для этого навести курсор на адрес 004126EC и нажать на Enter. И меняем два первых оператора:

    PHP:
    XOR EAX,EAX
    RETN
    Это точно поможет! Не вдаваясь в подробности мы сделали так, чтобы на выходе процедура выдавала 0! Короче прога теперь будет счетать себя зареганой! Все теперь можно патчить и запускать!
    Вот так вот. В следующей статье будет обзор частовстречающихся защит в программном обеспечении. Спасибо всем кто читал!

    Кто не найдёт Dots2, пишите-закину!!!


    Отдельное спасибо человеку по имени Hidden!
     
    #1 KindEcstasy, 11 Oct 2006
    Last edited: 13 Oct 2006
    8 people like this.
  2. en4cer

    en4cer Elder - Старейшина

    Joined:
    10 Feb 2006
    Messages:
    80
    Likes Received:
    5
    Reputations:
    0
    Кул! получилось =) Действовал через jmp, XOR EAX,EAX не совсем понял =\
     
  3. ProTeuS

    ProTeuS --

    Joined:
    26 Nov 2004
    Messages:
    1,239
    Likes Received:
    542
    Reputations:
    445
    достато4но лири4но и нето4но, но вообщем вышло для многих познавательно - респект
     
  4. MegaBits

    MegaBits Elder - Старейшина

    Joined:
    30 Aug 2006
    Messages:
    151
    Likes Received:
    24
    Reputations:
    10
    Думаю в тему один из журналов Хакер Спец по кряку в електроном виде http://www.wisesoft.ru/xakepsv2005.shtml № 57
     
    #4 MegaBits, 12 Oct 2006
    Last edited: 12 Oct 2006
  5. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    Молодец, хорошая статья, вот только последний пример кода исправь, ато немного не согласуется ;)
    -----------------
    А по моему, они должны привосходить, знания тех, кто защищал исслдуемую программу.
     
    #5 hidden, 12 Oct 2006
    Last edited: 12 Oct 2006
  6. ProTeuS

    ProTeuS --

    Joined:
    26 Nov 2004
    Messages:
    1,239
    Likes Received:
    542
    Reputations:
    445
    >>А по моему, они должны привосходить, знания тех, кто защищал исслдуемую программу.
    да нет, иногда и минимальных знаний асма у многих нет и примеров тому я ку4у видил (пример - туторы с описанием: жми туда, пат4 75** на Eb**)
     
    1 person likes this.
  7. KindEcstasy

    KindEcstasy Banned

    Joined:
    30 Sep 2006
    Messages:
    105
    Likes Received:
    64
    Reputations:
    54
    Тут всё просто:

    Смотри

    XOR EAX,EAX - обнуляет аккамулятор EAX
    RETN - Возврат туда откуда была вызванна процедура

    Так и выходит, что в еах будет 0 и мы перескочим сообщение о неверности!
     
    #7 KindEcstasy, 13 Oct 2006
    Last edited: 13 Oct 2006
  8. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    Ладно, с первого намёка ты не понял. Какой же тут 0, если он увеличивается на 1 ;)
     
    1 person likes this.
  9. KindEcstasy

    KindEcstasy Banned

    Joined:
    30 Sep 2006
    Messages:
    105
    Likes Received:
    64
    Reputations:
    54
    Блиииин :eek: , спасибо тебе! Это блин я зашпарился... Ну да ладно исправлюсь. Человеку свойственно ошибаться. А ты молодец - заметил, держи +!
     
  10. KindEcstasy

    KindEcstasy Banned

    Joined:
    30 Sep 2006
    Messages:
    105
    Likes Received:
    64
    Reputations:
    54
    Hidden, Ну теперь то правильно? =)
     
  11. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    Да, теперь правильно :)
    Просто люблю находить косяки, ещё в технаре преподов доставал :d
    Да и не хочется чтоб будующие крякеры запктались :)
     
  12. KindEcstasy

    KindEcstasy Banned

    Joined:
    30 Sep 2006
    Messages:
    105
    Likes Received:
    64
    Reputations:
    54
    Ну теперь если будут косяки в тексте, я сразу к тебе =)))

    З.Ы Чел ты креативный - отдельный человеческий РЕСПЕКТ!
     
    1 person likes this.