Jak zama CrackMe 3.0 by Cyberdemon? by Marcus

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

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

:004011C9 6A14                    push 00000014
:004011CB 6825304000              push 00403025               ; (1)
:004011D0 FF3510324000            push dword ptr [00403210]

* Reference To: user32.GetWindowTextA, Ord:014Ah
:004011D6 E8B7000000              Call 00401292
:004011DB 33F6                    xor esi, esi
:004011DD BE25304000              mov esi, 00403025               ; (2)
:004011E2 B912000000              mov ecx, 00000012               ; (3)
:004011E7 F616                    not byte ptr [esi]              ; (4)
:004011E9 46                      inc esi
:004011EA E2FB                    loop 004011E7
:004011EC BE25304000              mov esi, 00403025               ; (5)
:004011F1 B912000000              mov ecx, 00000012               ; (6)
:004011F6 802E20                  sub byte ptr [esi], 20          ; (7)
:004011F9 46                      inc esi
:004011FA E2FA                    loop 004011F6
:004011FC BE25304000              mov esi, 00403025               ; (8)
:00401201 B912000000              mov ecx, 00000012               ; (9)
:00401206 803620                  xor byte ptr [esi], 20          ; (10)
:00401209 46                      inc esi
:0040120A E2FA                    loop 00401206
:0040120C BE25304000              mov esi, 00403025               ; (11)
:00401211 B912000000              mov ecx, 00000012               ; (12)
:00401216 800620                  add byte ptr [esi], 20          ; (13)
:00401219 46                      inc esi
:0040121A E2FA                    loop 00401216
:0040121C BE25304000              mov esi, 00403025               ; (14)
:00401221 B912000000              mov ecx, 00000012               ; (15)
:00401226 33FF                    xor edi, edi
:00401228 8AA7FA314000            mov ah, byte ptr [edi+004031FA] ; (16)
:0040122E 3026                    xor byte ptr [esi], ah          ; (17)
:00401230 751C                    jne 0040124E                    ; (18)
:00401232 46                      inc esi
:00401233 47                      inc edi
:00401234 E2F2                    loop 00401228

1. Tutaj lduje nasze haso.
2. Zaadowanie do esi adresu, pod ktrym znajduje si haso.
3. Zaadowanie do ecx 12h=18, dugo hasa.
4. Negacja logiczna kadej litery.
5. Zaadowanie do esi adresu, pod ktrym znajduje si haso.
6. Zaadowanie do ecx 12h=18.
7. Odjcie od kadej litery 20h=32.
8. Zaadowanie do esi adresu, pod ktrym znajduje si haso.
9. Zaadowanie do ecx 12h=18.
10. XOR`owanie kadej litery z 20h=32.
11. Zaadowanie do esi adresu, pod ktrym znajduje si haso.
12. Zaadowanie do ecx 12h=18.
13. Dodanie do kadej litery 20h=32.
14. Zaadowanie do esi adresu, pod ktrym znajduje si haso.
15. Zaadowanie do ecx 12h=18.
16. Zaadowanie do ah pierwszego znaku prawidowego hasa.
17. XOR`owanie naszego pierwszego znaku z ah.
18. Jeeli nie wyszo zero to haso jest ze, wic bye, bye.

Aby otrzyma prawidowe haso trzeba z tym poprawnym zrobi to samo co crackme robi z naszym. 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 3.0 by Cyberdemon",0
wartosc  db 220,109,126,124,116,118,113,120,191,118,113,
            191,207,112,115,126,113,123,0

.data?
wynik    db 20 dup(?)

.code
start:
 push esi
 push ecx
 mov ecx,18
 xor esi,esi
 @Czynnosc1:
 mov al,byte ptr [wartosc]+esi
 not al
 sub al,32
 xor al,32
 add al,32
 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