<> AAOCG <> AAOCG <> AAOCG <> AAOCG <> AAOCG <> AAOCG <> AAOCG <> AAOCG <> AAOCG <> AAOCG <>

CrackinG Tutorial by Chendler

Prog:
SoftIce
Masm32

Stuff

Crackme v4.0 by Jube^7team

<> AAOCG <> AAOCG <> AAOCG <> AAOCG <> AAOCG <> AAOCG <> AAOCG <> AAOCG <> AAOCG <> AAOCG <>

Wstep:
Crackme jest fajne i pomyslowe. Calkiem niezle zrobione.

<> AAOCG <> AAOCG <> AAOCG <> AAOCG <> AAOCG <> AAOCG <> AAOCG <> AAOCG <> AAOCG <> AAOCG <>

Zaczynamy. Uruchamiamy crackme i miejsce na wpisanie jest zablokowane. Hmm co robimy?
Sa dwie mozliwosci:

1. Jube^7TeaM ustawil na stale parametr ES_READONLY i koniec
2. Jube^7TeaM zrobil tak ze jak wpisze jakis parametr np. crkme4.exe parametr 
wtedy sie odblokuje.

Zastosowanie jest to drugie.
Parametr wpisuje sie w linii [komend] czyli otwieramy wlasciwosci pliku i dopisujjemy.
Ale to crackme nie ma takiej mozliwosci. Trzeba znac parametr uruchomienia pliku. To
do dziela. Wiemy ze pulapka (breakpoint) na linie komend to bpx getcommandlinea.

Bpx GetCommandLineA
i kod:
    |
----x----
mov [004021FB],eax   <= Ciekawe co ot jest? zastaw na bpm 004021FB -
push 0 								    |
push 00401050							    |	
push 0								    |
push 64  ___________________________________________________________|
        |
--------x--------
mov edi,[004021FB]
inc edi
mov al,[edi]
cmp al,22
jz 00401225
inc edi
jmp 0040121C
add edi,02
mov eax,[edi]
add eax,FF989A8E <= Co to? Odwrocmy dzialanie --
jz 0040124D					|
     ___________________________________________|
    |
----x----

Jezeli z tego wyjdzie zero to jest ok. Czyli to co w eax + FF989A8E ma byc zero

<> ODWRACANIE <>
? 0-FF989A8E
00676572 0006776178 "ger"

z tego wychodzi ze w lini komende ma byc reg. Tworzymy skrypt.
Wchodzimy do dosa:

C:\> exit >key.bat

dzieki temu uzyskamy na c:\ plik key.bat
edytuj go i wpisz :

@echo off
crkme4 reg

uruchom go i crackme ma odblokowany EditBox. Zajrzyjmy do About. Podziekowania
itd. czyli to co powinno byc w about. OK.
wpisujemy haslo. Ja wpisalem ChendLer. I zastaw na jakas pulapke.
Hmm nie dziala dlaczego ?. Albowiem program sprawdza jeszcze cos zanim pobierze tekst. 
Hmm? Co on moze sprawdzac. Mi na mysl nic innego nie przychodzi chyba ze dlugosc
hasla. Ok sprawdzmy

bpx GetWindowTextLengthA

i widzimy nastepujacy kod.

add eax,-0C

0C to 12 decymalnie. Czyli password ma 12 znakow.

uzupelniam jeszcze raz ChendLer1234 i zastawiam breakpoint na bpx getwindowtexta
jest zlapal sie i co widzimy:

:00401128 83F800                  cmp eax, 00000000-| Zostalo cos wpisane
:0040112B 744F                    je 0040117C      -| jezeli nie to skok.
:0040112D BFFF214000              mov edi, 004021FF (1)
:00401132 8B07                    mov eax, [edi]    (2)
:00401134 C1C006                  rol eax, 06       (3)
:00401137 35ADDEADDE              xor eax, DEADDEAD (4)
:0040113C 055B3C0030              add eax, 30003C5B (5)
:00401141 7539                    jne 0040117C      (6)
:00401143 83C704                  add edi, 00000004
:00401146 8B07                    mov eax, [edi]
:00401148 C1C807                  ror eax, 07
:0040114B 3588888888              xor eax, 88888888
:00401150 059EADADD1              add eax, D1ADAD9E
:00401155 7525                    jne 0040117C
:00401157 83C704                  add edi, 00000004
:0040115A 8B07                    mov eax, [edi]
:0040115C C1C005                  rol eax, 05
:0040115F 3521433412              xor eax, 12344321
:00401164 057BF0C5C9              add eax, C9C5F07B
:00401169 7511                    jne 0040117C

