![]() |
eXeL@B —› Вопросы новичков —› fant-cm5 обходим защиту 4 Protection. Password, Nag, CD Check, Name/Serial |
Посл.ответ | Сообщение |
|
Создано: 31 мая 2011 23:36 · Поправил: BiosMen · Личное сообщение · #1 Стаття создана суто для новачков таких как я, это нароботка умений за 7 дней, ну и что научилса то и пишу, может кому то пригодится таким как я). Вот файл Использовал: 1) Ollydbg 2) IDA Pro Advanced Заходим в Protection (в окне FaNt0m's, пока что не запускаем под Ollydbg) там первая защита Password, просит ввести пароль. Эсли вводиш не верный пароль выводит "Nope, try again!". Первое что делаем запускаем Ollydbg, и Open executable file... или F3, загрузилса CRACKME5, и ми стаим на входе в программу CPU Disasm Address Hex dump Command Comments 00401000 /. 6A 00 PUSH 0 ; /ModuleName = NULL что мы делаем дале, сначала нам нужно поставить бряк, но куда?, использую вариант поиска ANCII строки с нашым ответом на наш неверный пароль "Nope, try again!". В проге Olledbg в окне CPU нажымаем правой клавишей мышы открываем меню и выбираем Go to -> Expression... и в окне вводим 00401397 Откуда мы узнали что надо вводить 00401397, для поиска каких то ANSII удобно использовать IDA Pro Advanced. Загружаем туда наш CRACKME5, дале нажымаем ОК, видим наш дезесемблированый ехе жмем праву кномку мыше и выберем Text view, видем адреса, и дезесемблрованый код, дале жмем поиск текста, иконка вид бинокля с литерой А, или Alt+T, в поле String вводим Nope, try again!, и мы попадаем в это .text:00401397 push offset Text ; "Nope, try again!" от это .text:00401397 адрес куда пишетца наш "Nope, try again!", мы копируем наш адрес 00401397 и вставлям в Olly так как я выше описал. Нас кидает CPU Disasm Address Hex dump Command Comments 00401397 |. 68 E9304000 PUSH OFFSET 004030E9 ; |Text = "Nope, try again!" на эту строку, смотрим дале, CPU Disasm Address Hex dump Command Comments 00401390 |. 6A 30 PUSH 30 ; /Type = MB_OK|MB_ICONEXCLAMATION|MB_DEFBUTTON1|MB_APPLMODAL 00401392 |. 68 B2304000 PUSH OFFSET 004030B2 ; |Caption = "Password Check" 00401397 |. 68 E9304000 PUSH OFFSET 004030E9 ; |Text = "Nope, try again!" 0040139C |. 6A 00 PUSH 0 ; |hOwner = NULL 0040139E |. E8 C7030000 CALL <JMP.&USER32.MessageBoxA> ; \USER32.MessageBoxA что у нас здесь эсть, ми видем передачу параметров в MessageBoxA, немного внизу у нас эсть ищо кусок CPU Disasm Address Hex dump Command Comments 004013A5 |> \6A 40 PUSH 40 ; /Type = MB_OK|MB_ICONASTERISK|MB_DEFBUTTON1|MB_APPLMODAL 004013A7 |. 68 B2304000 PUSH OFFSET 004030B2 ; |Caption = "Password Check" 004013AC |. 68 C1304000 PUSH OFFSET 004030C1 ; |Text = "Good job, you got the correct password!" 004013B1 |. 6A 00 PUSH 0 ; |hOwner = NULL 004013B3 |. E8 B2030000 CALL <JMP.&USER32.MessageBoxA> ; \USER32.MessageBoxA Это тот кусок который нам нужно чтоб он нам вывелса на екран. Ищем как ми переходим сюда, и тыкаем по строках от низу MessageBoxA к верху и смотрим что когда мы попалы на CPU Disasm Address Hex dump Command Comments 004013A5 |> \6A 40 PUSH 40 ; /Type = MB_OK|MB_ICONASTERISK|MB_DEFBUTTON1|MB_APPLMODAL то у нас появилася стрелка сверху вныз в 2-гом столбце. CPU Disasm Address Hex dump Command Comments 0040138E |. /74 15 JE SHORT 004013A5 В справочнику по Асму смотрим что JNE срабатывает лиш тогда когда в JZ/JE нуль или равно ZF=1, крутим вгору смотрим что же устанавливает флаг ZF=1 Вот кусок проверки пароля CPU Disasm Address Hex dump Command Comments 0040133E |> \68 00010000 PUSH 100 ; /MaxCount = 256. 00401343 |. 68 B8334000 PUSH OFFSET 004033B8 ; |String = "1234" 00401348 |. 68 E8030000 PUSH 3E8 ; |ItemID = 1000. 0040134D |. FF35 B8344000 PUSH DWORD PTR DS:[4034B8] ; |hDialog = 0039048A, class = #32770, text = Password Protection 00401353 |. E8 F4030000 CALL <JMP.&USER32.GetDlgItemTextA> ; \USER32.GetDlgItemTextA 00401358 |. 68 B8334000 PUSH OFFSET 004033B8 ; /String2 = "1234" 0040135D |. 68 A2304000 PUSH OFFSET 004030A2 ; |String1 = "JD39-CK4-5QV345" 00401362 |. E8 51040000 CALL <JMP.&KERNEL32.lstrcmpA> ; \KERNEL32.lstrcmpA 00401367 |. 50 PUSH EAX 00401368 |. 6A 00 PUSH 0 0040136A |. 83F0 40 XOR EAX,00000040 0040136D |. 66:83E0 10 AND AX,0010 00401371 |. C1E8 0D SHR EAX,0D 00401374 |. C1E0 03 SHL EAX,3 00401377 |. 58 POP EAX 00401378 |. 83F8 00 CMP EAX,0 0040137B |. 75 28 JNE SHORT 004013A5 0040137D |. 83F0 40 XOR EAX,00000040 00401380 |. C1E8 0D SHR EAX,0D 00401383 |. 66:83E0 10 AND AX,0010 00401387 |. C1E0 03 SHL EAX,3 0040138A |. 58 POP EAX 0040138B |. 83F8 00 CMP EAX,0 0040138E |. 74 15 JE SHORT 004013A5 С этого куска сразу видно какой пароль, мы вводили и с каким он сравниваеца, 00401358 |. 68 B8334000 PUSH OFFSET 004033B8 ; /String2 = "1234" ; вводили 0040135D |. 68 A2304000 PUSH OFFSET 004030A2 ; |String1 = "JD39-CK4-5QV345" ; с каким сравниваеца. Дале идьот функцыя сравнение строк strcmpA, котороя помещает даные в 00401367 |. 50 PUSH EAX 0040136A |. 83F0 40 XOR EAX,00000040 - XOR работает так эсли ХОР JD39-CK4-5QV345,JD39-CK4-5QV345 било б так тогда получилось б 0, можете провереть в калькуляторе введите 10 ХОР 10 получите 0, два разных дадут 1, вот табличка посмотрите на 00401378 |. 83F8 00 CMP EAX,0 CMP сравнивает EAX с 0 эсли не равно тогда 0 а эсли равно тогда 1 Поетому когда ХОР даст Z= 0, а СМР даст Z = 1, ми перейдем с CPU Disasm Address Hex dump Command Comments 0040138E |. /74 15 JE SHORT 004013A5 на CPU Disasm Address Hex dump Command Comments 004013A5 |> \6A 40 PUSH 40 ; /Type = MB_OK|MB_ICONASTERISK|MB_DEFBUTTON1|MB_APPLMODAL 004013A7 |. 68 B2304000 PUSH OFFSET 004030B2 ; |Caption = "Password Check" 004013AC |. 68 C1304000 PUSH OFFSET 004030C1 ; |Text = "Good job, you got the correct password!" 004013B1 |. 6A 00 PUSH 0 ; |hOwner = NULL 004013B3 |. E8 B2030000 CALL <JMP.&USER32.MessageBoxA> ; \USER32.MessageBoxA Пароль как видили выше 0040135D |. 68 A2304000 PUSH OFFSET 004030A2 ; |String1 = "JD39-CK4-5QV345" ; Продолжение следует.... РS: ошыпки поправте, с рускским у меня плохо, не грамотной... =( Это первая стаття, сильно не ругайте. Как и обещал продолжение... Обход Nag nag. В статтях которых вы прочлы описывалось как обойти Nag nag, но я попытаюсь обяснить как то посвойом что там и как. В меню Protection -> Nag, нажали и чотко видем Nag Nag Nag Remove this message box! Nag nag nag Тепер будем искать Remove this message box!, забиваем в IDA Pro Advanced, или "Search for" и там "All referenced text strings" как нам подсказал L0ST, и видим в IDA Pro Advanced .text:00401424 ; =============== S U B R O U T I N E ======================================= .text:00401424 .text:00401424 .text:00401424 sub_401424 proc near ; CODE XREF: sub_401110:loc_4011C8p .text:00401424 push 30h ; uType .text:00401426 push offset aRemoveMe ; "Remove me!" .text:0040142B push offset aNagNagNagRemov ; "Nag Nag Nag\n\rRemove this message box!\n\r"... .text:00401430 push 0 ; hWnd .text:00401432 call MessageBoxA .text:00401437 retn .text:00401437 sub_401424 endp .text:00401437 .text:00401438 так выглядит в Ollydbg Address = 0040142B Command = PUSH OFFSET 00403155 Comments = ASCII "Nag Nag Nag Remove this message box! Nag Nag Nag" Переходим на этот адрес и ставим бряк на CPU Disasm Address Hex dump Command Comments 00401424 /$ 6A 30 PUSH 30 ; /Type = MB_OK|MB_ICONEXCLAMATION|MB_DEFBUTTON1|MB_APPLMODAL Почему на PUSH, потомушто окно основное посылает сюда даные Type = MB_OK|MB_ICONEXCLAMATION|MB_DEFBUTTON1| типа была нажата кнопка, смотрим дале какая процедура ссылается сюда. Просто узнавать без трасировки можно с помощу IDA Pro Advanced, в этой строки .text:00401424 sub_401424 proc near ; CODE XREF: sub_401110:loc_4011C8p мы видем сылку на процедуру loc_4011C8p, кликаем 2 разы и переходим немного выше, опускаем чуть глаза и видем САLL .text:004011C8 loc_4011C8: ; CODE XREF: sub_401110+57j .text:004011C8 call sub_401424 смотрим деле что нас на этот call sub_401424 бросает, заходим в Олли переходим в Олли на этот call sub_401424, подсвечиваем мышей, тобеж надо раз нажать на нево, видим что в втором столбце видно откуда идьот линия от джампа поднимаемса по ней и попадаем на ![]() |
|
Создано: 31 мая 2011 23:41 · Личное сообщение · #2 |
|
Создано: 01 июня 2011 00:16 · Личное сообщение · #3 Пока ничего интересного, почти тоже самое, но нормальным языком можно прочитать в "Введение в крэкинг с нуля, используя OllyDbg" Ricardo Narvaja "Глава 13 - Поиск жестко заданного серийного номера. Часть 1." Кстати, для поиска текстовой строки вовсе не обязательно использовать IDA, потому что в OllyDbg такое есть, называется "Text strings referenced in", вызывается так: правая кнопка мыши, потом "Search for" и там "All referenced text strings" Ценность твоей "статьи" очень сомнительна, таких статей для новичков полно, тем более твой текст тяжело читать. Ты написал о том, как за неделю научился искать серийник в открытом виде, но это никому не интересно. Многие учились с нуля, когда я впервые увидел дизасм код, пришёл в сильное волнение, но не стал кричать об этом, потому что всем понятно, что разжёвывать и пережёвывать такие простейшие вещи это не серьёзно. ![]() |
|
Создано: 01 июня 2011 09:53 · Личное сообщение · #4 |
|
Создано: 01 июня 2011 11:18 · Поправил: Gideon Vi · Личное сообщение · #5 L0ST, ТС открыл для себя что-то интересное. Хочет - пусть пишет, просто мимо пройди. ошыпки поправте, с рускским у меня плохо, не грамотной... word спасет отца русской демократии ![]() |
|
Создано: 01 июня 2011 13:49 · Личное сообщение · #6 у меня вытекли глаза ![]() ТС молодец, продолжай изучение, достигай новых высот и старайся писать с меньшим количеством ошибок))) ![]() |
|
Создано: 01 июня 2011 21:34 · Личное сообщение · #7 |
|
Создано: 02 июня 2011 00:30 · Личное сообщение · #8 CPU Disasm Address Hex dump Command Comments 00401167 /74 5F JE SHORT 004011C8 Тепер просто берьом и пишем NOP, вместо этого JE SHORT 004011C8. Больше нет Nag Nag окна. Когда писал эту статтю то подумал прикольно было б вместо Nag Nag вывести пароль "JD39-CK4-5QV345" с первой статти, Тут все просто, отменяем наш Nop рестартом проги забираем все бряки, дале ищем стороку пароля 0040135D |. 68 A2304000 PUSH OFFSET 004030A2 ; |String1 = "JD39-CK4-5QV345" ; копируем PUSH OFFSET 004030A2 и вставляем вместо offsetа от сюда. .text:0040142B push offset aNagNagNagRemov ; "Nag Nag Nag\n\rRemove this message box!\n Хе =) и тепер видим пароль. Продолжение следует... ![]() |
|
Создано: 02 июня 2011 00:31 · Личное сообщение · #9 |
|
Создано: 02 июня 2011 09:33 · Личное сообщение · #10 |
|
Создано: 02 июня 2011 13:47 · Личное сообщение · #11 |
![]() |
eXeL@B —› Вопросы новичков —› fant-cm5 обходим защиту 4 Protection. Password, Nag, CD Check, Name/Serial |