Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
...:: Основы Крекинга программного обеспечения ::... |

11.10.2006, 14:09
|
|
Участник форума
Регистрация: 30.09.2006
Сообщений: 134
Провел на форуме: 352963
Репутация:
197
|
|
...:: Основы Крекинга программного обеспечения ::...
:: Основы Крекинга программного обеспечения ::
: Вводная :
Крекинг - это исследование кода программы на низком уровне с целью нахождения ослаблённых мест в защите программного обеспечения для дальнейшего использования вышеупомянутых в целях бесплатной регистрации программ, анализа алгоритма генерирования серийного номера или пропатчивания (замены определённых байтов с целью изменения поведения программы).
Обычно, при исследовании программного обеспечения крекер не имеет исходного кода программы, в этом случае он прибегает к использованию вспомогательного стороннего п.о. Такие программы называются "дизассемблерами". Дизассемблер - программа которая позволяет увидеть текст кода программы на языке ассемблера. Ассемблер - низкоуровневый (ниже - только машинные коды) язык программирования (низкоуровневый - не значит плохой или лёгкий! В программировании, чем ниже язык, тем он гибче и мощнее). Но одного дизассемблера недостаточно! В арсенале взломщика всегда присутствует и программа-отладчик. Отладчик, также переводит программу в код ассемблера но и позволяет устанавливать ловушки (точки останова, брейкпоинты) на 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. И меняем два первых оператора:
Это точно поможет! Не вдаваясь в подробности мы сделали так, чтобы на выходе процедура выдавала 0! Короче прога теперь будет счетать себя зареганой! Все теперь можно патчить и запускать!
Вот так вот. В следующей статье будет обзор частовстречающихся защит в программном обеспечении. Спасибо всем кто читал!
Кто не найдёт Dots2, пишите-закину!!!
Отдельное спасибо человеку по имени Hidden!
Последний раз редактировалось KindEcstasy; 13.10.2006 в 19:28..
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|