(1) = Kopiuje wartosc czyli cztery pierwsze znaki z naszego passwordu.
(2) = zostana one skopiowane do eax ale zmienione na wartosc dword
(3) = Zostaja one zrolowane (no ladnie tak kogos wy[rol]owac) z wartoscia 06h
(4) = po wyrolowaniu ich xorujemy z 0DEADDEADh
(5) = dodajemy do nich wartosc 030003C5Bh
(6) = jesli rowne zero to te znaki sa good.

Dobra czas odwrocic. Nie bedziemy robic tego w softice, tylko napiszemy
maly prog (3 kb) w masm ktory zrobi to za nas.

A wiec aby odwrocic :

:00401134 C1C006                  rol eax, 06       
:00401137 35ADDEADDE              xor eax, DEADDEAD 
:0040113C 055B3C0030              add eax, 30003C5B 

to zmieniamy na

mov eax,0h
sub eax,030003C5Bh
xor eax,0DEADDEADh
ror eax,06h

To napiszmy go:
------------------------------------------cut------------------------------------------
;key.asm
;kompilacja ml /c /coff /Cp key.asm
;rc key.rc
;link /SUBSYSTEM:WINDOWS /LIBPATH:d:\masm32\lib key.obj key.res

.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

DlgProc PROTO :DWORD,:DWORD,:DWORD,:DWORD

.data
DlgName db "MyDialog",0

Serial dd 0h,0

.data?
hInstance HINSTANCE ?
CommandLine LPSTR ?
buffer db 512 dup(?)

.const
IDC_BUTTON      equ 3000
IDC_BUTTON1     equ 3001
IDC_EDIT1       equ 101
.code
start:
	invoke GetModuleHandle, NULL
	mov    hInstance,eax
	invoke DialogBoxParam, hInstance, ADDR DlgName,NULL,addr DlgProc,NULL
	invoke ExitProcess,eax

DlgProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
	.IF uMsg==WM_INITDIALOG
		invoke GetDlgItem, hWnd, NULL
		invoke SetFocus,eax
         .ELSEIF uMsg==WM_CLOSE
		invoke EndDialog,hWnd,0	
	.ELSEIF uMsg==WM_COMMAND
		mov eax,wParam
		.IF lParam==0
	.IF ax==IDC_BUTTON			
            nop
.ENDIF
.ELSE
mov edx,wParam
shr edx,16 	
.if dx==BN_CLICKED
 	.IF ax==IDC_BUTTON

operacja1:
mov eax,dword ptr [Serial]
mov eax,0h
sub eax,030003C5Bh
xor eax,0DEADDEADh
ror eax,06h
show:
mov dword ptr [Serial],eax
invoke SetDlgItemText,hWnd,IDC_EDIT1,offset Serial
.ELSEIF ax==IDC_BUTTON1 
invoke EndDialog,hWnd,0

.ENDIF
		.ENDIF
		.ENDIF
	.ELSE
		mov eax,FALSE
		ret
	.ENDIF
	mov eax,TRUE
	ret
DlgProc endp
end start
------------------------------------------cut------------------------------------------
teraz key.rc
------------------------------------------cut------------------------------------------
#include "C:\masm32\bin\resource.h"
#define DIALOG_1	1
#define IDC_BUTTON      3000
#define IDC_BUTTON1     3000
#define IDC_EDIT1	101

MyDialog DIALOG 72, 78, 80, 30
STYLE 0x804L | WS_POPUP | WS_CAPTION
CAPTION "Keygenerator"
FONT 8, "MS Sans Serif"
{
 PUSHBUTTON "Calc", 3000, 4, 18, 33, 10, BS_PUSHBUTTON | NOT WS_TABSTOP
 PUSHBUTTON "Exit", 3001, 44, 18, 33, 10, NOT WS_TABSTOP
 EDITTEXT IDC_EDIT1, 3, 3, 75, 11, WS_BORDER | WS_TABSTOP
}
------------------------------------------cut------------------------------------------
i po skompilowaniu widzimy ze cztery pierwsze znaki to : tHE : 
i tak samo robimy z innym czyli zamiast tej odwroconej procedury piszemy:

operacja2:
mov eax,dword ptr [Serial]
sub eax,0D1ADAD9Eh
xor eax,088888888h
rol eax,07h

a potem

operacja3:
mov eax,dword ptr [Serial]
sub eax,0C9C5F07Bh
xor eax,012344321h
ror eax,05h

laczymy haslo i mamy tHE Summer !
wpisujemy i to koniec.

Zdrowko
Chendler
chendler19@poczta.onet.pl

<> AAOCG <> AAOCG <> AAOCG <> AAOCG <> AAOCG <> AAOCG <> AAOCG <> AAOCG <> AAOCG <> AAOCG <>
