Тема: Solutions
Показать сообщение отдельно

First CrackMe by ProTeuS
  #4  
Старый 09.01.2007, 23:53
taha
Постоянный
Регистрация: 20.08.2006
Сообщений: 327
С нами: 10381346

Репутация: 1077
По умолчанию First CrackMe by ProTeuS


CrackMe: First CrackMe by ProTeuS
Цель: найти верный пароль
Сложность: средне
link: http://www.forum.antichat.ru
Решение:

Запускаем, вводим чтонить!
Брякаемся по 004578AE.

Код:
004578AE     21             DB 21                                    ;  CHAR '!'
004578AF     A7             DB A7
004578B0     CD FE          INT 0FE
004578B2     0D             DB 0D
Первый вывод - зашифрованная функция. Следовательно в стеке должен лежать
адрес возврата (помимо SEH-обработчика). Смотрим в стек. Так оно и есть)).

Код:
0012F920   004579C5  RETURN to CrackMe.004579C5
Идём по адресу!!

Код:
004579B7   . 64:FF30        PUSH DWORD PTR FS:[EAX]
004579BA   . 64:8920        MOV DWORD PTR FS:[EAX],ESP
004579BD   . 8D05 AC784500  LEA EAX,DWORD PTR DS:[4578AC]
004579C3   . FFD0           CALL EAX	; <- Вот вызов криптованной функции
004579C5   . 33C0           XOR EAX,EAX
004579C7   . 5A             POP EDX
Поднимимся выше. Видим интересные функции.

Код:
0045796C   . E8 3FE5FAFF    CALL <JMP.&kernel32.GetCurrentProcess>   ; |[GetCurrentProcess
00457971   . 50             PUSH EAX                                 ; |hProcess
00457972   . E8 51E6FAFF    CALL <JMP.&kernel32.ReadProcessMemory>   ; \ReadProcessMemory
...
004579A0   . E8 8BE6FAFF    CALL <JMP.&kernel32.WriteProcessMemory>  ; \WriteProcessMemory
Начало функции в которую мы попали:

Код:
0045793C   . 55             PUSH EBP
0045793D   . 8BEC           MOV EBP,ESP
0045793F   . 83C4 F0        ADD ESP,-10
00457942   . 53             PUSH EBX
00457943   . 56             PUSH ESI
Ctrl-F2(перезапускаемся). Ctrl-G > 0045793C. Ставим бряк. F9.

Вводим чтонить. И брякаемся. Дальше трейсим.

Код:
0012F5F8   00457977  /CALL to ReadProcessMemory from CrackMe.00457972
0012F5FC   FFFFFFFF  |hProcess = FFFFFFFF
0012F600   004578AC  |pBaseAddress = 4578AC
0012F604   0045AC03  |Buffer = CrackMe.0045AC03
0012F608   00000001  |BytesToRead = 1
0012F60C   0012F61C  \pBytesRead = 0012F61C
4578AC - не далеко от адреса по которому упала прога. Истина гдето рядом))

Код:
0045798D   . 3013           XOR BYTE PTR DS:[EBX],DL
____________________________________
DL=01
DS:[0045AC03]=99
Настоящее начало криптованной функции. В 90% случаях функции начинаются
с push ebp. Алго криптования нам известен)). 99 xor 55 = 0CCh = 204d

Пасс: 204
 
Ответить с цитированием