Jak zama CrackMe 2.0 by Cyberdemon? by Marcus

Co bdzie potrzebne:
- SoftIce
- oczywicie CrackMe 2.0 by Cyberdemon
- i MASM jeeli chcesz ujrze haso

Na pocztek piszemy w SI "bpx na GetWindowTextA" i otrzymujemy co takiego:

004011C9 6A14                push 00000014
004011CB 6825304000          push 00403025                    ; (1)
004011D0 FF35E5314000        push dword ptr [004031E5]

  * Reference To: user32.GetWindowTextA, Ord:014Ah

004011D6 E89F000000          Call 0040127A
004011DB 33F6                xor esi, esi
004011DD BE25304000          mov esi, 00403025                ; (2)
004011E2 B90C000000          mov ecx, 0000000C                ; (3)
004011E7 56                  push esi                         ; (4) 
004011E8 49                  dec ecx
004011E9 D006                rol byte ptr [esi], 1            ; (5) 
004011EB 46                  inc esi
004011EC 83F900              cmp ecx, 00000000
004011EF 75F7                jne 004011E8                     ; (6)
004011F1 B90C000000          mov ecx, 0000000C                ; (7)
004011F6 5E                  pop esi                          ; (8)
004011F7 56                  push esi                         ; (9)
004011F8 803620              xor byte ptr [esi], 20           ; (10)
004011FB 46                  inc esi
004011FC 49                  dec ecx
004011FD 83F900              cmp ecx, 00000000
00401200 75F6                jne 004011F8                     ; (11)
00401202 B90C000000          mov ecx, 0000000C                ; (12)
00401207 33FF                xor edi, edi
00401209 5E                  pop esi                          ; (13)
0040120A 46                  inc esi
0040120B 47                  inc edi                        
0040120C 8A46FF              mov al, byte ptr [esi-01]      
0040120F 3A873D304000        cmp al, byte ptr [edi+0040303D]  ; (14)
00401215 751F                jne 00401236
00401217 83FF0C              cmp edi, 0000000C
0040121A 7402                je 0040121E                      ; (15)
0040121C EBEC                jmp 0040120A

1. Tutaj lduje nasze haso.
2. Zaadowanie do esi adresu, pod ktrym znajduje si nasze haso.
3. Do ecx adowana liczba znakw do ROL`owania.
4. Odoenie adresu na stos.
5. ROL`owanie kadej litery naszego hasa z 1.
6. Jeeli nie zROL`owano 12 znakw to skok.
7. Do ecx adowana liczba znakw do XOR`owania.
8. Pobranie adresu ze stosu.
9. Znowu odoenie adresu na stos.
10. Teraz XOR`owanie kadej litery z 20h=32.
11. Jeeli nie zXOR`owano 12 znakw to skok.
12. Do ecx adowana liczba znakw do porwnania.
13. Znowu pobranie adresu ze stosu.
14. Porwnywanie naszego hasa z poprawnym.
15. Jeeli wszystko dobrze to wywietli MessageBox`a.

Wskazwka:

Jeeli jaki znak jest ROL`owany to, aby otrzyma ten znak przed ROL`owaniem naley uy funkcji ROR z takimi samymi parametrami jak ROL, np.

4 ROL 1 = 8
8 ROR 1 = 4

Aby otrzyma prawidowe haso trzeba je najpierw odXOR`owa, a nastpnie odROL`owa uywajc funkcji ROR. Oto kod:

.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

.data
Tyt      db "BruteForce dla CrackMe 2.0 by Cyberdemon",0
wartosc  db 166,196,226,230,246,234,196,96,132,202,248,234,0

.data?
wynik    db 15 dup(?)

.code
start:
 push esi
 push ecx
 xor esi,esi
 mov ecx,12
 @Czynnosc1:
 mov al,byte ptr [wartosc]+esi
 xor al,32
 ror al,1
 mov byte ptr [wynik]+esi,al
 inc esi
 loop @Czynnosc1
 pop ecx
 pop esi
 invoke MessageBox,0,offset wynik,offset Tyt,MB_OK + MB_ICONINFORMATION
end start