____________________________________________________________________________________                                                          
                    _________\          |            __________  
                   /          \      __-+-  __      |         /\ 
                  /___________/     /'( |_  )`\     |________/  \
                 |   \       /     / . \/^\/ . \            /   /
                  \   \           /  _)_`-'_(_  \          /   / 
                   \   \         /.-~   ).(   ~-.\        /   /  
                    \   \       /'     /\_/\     `\      /   /   
                     \  /     __  ___  " __"  __  _ _  \/   /    
                      \/     / _)(  ,)  (  ) / _)( ) )  \__/_    
                            ( (_  )  \  /()\( (_  )  \           
                             \__)(_)\_)(_)(_)\__)(_)\_)          
                                ___             __               
                               (  ,\o l a n d  (  )              
                                ) _/ cRACKING   )(__             
                               (_)      gROUP  (____)            
                                    ____     /\                  
                                   /  \     /  \                 
                                  /\   \   /   /                 
                                    \   \ /   /                  
                                     \___\___/                   
_______________________________________________________________________________________

                                CrackPl prezentuje 
			McKiler's Beginner Tut #1 (WinZip 7.0 SR-1)
_______________________________________________________________________________________

Cel: WinZip 7.0
Skad: http://www.winzip.com, prawie kazda plyta shareware
Rozmiar: 943KB
Czym: SoftIce 3.20
--------------------------------------------------------------------------------------
Wstep:
WinZip 7.0 jest najpopularniejszym i chyba najlepszym programem do obslugi archiwow
zip. Wygodne pakowanie i rozpakowywanie, obsluga archiwow cab, menu kontekstowe
umozliwiajace spakowanie rozpakowanie kazdego pliku/katalogu bez koniecznosci
wchodzenia do archiwum. Program w wersji niezarejestrowanej "uprzyjemnia" nam czas
wyswietlajac nag-screeny. Do WinZipa powstalo mnostwo kodow rejestracyjnych i
keygenow, wiec jesli szukasz tu tylko kodu to lepiej przestan to czytac.
Klasyczne, bardzo proste zabezpieczenie Nazwa/Serial. Prosta procedura, standardowe
pulapki, szybkie znalezienie kodu - idealny do nauki crackowania.

--------------------------------------------------------------------------------------

Opis:
W tym tutorialu poznasz podstawy obslugi SoftIce oraz jeden z najprostszych (i co
najdziwniejsze najczesciej spotykanych) schematow znajdowania kodu rejestracyjnego.
Jest to praktycznie zadne zabezpieczenie, haslo sie znajduje wykonujac schematycznie
okreslone czynnosci - dlatego idealnie nadaje sie do nauki tego pieknego fachu :)
Jesli widziesz tutaj jakies niezrozumiale symbole, nie zrazaj sie, bo to jest 
naprawde proste, poprowadze cie krok po kroku.

---------------------------
Newbies Note!
Zanim cokolwiek zaczniesz robic w SoftIce upewnij sie ze w pliku winice.dat dokonales
niezbedne poprawki, mianowicie sprawdz czy nie masz srednikow przed liniami
EXP=c:\windows\system\kernel32.dll
EXP=c:\windows\system\user32.dll
EXP=c:\windows\system\gdi32.dll
Jesli ich nie usuniesz SoftIce nie zalozy pulapek na funkcje z ktorych za chwile
skorzystamy!
Linijke INIT=costam zamien na ponizsza, ulatwi to analize kodu:
INIT="lines 60; wd 22; wc 25; wr; code on; X;"
---------------------------

1. W pole Name wpisujemy McKiler/CrackPL'99 zas w pole Code 123456 (lub inny dowolny
numerek). Nie naciskamy OK !
2. Wchodzimy do SoftIce (CTRL+D) i wpisujemy:
bpx getdlgitemtexta
W tym momecie zastawilismy pulapke (breakpoint). Wykonywanie programu zostanie
przerwane jesli skorzysta on z tej funkcji. Funkcja getdlgitemtexta podobnie
jak getwindowtexta pobiera dane z pola tekstowego. Wychodzimy z SI (naciskamy
CTRL+D lub F5), naciskamy OK w programie i jestesmy spowrotem w SoftIce.
Widzimy mniej wiecej cos takiego:

Break due to BPX USER32!GetDlgItemTextA  (ET=3.42 seconds)
USER32!GetDlgItemTextA

Oznacza to ze wlasnie program skorzystal z funkcji getdlgitemtexta.
Naciskamy jeszcze raz F5 aby pozwolic programowi dalej sie wykonywac.
Po chwili znowu jestesmy w SI

Break due to BPX USER32!GetDlgItemTextA  (ET=207.96 microseconds)
USER32!GetDlgItemTextA

Dlaczego? Poniewaz dane wpisywalismy do dwoch pol tekstowych, a wiec musza one
byc dwa razy odczytane. Pierwszy raz name, drugi raz serial.
Mozesz spotkac program, ktory juz po pobraniu name generuje serial, jednak wiekszosc
(takze WinZip) serial generuje dopiero po pobraniu naszego wpisanego seriala,
nastepnie je porownuje.

3. Jestesmy w momencie pobrania danych z drugiego pola tekstowego.
Naciskamy F11 aby wyjsc z funkcji i przejsc do procedur, ktore beda cos z naszymi
danymi robic. Na ekranie widzimy linie kodu:
UWAGA! Wartosci moga sie roznic.
Tutaj niezbedne sa przynajmniej podstawy assemblera. Jesli ich nie znasz, bedziesz
mial trudniejszy start, ale po przerobieniu kilku tutoriali mozna zalapac co i jak.

