ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > ИНФО > Статьи > Авторские статьи
   
 
 
Опции темы Поиск в этой теме Опции просмотра

Туториалы про крякми фантома (для начинающих и не только)
  #1  
Старый 28.08.2006, 16:13
Аватар для Ra$cal
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме:
1354067

Репутация: 599


По умолчанию Туториалы про крякми фантома (для начинающих и не только)

Позвольте представить Вам серию статей (если получитсяи потребуется) для новичков. Рассматриваться здесь будут крякми от фантома. Инструменты: OllyDbg - основной, остальное что понадобится будем добавлять по мере необходимости. В этих статьях будут описаны: теоритические данные, необходимые для понимания работы программы, основные принципы построения защит и соответственно способы их обхода. Все материалы предназначены только чтобы Вы понимали, как не стоит делать.

Начнём мы с первого крякми фантома.
Линк: http://rascalspb.narod.ru/fantom/1.zip (4Kb)
Он Вам покажется знакомым с крякми одного товарища, но отличается размером - 4 килобайта Советую для удобства добавить ярлык на OllyDbg добавить в папку SendTo. Теперь открываем крякми в отладчике. Запускаем (F9) и смотрим на него. Видим поле ввода и кнопку. Из поля ввода текст может читаться с помощью апи GetWindowTextA(W), GetDlgItemA(W), SendMessageA(W) с сообщением WM_GETTEXT. Нас интересуют только первые 2 апи. Ставим туда бряки. Это можно сдеать следующим образом: или написав в командной строке bp GetDlgItemA или поискав все апи (в окне дизасма ПКМ->Search for->All intermodular calls) и ставимть на них бряки, или Control+G->GetDlgItemTextA и двойной клик в столбце Hex Dump. Как видим вариантов много. Теперь плюсы и минусы: когда бряк ставится в программе на call API не стоитт забывать про вызовы апи через GetProcAddress, call eax. Поэтому я считаю верным ставить точку останова в начало апи. так и сделали. Не забудьте про GetWindowTextA. Теперь пишем в поле что угодно и смотрим.

Остановились примерно здесь.
Код:
77D8AC26 U>  8BFF               MOV EDI,EDI
77D8AC28     55                 PUSH EBP
77D8AC29     8BEC               MOV EBP,ESP
77D8AC2B     FF75 0C            PUSH DWORD PTR SS:[EBP+C]
Это начало функции GetDlgItemTextA (смотрим регистр EIP). А нам надо попасть в код програмы. Смотрим в стек (справа внизу).

Код:
0012FC64   00401287   /CALL to GetDlgItemTextA from CRACKME1.00401282
0012FC68   000D056C   |hWnd = 000D056C ('FaNt0m's Crackme #1',class='DLGCLASS')
0012FC6C   000003E8   |ControlID = 3E8 (1000.)
0012FC70   0040309C   |Buffer = CRACKME1.0040309C
0012FC74   00000100   \Count = 100 (256.)
На вершине стека лежит адрес, попадающий в пределы программы. Так же видим адрес на буфер, куда попадёт прочитаный текст. На нём жмём ПКМ->Follow in dump. Теперь жмём Control+F9. Остановились на GetWindowTextA. Как видите GetDlgItemTextA использует для получения текста эту апи. Чтобы выйти обратно в код программы жмём Ctrl+F9 и затем ещё раз (сначала остановимся на выходе из GetWindowTextA, в слдеующий раз на GetDlgItemTextA). Теперь F8 и мы в коде программы. В дампе введённый нами текст. Стоим здесь:

Код:
00401287   |.  68 9C304000      PUSH CRACKME1.0040309C                     ; /String2 = "tratata"
0040128C   |.  68 29304000      PUSH CRACKME1.00403029                     ; |String1 = "m0tNaF-EmKCARc"
00401291   |.  E8 BC000000      CALL <JMP.&KERNEL32.lstrcmpA>              ; \lstrcmpA
00401296   |.  83F8 00          CMP EAX,0
00401299   |.  74 15            JE SHORT CRACKME1.004012B0
0040129B   |.  6A 30            PUSH 30                                    ; /Style = MB_OK|MB_ICONEXCLAMATION|MB_APPLMODAL
0040129D   |.  68 38304000      PUSH CRACKME1.00403038                     ; |Title = "Check Status"
004012A2   |.  68 45304000      PUSH CRACKME1.00403045                     ; |Text = "Wrong Password! Keep trying, you'll get it!"
004012A7   |.  6A 00            PUSH 0                                     ; |hOwner = NULL
004012A9   |.  E8 5C000000      CALL <JMP.&USER32.MessageBoxA>             ; \MessageBoxA
004012AE   |.  EB 13            JMP SHORT CRACKME1.004012C3
004012B0   |>  6A 40            PUSH 40                                    ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
004012B2   |.  68 38304000      PUSH CRACKME1.00403038                     ; |Title = "Check Status"
004012B7   |.  68 71304000      PUSH CRACKME1.00403071                     ; |Text = "You got it! Your now a cracker! :)"
004012BC   |.  6A 00            PUSH 0                                     ; |hOwner = NULL
004012BE   |.  E8 47000000      CALL <JMP.&USER32.MessageBoxA>             ; \MessageBoxA
Это, как Вы надеюсь уже заметили, есть проверка. Проверка простая - сравнение строк. Если мы ввели строку m0tNaF-EmKCARc, то увидим поздравление. Иначе нет. Текст этот, если Вы опять же заметили, есть повёрнутый текст Crackme-Fantom.

Задание для самостоятельной работы - сделайте, чтобы на любой текст было сообщение о правильном пароле, замените пароль на более простой. Причём интересны вВаши решения этих вопросов. Все решения постите - за оригинальные и интересны +

Последний раз редактировалось Ra$cal; 28.08.2006 в 16:19..
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программы для начинающих [Ghost] ICQ 19 20.11.2006 21:09
Описание Ssh Nova *nix 2 13.07.2006 17:31
Несколько приемов для начинающих foreva Чужие Статьи 0 06.02.2005 11:35



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