Ковыряем Fantom crack_me №5
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Ковыряем Fantom crack_me №5 - 2011-07-26 13:36:26.583333
|
|
|
Крутой 0ль !
Сообщений: 150
Оценки: 10
Присоединился: 2010-12-02 19:33:25.666666
|
Сегодня будем ковыряЦа в crack_me №5 Fantom .Из себя он представляет совокупность из 4 ,довольно таки простых и ранообразных заданий . 1.Это ввод регистрационного ключа 2.Окошко с нагами 3.Проверка CD-check 4.Ввод логин-пароль Задание 1.Решаем задачу по нахождению пароля .Запускаем наш крякмис под ollydb , нажимаем правую кнопку мыши и выбираем Search for/all referenced string .В открывшемся окошке мы получаем все используемые в программе строки .Потратив несколько секунд на анализ , можно понять , что пароль висит как используемая строка .Вот и всё , 1-ое задание мы одолели .Но хочу заметить , что иногда в программах , нас намеренно путают , 'вталкивая' в используемые строки сотни неправильных ключей .В этом случаи метод перебора конечно же отпадает .Так как в реальных программах такое редко встретишь , то можно зарегистрировать программу не имея ключа.Находим вызов мессаджей о успешной регистрации , смотрим выше CPU Disasm
Address Hex dump Command Comments
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
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> ; Jump to USER32.MessageBoxA
004013A3 |. EB 15 JMP SHORT 004013BA
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
004013B8 |. EB 00 JMP SHORT 004013BA Первые строки соответствуют - mov eax,0 .Далее видим ЧТО ИЗ СТЕКА командой pop eax восстанавливаются данные которые занесены в стек , т.е значение регистра EAX = 0 .Команда условного перехода JE , делает переход , если регистр флага ZF = 1 . Узнаём начение регистра флага до строчки условного перехода , у нас он равен 0 , т.е переход JE не отработает .При ZF=0 работает условный переход JNE. Меняем команду JE на JNE.Вот и всё Задание 2.Так же находим в окошке [all referenced string] строчку с словам nag nag , вообщем понятно .Два раза клацаем по ней и мы перемещаемся в головное окно ollydbg , переводим курсор на первую строку функции , которая если я не ошибаюсь заносит в стек данные для вызова API-функции .Ставим на неё бряк и два раза нажимаем F9 .После того как мы нажали OK в появившемся окошке , мы должны клацать , клацать по F8 (если опять же я не ошибаюсь , то это называется трассировкой) .Таким способом , у нас появляется окошко с нагами , и строчка на которой произошёл вызов и является нашей целью .В нашем случаи это DlgBox , нам напротив , надо что бы этого вызова не происходило .Мы просто занупим это дело командой NOP , в простонародье битхак .Команда NOP означает - ничего не делать и применяется в паре , т.е [NOP] [NOP]. В ollydbg это можно проделать двумя , ручным редактированием , либо выделяем нужную нам строку и нажатием правой кнопки мыши выбираем {edit/fill with NOP's}.С нагами дело поконченно ! Задание 3.Проверка cd_check.И снова обращаемся в окно используемых стрингов .Находим строчку типа - CDROM not found и переходим по этой строчке .Перед нами предстаёт такая вот картина : CPU Disasm
Address Hex dump Command Comments
00401447 3C 02 CMP AL,2
00401449 |. 75 1C JNE SHORT 00401467
0040144B 80FC 01 CMP AH,1
0040144E 74 02 JE SHORT 00401452
00401450 EB 15 JMP SHORT 00401467
00401452 |> 6A 40 PUSH 40 ; Type =
MB_OK|MB_ICONASTERISK|MB_DEFBUTTON1|MB_APPLMODAL
00401454 |. 68 88314000 PUSH OFFSET 00403188 ; Caption = "CD Check"
00401459 |. 68 91314000 PUSH OFFSET 00403191 ; Text = "CDROM found!"
0040145E |. 6A 00 PUSH 0 ; hOwner = NULL
00401460 |. E8 05030000 CALL <JMP.&USER32.MessageBoxA> ; Jump to USER32.MessageBoxA
00401465 |. EB 15 JMP SHORT 0040147C
00401467 |> 6A 30 PUSH 30 ; /Type =
MB_OK|MB_ICONEXCLAMATION|MB_DEFBUTTON1|MB_APPLMODAL
00401469 |. 68 88314000 PUSH OFFSET 00403188 ; |Caption = "CD Check"
0040146E |. 68 9E314000 PUSH OFFSET 0040319E ; |Text = "CDROM Not found!"
00401473 |. 6A 00 PUSH 0 ; |hOwner = NULL
00401475 |. E8 F0020000 CALL <JMP.&USER32.MessageBoxA> ; \USER32.MessageBoxA Анализируем код и видим , что адрес 00401467 , это адрес сообщения о ошибке CDROM'a .А во второй строчке , как раз и идёт условный переход на вызов окна об ошибке .Команда JNE - переходит , если регистр флага ZF равен 0 .Значение всех регистров можно просмотреть в специально отведёном окошке , в правом верхнем углу .Можно догадаться , что команда [cmp al,2] заведомо ложна , т.е регистр al не равен двум и это просто способ совершить переход.Это мы решим простым редактированием .Два раза жмакаем на строчку условного перехода jne и удаляем букву 'N' у 'JNE' , получаем команду [JE SHORT 00401467] .Теперь у нас переход если , значение регистра AL = 2 , а как мы поняли они не равны , то и перехода на ошибку не будет . Задание 4.Мы его рассматривать не будем , т.к оно идентично примеру описанному в предыдущей статье .
|
|
|
RE: Ковыряем Fantom crack_me №5 - 2011-07-26 20:05:07.186666
|
|
|
fromRIDDER
Сообщений: 1075
Оценки: 30
Присоединился: 2008-01-14 20:20:53.380000
|
Оформление довольно не плохо по сравнению с предыдущими статьями, так держать. Один момент: после слова сразу, без пробела, ставится знак препинания, а после ставится пробел; у тебя наоборот.
|
|
|
RE: Ковыряем Fantom crack_me №5 - 2011-07-26 20:41:06.936666
|
|
|
Крутой 0ль !
Сообщений: 150
Оценки: 10
Присоединился: 2010-12-02 19:33:25.666666
|
спс, будем стремится к совершенству ;)
|
|
|
RE: Ковыряем Fantom crack_me №5 - 2011-07-26 21:43:54.960000
|
|
|
Alianna
Сообщений: 1922
Оценки: 356
Присоединился: 2010-03-02 11:27:12.343333
|
quote:
00401367 |. 50 PUSH EAX 00401368 |. 6A 00 PUSH 0 quote:
Первые строки соответствуют - mov eax,0 Разве? quote:
Далее видим ЧТО ИЗ СТЕКА командой popad Чето я в приведенном куске popad не вижу. quote:
переход на адрес 004013A5 , а это адрес месседжбокса о неверном пассворде quote:
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 004013B8 |. EB 00 JMP SHORT 004013BA По-моему, это как раз правильный. Вы уверены что вставили тот кусок кода? А то чет описание его расходится с самим кодом.
|
|
|
RE: Ковыряем Fantom crack_me №5 - 2011-07-26 22:04:59.473333
|
|
|
Крутой 0ль !
Сообщений: 150
Оценки: 10
Присоединился: 2010-12-02 19:33:25.666666
|
спс что заметили ;) а про quote:
00401367 |. 50 PUSH EAX 00401368 |. 6A 00 PUSH 0 Первые строки соответствуют - mov eax,0 Калашников врёт ? :)
|
|
|
RE: Ковыряем Fantom crack_me №5 - 2011-07-26 22:14:57.463333
|
|
|
Alianna
Сообщений: 1922
Оценки: 356
Присоединился: 2010-03-02 11:27:12.343333
|
Эмм. Два идущих подряд пуша помещают в стек значение еах и 0. Я так понимаю, для обфускации. Смотрите: 00401367 |. 50 PUSH EAX ; сохраняем в стеке исходное значение еах
00401368 |. 6A 00 PUSH 0 ; заталкиваем в стек 0
; ... мусорный код ...
00401377 |. 58 POP EAX ; а вот это в паре с push 0 как раз таки эквивалентно mov eax,0.
00401378 |. 83F8 00 CMP EAX,0
0040137B |. 75 28 JNE SHORT 004013A5 ; в еах 0, переход никогда не выполнится
; ... опять мусор ...
0040138A |. 58 POP EAX ; восстанавливаем исходное значение еах
0040138B |. 83F8 00 CMP EAX,0 ; и если оно было равным нулю
0040138E 74 15 JE SHORT 004013A5 ; совершаем переход Таким образом, push 0 и pop eax делают то же самое, что mov eax,0. А не push eax и push 0. quote:
Калашников врёт ? :) Не знаю. Может быть. А может быть, вы его не совсем правильно поняли))
|
|
|
RE: Ковыряем Fantom crack_me №5 - 2011-07-26 22:24:26.170000
|
|
|
Крутой 0ль !
Сообщений: 150
Оценки: 10
Присоединился: 2010-12-02 19:33:25.666666
|
очь благодарен.завтра надо в книжечку то заглянуть , как сейчас помню тот раздел про стек ….
|
|
|
RE: Ковыряем Fantom crack_me №5 - 2011-07-26 22:26:02.063333
|
|
|
Apathy^^
Сообщений: 96
Оценки: 10
Присоединился: 2011-07-01 17:14:09.226666
|
оформление достойное=) ps возможно прислушаетесь - в следующий раз наверное стоит выделять адреса,операции ну и возможно делать больше абзацев хотя и так норм
|
|
|
RE: Ковыряем Fantom crack_me №5 - 2011-07-26 22:35:36.010000
|
|
|
Alianna
Сообщений: 1922
Оценки: 356
Присоединился: 2010-03-02 11:27:12.343333
|
А, еще. quote:
у нас он равен 0 , т.е переход JE не отработает .При ZF=0 работает условный переход JNE. Меняем команду JE на JNE.Вот и всё А если мы случайно угадаем пароль (возможность близка к нулю, но все же)? Имхо лучше на jmp заменить, чтоб срабатывал в любых условиях.
|
|
|
RE: Ковыряем Fantom crack_me №5 - 2011-07-26 22:42:12.986666
|
|
|
Крутой 0ль !
Сообщений: 150
Оценки: 10
Присоединился: 2010-12-02 19:33:25.666666
|
Ну это ориентироваться по ситуации , не более .
|
|
|
RE: Ковыряем Fantom crack_me №5 - 2011-07-26 22:52:41.906666
|
|
|
Alianna
Сообщений: 1922
Оценки: 356
Присоединился: 2010-03-02 11:27:12.343333
|
Но всегда лучше стремиться к более универсальному решению ;)
|
|
|
|
|