015F:0040803C  56                  PUSH    ESI       | wloz ESI na stos
015F:0040803D  E857160200          CALL    00429699  | skok do funkcji
015F:00408042  59                  POP     ECX       | zdejmij ECX ze stosu
015F:00408043  56                  PUSH    ESI       | wloz ESI na stos
015F:00408044  E879160200          CALL    004296C2  | skok do funkcji

4. Wyraznie widzimy zaznaczona linie w ktorej sie znajdujemy. Aby przejsc dalej
mozemy nacisnac F10 (przejscie bez wchodzenia w funkcje wywolywane CALLem) lub
F8 (przejscie z wchodzeniem w funkcje).
Zauwazmy ze na stos jest wkladane ESI. Mozemy zobaczyc co jest pod ESI wpisujac:
d ESI
Zobaczymy w oknie kodu nasz wpisany serial!
Idziemy dalej naciskajac F10 - nie wchodzimy w zadne funkcje

015F:00408049  CMP    BYTE PTR [0047D928],00 | porownaj dlugosc name z zero
015F:00408050  POP    ECX
015F:00408051  JZ     004080B2               | jesli nasz name jest pusty to skok
015F:00408053  CMP    BYTE PTR [0047D958],00 | porownaj dlugosc seriala z zero
015F:0040805A  JZ     004080B2               | jesli nasz serial jest pusty to skok
015F:0040805C  CALL   00407B4B <----- wejscie do procedury weryfikacji kodu

5. W ta funkcje wywolana CALL-em nalezy wejsc - inaczej "rozminiemy" sie z procedura
porownujaca nasze seriale. Najprostsza metoda to wchodzic we wszystkie procedurki,
w tym tutorialu jednak poprowadze cie tylko przez te ktore musimy "odwiedzic".
Tak wiec naciskamy F8.

015F:00407B4B  55                  PUSH    EBP
015F:00407B4C  8BEC                MOV     EBP,ESP
015F:00407B4E  81EC08020000        SUB     ESP,00000208
015F:00407B54  53                  PUSH    EBX
015F:00407B55  56                  PUSH    ESI

6. Sprawdzmy co jest pod ebx i esi, wpisujac:
d ebx
Widzimy nasz Name! (McKiler/CrackPL'99)
d esi
Widzimy nasz Serial! (123456)
Idziemy dalej naciskajac F10
Przechodzimy przez rozne instrukcje ktorych nie musimy analizowac, z ciekawosci
mozna jedynie posprawdzac wartosci rejestrow, przez ktore beda sie przewijac nasz
username oraz serial (ale tylko ten nasz wpisany hehe). Dochodzimy do:

015F:00407C0E  8D85C0FEFFFF        LEA     EAX,[EBP-0140]
015F:00407C14  50                  PUSH    EAX
015F:00407C15  57                  PUSH    EDI
015F:00407C16  E8AB000000          CALL    00407CC6
015F:00407C1B  59                  POP     ECX
015F:00407C1C  BE58D94700          MOV     ESI,0047D958
015F:00407C21  59                  POP     ECX
015F:00407C22  8D85C0FEFFFF        LEA     EAX,[EBP-0140]
015F:00407C28  56                  PUSH    ESI		| wrzuc ESI na stos
015F:00407C29  50                  PUSH    EAX		| wrzuc EAX na stos
015F:00407C2A  E8D1FC0400          CALL    00457900

7. A to co to? Program cos przerzuca do rejestrow i wrzuca cos na stos. Zobaczmy:
d edi
Widzimy nasz wpisany name.
d esi
Widzimy nasz wpisany serial
d eax
Hmmm... chyba to jest nasz wlasciwy kod!
Nastepnie wywolywana jest CALL-em procedurka ktora porowna wartosci zapisane
w ESI oraz w EAX. Wprawdzie nasz kod pojawia sie w pamieci juz troche wczesniej,
jednak w tym momencie jest on juz latwy do odnalezienia. Wystarczylo podejrzec
wartosc rejestru EAX.......

8. Ciekawostka. Podczas analizy kodu mozna znalezc porownania naszego wpisanego
kodu z jakimis innymi nazwami w pamieci. Jest to tzw. shitlista. Po prostu
jesli program zauwazy ze nasz wpisany name jest taki jak ten w shitliscie skacze
od razu do procedury generujacej blad i nawet nie sprawdza kodu. Czyli nawet jesli
wpiszemy kod prawidlowy dla takich name i tak nie zarejestrujemy programu!
W WinZip-ie 7.0 na shitliscie sa tylko dwa name: MuradMeraly oraz bcom.

9. Kolejna ciekawostka. W prawie identyczny sposob mozna znalezc serial do
programu WinZip Self-Extractor. Potwierdza to twierdzenie ze programy z jednej
firmy sa zabezpieczone niemal identycznie.

9. Podsumowanie

Program: WinZip 7.0 SR-1
Name: McKiler/CrackPL'99
Code: BCAxxxD5 (patrz ponizej)

--------------------------------------------------------------------------------------
Jezeli szukasz tu jedynie seriali, to zle trafiles.
Dzialania opisane powyzej maja na celu analize kodu programu i poznanie schematu jego
zabezpieczenia. Jezeli masz zamiar uzywac tego programu dluzej, kup go (nie dotyczy M$).
Pozwoli to producentom udoskonalac oferowane programy, jak rowniez ich zabezpieczenia.
--------------------------------------------------------------------------------------
1999.04.02 by McKiler (mck@zg.home.pl)
