Воскресенье, 19.05.2024, 12:33
Приветствую Вас прохожий | RSS
Главная | Каталог статей | Регистрация | Вход
Меню сайта
Категории каталога
Мои статьи [3528]
Мини-чат
200
Наш опрос
Оцените мой сайт
Всего ответов: 17
Форма входа
Поиск
Друзья сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
SITE LOGO
Главная » Статьи » Мои статьи

Crackme
10 простеньких крякмисов для новичков (не от fant0m'a)

Всем привет!

Хочу порадовать новичков и написать про одну занятную Crackme_Collection. Она проще, чем
fant0m'овская и IMHO понравится любому newbies'у.
Автор коллекции - AttilhaZ - собрал самые простые способы защиты. Все crackme написаны на
Visual Basic и ничем не запакованы.

Необходимо: Инструменты:

-некоторое знание Visual Basic IDA 4.8.0.847
-умение работать в отладчике, OllyDbg 1.10
hex-редакторе и дизассемблере hiew 7.10

Поехали:

[CrackMe #1] Find serial
Запускаем и видим заманчивое предложение ввести серийник. Вводим, что хотим и в ответ
получаем окно со словами "The serial you have entered is invalid. Try again!!!".
Открываем IDA и дизасмим exe'шник. Ищем слова "The serial" и попадаем сюда:

.text:00401A68 aTheSerialYou_0: ; DATA XREF: .text:00402479o
.text:00401A68 unicode 0,
.text:00401A68 unicode 0, ,0
.text:00401AD2 align 4
.text:00401AD4 dd 12h

Истина где-то рядом, значит нужно пошарить около этого кода. Немного поднимаемся и видим:

.text:0040199C aAbout: ; DATA XREF: .text:0040227Do
.text:0040199C unicode 0, ,0
.text:004019A8 dword_4019A8 dd 33AD4EE1h, 11CF6699h, 0AA000CB7h, 93D36000h, 18h
.text:004019A8 ; DATA XREF: .text:004023ABo
.text:004019BC aRmth2hm89t21: ; DATA XREF: .text:004023BCo
.text:004019BC unicode 0, ,0
.text:004019D6 align 4
.text:004019D8 aN:
.text:004019D8 unicode 0, ,0
.text:004019DC aTheSerialYouHa: ; DATA XREF: .text:00402420o
.text:004019DC unicode 0,
.text:004019DC unicode 0, ,0
.text:00401A4C dd 10h
.text:00401A50 aGreat: ; DATA XREF: .text:0040240Eo
.text:00401A50 unicode 0, ,0
.text:00401A62 align 4
.text:00401A64 unicode 0, ,0

Сочетание букв Rmth2hm89T21 не смущает? Копировать-вставить, ОК. Окошко с надписью Great!!!
и улыбка на лице. Вот и все.

[CrackMe #2] Remove NAG
Запускаем и видим NAG с надписью "Remove Me". Надо убрать! Запускаем OllyDbg. Будем ловить
MessageBox. Search for - All intermodular calls, выбираем rtcMsgBox и ставим бряки на все
вызовы - set breakpoint to every call to rtcMsgBox. Оказываемся здесь:

0040238D . FF15 1C104000 CALL DWORD PTR DS:[<&MSVBVM60.#595>] ; MSVBVM60.rtcMsgBox

Этот вызов надо NOP'ить, превращая FF151C104000 в 909090909090. Можно прямо в Olly, но мне
больше нравиться hiew.

[CrackMe #3] Enable disabled button
Запускаем и видим disabled button. В данном случае удобно воспользоваться hex-редактором, так
как, по всей видимости, мы будем менять атрибуты кнопки с disabled на enabled, т.е. превращать
её в активную. Если вы имели дело с VB, то можете знать, что свойство активности кнопки имеет
номер 11 (попытайтесь запомнить номера и других свойств, так как они в скором времени нам пригодятся).
К чему это я - сейчас поймете. Запускаем hiew, открываем в нем наш ехе-шник. Ищем фразу "Enable Me",
что написана на нашей кнопке. Умный Хью сразу вычислил, что в hex'e это выглядит так:

45 6E 61 62 6C 65 20 4D 65 00 04 78 00 00 00 FF 0F 5F 0A 08 00

, где 45 6E 61 62 6C 65 20 4D 65 - Enable Me
00 04 78 00 00 00 FF 0F 5F 0A 08 00 - свойства кропки, из которых
08 00 - искомое. Меняем его на true, то есть на 08 01. Была кнопка простая, стала enabled.

[CrackMe #4] Infinity cicle of NAGs
Засада! NAG разбушевался и остановить его может только Ctrl+Alt+Del. Или взлом.
Грузим IDA и ищем (Alt+T) фразу "Infinity cicle", что красуется во главе NAGа. Попадаем сюда:

.text:00401EC8 loc_401EC8: ; CODE XREF: .text:00401F35j
.text:00401EC8 mov ecx, 0Ah
.text:00401ECD mov eax, 80020004h
.text:00401ED2 mov [ebp-54h], ecx
.text:00401ED5 mov [ebp-44h], ecx
.text:00401ED8 lea edx, [ebp-74h]
.text:00401EDB lea ecx, [ebp-34h]
.text:00401EDE mov [ebp-4Ch], eax
.text:00401EE1 mov [ebp-3Ch], eax
.text:00401EE4 mov dword ptr [ebp-6Ch], offset aInfinityCicle ; "Infinity cicle"
.text:00401EEB mov dword ptr [ebp-74h], 8
.text:00401EF2 call esi ; __vbaVarDup
.text:00401EF4 lea edx, [ebp-64h]
.text:00401EF7 lea ecx, [ebp-24h]
.text:00401EFA mov dword ptr [ebp-5Ch], offset aBlockMyInfinit ; "Block my infinity cicle!!! If my cicle "...
.text:00401F01 mov dword ptr [ebp-64h], 8
.text:00401F08 call esi ; __vbaVarDup
.text:00401F0A lea eax, [ebp-54h]
.text:00401F0D lea ecx, [ebp-44h]
.text:00401F10 push eax
.text:00401F11 lea edx, [ebp-34h]
.text:00401F14 push ecx
.text:00401F15 push edx
.text:00401F16 lea eax, [ebp-24h]
.text:00401F19 push 30h
.text:00401F1B push eax
.text:00401F1C call edi ; MSVBVM60_595
.text:00401F1E lea ecx, [ebp-54h]
.text:00401F21 lea edx, [ebp-44h]
.text:00401F24 push ecx
.text:00401F25 lea eax, [ebp-34h]
.text:00401F28 push edx
.text:00401F29 lea ecx, [ebp-24h]
.text:00401F2C push eax
.text:00401F2D push ecx
.text:00401F2E push 4
.text:00401F30 call ebx ; __vbaFreeVarList
.text:00401F32 add esp, 14h
.text:00401F35 jmp short loc_401EC8

Строка - jmp short loc_401EC8 - любезно показывает нам прыжок на вызов NAGa. Короче
говоря, сколько ты ОК не жми, а окно так и останется. Вывод: NOP'им jmp. Открываем hiew,
ищем строчку с номером 00401F30 и меняем в ней EB 91 на 90 90. Теперь после нажатия OK
появится душевное окошко.

[CrackMe #5] Find serial
По сравнению с #1 задача усложнилась. Теперь при вводе левого серийника никто не ругается.
Ругаться будут при вводе правильного. Его и найдем. Грузим OllyDbg, ищем All intermodular calls
и ставим бряк на все вызовы __vbaStrCmp (set breakpoint on every call to __vbaStrCmp).
Бряк сработал тут:

00402433 . FF15 40104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrCm>; MSVBVM60.__vbaStrCmp

В регистрах EAX и EDX видим:

EAX 0014E024 UNICODE "Ap49-mn41"

EDX 0014E024 UNICODE "Ap49-mn41"

Сочетанием Ap49-mn41 нас не смутишь, значит наградой будет "Great!!! Your serial is right!!!"

[CrackMe #6] DEMO to FULL
Самый простой крякми из обзора. Автор пишет: Change DEMO VERSION words in FULL VERSION to
register this crackme!!! You must see REGISTERED in the license box!. Да, вы не ошиблись.
Необходимо просто заменить слово DEMO на слово FULL, и крякми зарегится.
Открываем hiew и ищем слово DEMO. Нашли? Тогда правим на FULL (ecли заметили, поисковик Хью
снабжен конвертером ASCII - HEX), то есть меняем 44 45 4D 4F на 46 55 4C 4C. Cохраняемся
и видим чудесные превращения.

[CrackMe #7] Enable all and find serial
Поскольку данный крякми является сочетанием #3 и #5, то обойдусь без подробностей. Первым делом
enabl'им все что можно: кнопочку OK, чекбокс Check me, едитбокс Enable me and find...
Грузим hiew, ищем ОК, попадаем куда надо, считаем до одиннадцати и правим 08 00 на 08 01.
Ищем Сheck me, попадаем куда надо, считаем до одиннадцати и правим 09 00 на 09 01. Чуть ниже
видим фразу "Enable me and find...", находим кусок 0А 1D 01 08 00 и правим 00 на 01.
Осталось найти правильный серийник. Поступаем аналогично #5: грузим OllyDbg,
ищем All intermodular calls и ставим бряк на все вызовы __vbaStrCmp, брякаемся здесь:

004025A9 . FF15 40104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrCm>; MSVBVM60.__vbaStrCmp

В регистре ЕАХ видна заветная фраза:

EAX 0014DF94 UNICODE "MnKtRkmoopgHmKif"

Вот мы и справились с более серьёзным крякмисом. Будем крякать дальше.

[CrackMe #8] Enable all
Набьём на этом деле руку. В данном крякми надо enabl'ить кнопку Enable Me - Level01, меню Level02 и
саб-меню Enable me03. hiew готов к работе и уже ищет слова Enable Me. Mеняем 08 00 11 на 08 01 11.
Ищем Level02 и правим 05 00 FF на 05 01 FF. Enable me03 нашлись тоже, 05 00 FF на 05 01 FF поменялось.
Всё, квест пройден.
P.S. После прочтения этого материала одна моя хорошая подруга назвала меня чайником и предложила другой
способ enabl'инга с помощью OllyDbg: после запуска ищем Binary string (Search for/ Binary string), затем
в ASCII поле вводим название кнопки (меню или саб-меню), жмем F9 и попадаем на код, который потом меняем
аналогично вышесказанному.

[CrackMe #9] Find the correct cd-key for serial
Вот и name/serial запахло. Начало стандартное: вводим левые serial and cd-key, ищем All intermodular calls
и ставим бряк на все вызовы __vbaStrCmp, сработало:

00402CE7 . FF15 44104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaStrCm>; MSVBVM60.__vbaStrCmp

Для пущей наглядности запустим IDA и всковырнем крякмис:

.text:00402CE7 call ds:__vbaStrCmp
.text:00402CED mov edi, eax
.text:00402CEF lea ecx, [ebp-68h]
.text:00402CF2 neg edi
.text:00402CF4 sbb edi, edi
.text:00402CF6 inc edi
.text:00402CF7 neg edi
.text:00402CF9 call ds:__vbaFreeStr
.text:00402CFF mov ebx, ds:__vbaFreeObj
.text:00402D05 lea ecx, [ebp-6Ch]
.text:00402D08 call ebx ; __vbaFreeObj
.text:00402D0A test di, di
.text:00402D0D jz loc_402DC0
.text:00402D13
.text:00402D13 loc_402D13: ; CODE XREF: .text:00402FFBj
.text:00402D13 mov esi, ds:__vbaVarDup
.text:00402D19 mov ecx, 80020004h
.text:00402D1E mov [ebp-0A4h], ecx
.text:00402D24 mov eax, 0Ah
.text:00402D29 mov [ebp-94h], ecx
.text:00402D2F mov edi, 8
.text:00402D34 lea edx, [ebp-0ECh]
.text:00402D3A lea ecx, [ebp-8Ch]
.text:00402D40 mov [ebp-0ACh], eax
.text:00402D46 mov [ebp-9Ch], eax
.text:00402D4C mov dword ptr [ebp-0E4h], offset aError ; "Error"
.text:00402D56 mov [ebp-0ECh], edi

............Лабуда про всякие Errors'ы и Not found'ы..................

.text:00403160 call ds:__vbaHresultCheckObj
.text:00403166
.text:00403166 loc_403166: ; CODE XREF: .text:00403152j
.text:00403166 mov eax, [ebp-68h]
.text:00403169 push eax
.text:0040316A push offset aArcx0d21 ; "Arcx0d21"
.text:0040316F call ds:__vbaStrCmp
.text:00403175 mov edi, eax
.text:00403177 lea ecx, [ebp-68h]
.text:0040317A neg edi
.text:0040317C sbb edi, edi
.text:0040317E neg edi
.text:00403180 neg edi
.text:00403182 call ds:__vbaFreeStr
.text:00403188 lea ecx, [ebp-6Ch]
.text:0040318B call ebx ; __vbaFreeObj
.text:0040318D test di, di
.text:00403190 jnz short loc_4031FD
.text:00403192 mov ecx, [esi]
.text:00403194 push esi
.text:00403195 call dword ptr [ecx+30Ch]
.text:0040319B lea edx, [ebp-6Ch]
.text:0040319E push eax
.text:0040319F push edx
.text:004031A0 call ds:__vbaObjSet
.text:004031A6 mov edi, eax
.text:004031A8 lea ecx, [ebp-68h]
.text:004031AB push ecx
.text:004031AC push edi
.text:004031AD mov eax, [edi]
.text:004031AF call dword ptr [eax+0A0h]
.text:004031B5 test eax, eax
.text:004031B7 fnclex
.text:004031B9 jge short loc_4031CD
.text:004031BB push 0A0h
.text:004031C0 push offset dword_401B40
.text:004031C5 push edi
.text:004031C6 push eax
.text:004031C7 call ds:__vbaHresultCheckObj
.text:004031CD
.text:004031CD loc_4031CD: ; CODE XREF: .text:004031B9j
.text:004031CD mov edx, [ebp-68h]
.text:004031D0 push edx
.text:004031D1 push offset aRntp4v21 ; "rNtp4v21"
.text:004031D6 call ds:__vbaStrCmp
.text:004031DC mov edi, eax
.text:004031DE lea ecx, [ebp-68h]
.text:004031E1 neg edi
.text:004031E3 sbb edi, edi
.text:004031E5 neg edi
.text:004031E7 neg edi
.text:004031E9 call ds:__vbaFreeStr
.text:004031EF lea ecx, [ebp-6Ch]
.text:004031F2 call ebx ; __vbaFreeObj
.text:004031F4 test di, di
.text:004031F7 jz loc_4032AA

Если толково разобраться, то "Arcx0d21" и "rNtp4v21" являются обязательными частями нашего
serial number'a и более того - полностью влезают во 2 и 4 поля ввода крякмиса. Стало быть
они обязательны. А вот 1,3 и 5 поля могут быть забиты чем угодно.
Теперь узнаем процесс генерации cd-key'a. Для этого спустимся ниже по коду до этого места:

.text:004033A6
.text:004033A6 loc_4033A6: ; CODE XREF: .text:00403392j
.text:004033A6 mov eax, [ebp-68h]
.text:004033A9 lea edx, [ebp-7Ch]
.text:004033AC lea ecx, [ebp-54h]
.text:004033AF mov dword ptr [ebp-68h], 0
.text:004033B6 mov [ebp-74h], eax
.text:004033B9 mov [ebp-7Ch], edi
.text:004033BC call ds:__vbaVarMove
.text:004033C2 lea ecx, [ebp-6Ch]
.text:004033C5 call ds:__vbaFreeObj
.text:004033CB mov ebx, ds:__vbaVarCat
.text:004033D1 lea edx, [ebp-0DCh]
.text:004033D7 lea eax, [ebp-34h]
.text:004033DA push edx
.text:004033DB lea ecx, [ebp-7Ch]
.text:004033DE push eax
.text:004033DF push ecx
.text:004033E0 mov dword ptr [ebp-0D4h], offset aFc ; "Fc"
.text:004033EA mov [ebp-0DCh], edi
.text:004033F0 mov dword ptr [ebp-0E4h], offset a3d7 ; "3d7"
.text:004033FA mov [ebp-0ECh], edi
.text:00403400 mov dword ptr [ebp-0F4h], offset aJk21 ; "jk21"
.text:0040340A mov [ebp-0FCh], edi
.text:00403410 mov dword ptr [ebp-104h], offset aFr1a ; "fr1a"
.text:0040341A mov [ebp-10Ch], edi

............. Видно Call'ы, Check result'ы и Поздравления...............

Толково разобравшись в этом, понимаем, что сd-key составляется так:

Fс[поле_1]3d7[поле_3]jk21[поле_5]fr1a

Возьмем в качестве верного примера такое сочетание:

Product serial number: 0000Arcx0d211111rNtp4v212222
CD-Key: Fc00003d71111jk212222fr1a

[CrackMe #10] Register without patching
Этим крякмисом я был немного удивлен - ни полей для ввода, ни NAG-окошка... Что делать?
OllyDbg запущен, ищем All intermodular calls и ставим бряк на все вызовы __vbaStrCmp,
брякаемя и оказываемся здесь:

00401D6C . FF15 3C104000 call dword ptr ds:[<&MSVBVM60.__vbaStrCmp>] ; MSVBVM60.__vbaStrCmp

Регистр ЕАХ в который раз порадовал:

EAX 0014FF8C UNICODE "ramd-remd-rimd-romd-rumd"

Скопируем ramd-remd-rimd-romd-rumd в буфер обмена, запустим крякмис и будет нам счастье.

На этой радостной ноте позвольте откланяться и пообещать, что продолжение следует...

PETR0FF

Источник: http://www.cracklab.ru

Категория: Мои статьи | Добавил: BlackSmoke (25.08.2008)
Просмотров: 4837 | Комментарии: 6 | Рейтинг: 5.0/1 |
Всего комментариев: 2
2 есть бесплатные сайты на юкозе?  
0
отдайте в хорошие руки ася 473980645

1 Maliner  
0
Бывают в жизни огорченья angry
Но это не тот случай sad

Имя *:
Email *:
Код *:
Copyright MyCorp © 2024