FAQ crackerskie #1 by mNICH

Data : 1998.09.16 ; Bielsko-Biala

Yoo ! poczatkujacy crackerzy (jesli to czytasz to pewnie nim jestes) !Zdecydowalem sie napisac to FAQ ze wzgledu na to ze o crackingu nikt nic nie pisze (Po polsku of coz) , po (do tej pory kiedy to pisze) polsku widzialem tylko jednego zina - crcpl. Wszystko jest o hacking i prhreaking - W szczegolnosci ten drugi temat zostal juz wyczerpany.

Przydalo by sie stworzyc kanal na IRC dla crackerow, myslalem ze jest taki odpowiednik #hackpl = #crackpl, ...ale tam chyba nikt nie uczeszcza ???

Ten FAQ zawiera tylko najbardziej podstawowe podstawy wiec jesli chcesz sie jeszcze doksztalcac musisz zdobyc inne FAQ (niestety teraz sa tylko angielskie!).

Wiec kilka podstaw i co musisz umiec aby zostac crackerem :

Czym jest cracking ???
Cracking jest to lamanie zabiezpieczen w programach. Wystepuja rozne typy zabezpieczen np. numer rejestracyjny (serial), DOC check, CD-copy protection, nag screen, function disabled itp. Itd. Zabezpieczenia sa raczej SCHEMATYCZNE tzn. ze roznia sie tylko troche (oczywiscie tylko w danym gatunku zabezpieczen np. seriale). Lamanie pod Windows95 troche sie rozni od lamania pod DOS, niektóre FAQ mowia ze latwiejszy jest cracking pod DOS, a niektóre ze pod SHIT95 (dalej tak bede nazywal ten "najlepszy" system operacyjny), osobiscie uwazam ze latwiej jest lamac zabezpieczenia pod SHIT95. Jezeli umiesz programowac w jakims jezyku wysokiego poziomu to powinienes dosc latwo zrozumiec filozofie Assemblera (tym lepiej jesli go juz znasz). Jezeli nie znasz zadnego jezyka i nie znasz wewnetrznej organizacji komputera tzn. jak dziala procesor , adresowanie pamieci itp. to czeka cie dluuuuuga droga do zostania dobrym crackerem. Jesli myslisz ze cracking pozwoli ci latwo zarobic kase to sie tu zatrzymaj i nie czytaj dalej. Nie mozesz myslec o crackingu w tych kategoriach. Cracking to jest sztuka - i musisz to zrozumiec aby czerpac z tego przyjemnosc...
Co musisz umiec ???
  1. Po pierwsze znac Assembler, nie koniecznie perfekcyjnie, ale im lepiej go poznasz i zrozumiesz tym latwiej bedziesz lamal zabezpieczenia, i tym lepszym bedziesz crackerem. Oczywiscie musisz byc "zaznajomiony" z takimi pojeciami jak np. Rejestr, flaga, przerwanie (INT - raczej tylko pod DOS), segment, offset, liczby hexadecymalne itp. itd. ... Z polecen assemblera najczesciej uzywane to :
    • CMP (porównuje dwie wartosci) ;
    • TEST (podobne do poprzedniego) ;
    • rozne odmiany skoku - JMP , Jx , Jxx ;
    • CALL (wywolanie procedury) ;
    • INT (przerwanie - pod DOS) ;
    • NOP (nic) itp. itd.
  2. Miec intuicje :)
  3. Przydalo by sie poznac jakiegos doswiadczonego crackera i tam kierowac swoje pytania i problemy.
  4. Dobrze by bylo znac angielski - wiekszosc (czyt. wszystkie) FAQ sa napisane wlasnie w tym jezyku. Jesli go nie znasz ... ucz sie czym predzej !
Narzedzia jakie powinienes miec !
  1. Pod SHIT95 oczywiscie prawie niezbedny jest SoftICE (obecnie 3.2) Jest to debugger który pozwala ci sledzic wykonywanie sie programu instrukcja po instrukcji w ASM ... Kazdy program obojetnie w jakim jezyku wysokiego poziomu jest napisany np. C++ , Pascal , VBasic musi byc przetlumaczony na ASM a potem na liczby hexadecymalne a potem jeszcze na binaria. Wiec w debuggerze pracujemy na poziomie ASM (aczkolwiek sa tez przedstawione te instrukcje asm (mnemoniki) w postaci hexadecymalnej SoftICE podczas instalacji dopisze do autoexec.bat linijke dzieki której bedzie sie wczytywac do pamieci jeszcze przed uruchomieniem SHIT95. Ta linijka to (jakbys przypadkowo ja wykasowal :)): DRIVE:\PATH\WINICE.EXE (DRIVE to litera dysku , PATH-sciezka of coz). Jak juz SHIT95 sie uruchomi to uaktywniamy SoftICE-a przez wcisniecie Ctrl+D. I juz jestesmy w Debuggerze...
  2. Przydalby sie tez Disassembler ... najlepszy pod SHIT95 to W32DASM (obecnie jest 8.9 ale postaraj sie o najnowsza wersje). Jest tez inny ciekawy - Sourcer 7.0 który wstawia swoje komentarze do disassemblowanego pliku. Taki zdiassemblowany plik mozna od razu skompilowac w TASM lub MASM (kompilatory Assemblera).
  3. Jakis HEX-edytor ... dzieki niemu mozesz wprowadzac zmiany do programu na stale ... Sa rozne HEX-edytory np. HEX Workshop lub Hacker's view. Te narzedzia powinny byc pod adresem : hack.netpol.pl (Przynajmniej byly jak to pisalem).

Pamietaj! : Praktyka czyni mistrza ... im wiecej bedziesz crackowal tym wiekszej nabierzesz wprawy ... wiec proboj SAM zarejestrowac kazdy shareware'owy program który ci sie nawinie ... Sa tez programy "crack-me" ktore same w sobie zawieraja zabezpieczenie i sa specjalnie przeznaczone dla crackerow !

ADRESY:

cracking.home.ml.org - strona zawierajaca najwiecej FAQ (oczywiscie po angielsku), debuggery, disassemblery, HEX-edytory i inne ciekawe rzeczy

heh...wiecej nie znam wiec jesli znasz jakies ciekawe adresy to czym predzej przysylaj maila...

Polecam inne FAQ o crackingu (Angielskie) np. +OCR , joe crackbook , JOSHi i jeszcze kilka innych

Dobra to wystarczy na poczatek. Wiem ze malo ... ale nie mam duzo czasu ... mam nadzieje ze zmobilizuje innych polskich crackerow do pisania swoich FAQ :) ! (moglby tez ktos napisac cos o Virii :))

Jesli sa bledy to wybaczcie - pisalem to chyba zbyt szybko...


Kntakt ze mna - tomroy@polbox.com lub tomroy@kki.net.pl (Tylko nie proscie mnie o cracki !) Lub na IRC (EFnet) - na #code , #cracking lub #bielsko - xywa : ^T0M^

A teraz (prawie doslowne) tlumaczenie znakomitego FAQ dla poczatkujacych ED!SON-a. |Jesli znasz angielski to nie czytaj dalej tylko zdobadz oryginalne FAQ - poniewaz (prawdopodone) moglem cos spieprzyc w tlumaczeniu moje "wstawki" oznaczylem (= ... =).

UWAGA - text probowalem napisac lopatologicznie wiec jesli masz jakies pojecie to przynajmniej nie czytaj dopiskow (=...=) ... bo mi wstyd :) Jesli uwazasz ze FAQ jest do dupy to go nie czytaj.

Jesli zrobisz sobie krzywde wykorzystujac materialy tu zawarte - nie miej do mnie pretensji.

Mozesz (Musisz :)) KOPIOWAC to FAQ dla kogokolwiek i czegokolwiek ! Tylko nie zmieniajac jego tresci !!!!!

I oczywiscie ... WIELKIE podziekowania dla Huffyk-a


A teraz tlumaczenie...

No wiec zaczynamy...

Przewodnik ED!SON-a po crackingu w Windows 95 v1.oo

Spis tresci

  1. Wprowadzenie do lamania pod Windows 95
  2. Krótkie wprowadzenie do SOFTice/Win 2.oo (=gdy to tlumacze jest wersja 3.2=)
  3. Znajdowanie numerów rejestracyjnych
    Task Lock 3.00 - Proste zabezpieczenie - sam numer rejestracyjny
    Command Line 95 - Prosta rejestracja nazwa/numer
  4. Tworzenie "keymaker-a" dla Command Line 95
  5. Jak naprawde dziala PUSH i CALL kiedy program wywoluje funkcje
  6. programach napisanych w Visual Basic

Dodatki

  1. Softice load symbols
  2. skladnia funkcji
  3. Gdzie zdobyc SOFT
  4. Kontakt ze mna (=ED!SON=)

1. Wprowadzenie do crackingu pod Windows

Lamanie (=Cracking=) programu Windows-owego (=czyt. SHIT-owego - dalej bede uzywal tej nazwy=) jest najczesciej prostsze niz DOS-owego.

W SHIT95 ukrycie czegokolwiek przed kims kto naprawde szuka informacji jest bardzo trudne, tak dlugo az wewnetrzne funkcje SHIT95 sa uzywane.

Pierwszym (i czesto jedynym) narzedziem który potrzebujesz jest SoftICE/Win 2.oo, Znakomity debugger od NuMega. Niektorzy ludzie mysla ze jest toporny w uzyciu, ale ja Ci powiem jak efektywnie debbugowac w nim, i mam nadzieje ze mnie zrozumiesz :-) . Zrobilem dodatek (A) z malym info do SoftICE/Win 2.oo ktore powinienes przeczytac. Nigdy nie mialem problemow instalujac SoftICE, wiec jesli jakies masz, musze skierowac do instrukcji obslugi.

URL-e do calego SOFT-u który potrzebujesz jest w dodatku (C).- ED!SON, edison@ccnux.utm.my

2. Krótkie wprowadzenie do SOFTICE/Win 2.oo

Oto dosc kiepski wglad na to co widzisz na ekranie w SOFTICE:

|--------------------| 
|     Rejestry       | Nacisnij 'R' aby edytowac
|--------------------|
|   Okno z danymi    | Nacisnij 'D' aby zobaczyc adres, 'E' aby edytowac
|--------------------|
|  Okno instrukcji   | Nacisnij 'U' aby zobaczyc adres, 'A' aby napisac kod ASM
|--------------------|
|    Okno komend     | Tu wprowadzasz komendy
|--------------------|

Inne wazne przyciski to (w standardowym ustawieniu)

'H'/F1    - Pomoc 
Ctr+D/F5  - Pokazanie SoftICE
F8        - wchodzenie w funkcje
F10       - chodzenie ponad funkcjami
F11       - wychodzenie z funkcji

3. Znajdowanie numerów rejestracyjnych

To jest prawdopodobnie najprostsza droga do praktyki, wziac program shareware i sprobowac go zarejestrowac.

3.1 Task Lock 3.00 - Proste zabezpieczenie - sam numer rejestracyjny

To jest proste zabezpieczenie, tylko numer rejestracyjny, który wogole sie nie zmienia

3.1.1 Badanie programu

Program jest 16 czy 32 bitowy? gdzie wpisujemy informacje rejestracyjne? Czy 'pomoc programu' daje jakis slad jak dziala rejestracja? Dowiedz sie tego zanim bedziesz kontynulowal! ....Teraz powinienes sprawdzac!...sprawdzasz?...sprawdziles?...OK, teraz wiesz ze jest to 32-bitowa aplikacja pod SHIT95, i to ze mozesz zarejestrowac program wpisujac pojedynczy numer rejestracyjny w oknie dialogowym ktore pojawia sie kiedy wybierzesz z menu "Register|Register...". Dowiedziales sie takze czytajac Help-a, ze sa 2 sposoby rejestracji: Indywidualna i przez siec. Wiec najprawdopodobniej beda 2 sprawdzenia czy wprowadziles prawidlowy kod.

3.1.2 "Sledzenie" kodu

Seriale (=czyli numery rejestracyjne=) sa przewaznie wpisywane w normalnych oknach dialogowych SHITA95.

Aby sprawdzic kod, program musi przeczytac zawartosc okna dialogowego uzywajac jednej z tych funkcji:

  16-bitowe       32-bitowe
  -----           ----- 
  GetWindowText   GetWindowTextA, GetWindowTextW
  GetDlgItemText  GetDlgItemTextA, GetDlgItemTextW

Ostatnia litera 32-bitowych funkcji oznacza ze funkcja uzywa jedno-bajtowych (=..extA=) lub dwu-bajtowych (=..extW=) lancuchow znakow. Dwu-bajtowe sa RZADKIE. Moze zastosujesz moja mysl... "Gdybym tylko mogl przerwac program gdy wywola funkcje GetWindowText" i - mozesz! Ale najpierw musisz sie upewnic ze te symbole so aktualnie zaladowane przez Softice (Zobacz dodatek A).

Aby ustawic "pulapke" (nazywa sie to punkt kontrolny) (=ang. Breakpoint - najlepiej uzywac tej nazwy=) najpierw uaktywnij Debuggera (=Softice=) wciskajac Ctrl+D, potem uzyj komendy BPX z nazwa funkcji albo adresem pamieci. Task Lock jest 32-bitowy wiec postawmy breakpoint na GetWindowTextA. Jesli to nie zadziala, wtedy sprobojemy innych. Wprowadz to w Softice (=w Command line - czyli najnizsze okno=):

:bpx getwindowtexta

Jesli dostales wiadomosc o bledzie np. "No LDT", upewnij sie ze nie masz uruchomionych zadnych innych aplikacji w tle. Zauwazylem ze Norton Commander lub DOS przeszkadza tej funkcji. Mozesz sprawdzic czy masz ustawione jakies Breakpoint-y wyswietlajac liste breakpoint-ow:

:bl

Komenda da ci cos w tym stylu:

      00) BPX USER32!GetWindowTextA C=01

Aby wyjsc z softice (=Oczywiscie softice bedzie dalej w pamieci=), nacisnij Ctrl+D znowu

Dobra, masz ustawiony breakpoint który wykryje kazde wywolanie funkcji GetWindowTextA (=funkcji uzywaja tylko programy napisane dla SHIT95=).

Teraz (=Oczywiscie po uruchomieniu Task Lock 3.00=) wpisz dowolna wartosc w polu gdzie masz wpisac numer rejestracyjny i wcisnij OK... Nacisnales OK... i co?... dostales tylko glupia wiadomosc ze twoj numer byl zly. Wiec to nie bylo GetWindowTextA (=w innym programie moze byc to akurat ta funkcja=).

Sprobojmy GetDlgItemTextA. Wiec usuwamy stary breakpoint (=nie koniecznie=):

      :bc 0

(0 oznacza numer breakpoint-u na liscie breakpoint-ow)

Teraz ustawiamy nowy breakpoint:

      :bpx getdlgitemtexta

i probujemy wpisac serial-a od nowa...

(=Probuj funkcji :

GetDlgItemText
GetDlgItemTextA
GetDlgItemTextW
GetWindowText
GetWindowTextA
GetWindowTextW
GetDlgItemInt
=)

3.1.3 w srodku Debugger-a

Wow! Zadzialalo! (=???=) Jestes teraz wewnatrz softice, w miejcsu gdzie funkcja GetDlgItemTextA sie zaczyna. Aby przeskoczyc w miejsce skadkolwiek ta funkcja zostala wywolana, nacisnij F11. Teraz jestes wewnatrz SGLSET.EXE, jesli nie jestes pewien,zobacz na linie pomiedzy oknem instrukcji a oknem gdzie wpisujesz komendy, powinienes zobaczyc cos takiego:

      ---------SGLSET!.text+1B13---------

Mozesz teraz wylaczyc breakpoint wpisujac:

      :bd 0

Kiedy bedziesz chcial uaktywnic ten breakpoint pózniej wpiszesz:

      :be 0         

pierwsza linia w oknie instrukcji wyglada tak:

      CALL  [USER32!GetDlgItemTextA]

Aby zobaczyc linie ktore sa wyzej, wciskaj pare razy Ctrl+strzalka w gore, dopoki nie zobaczysz ponizszych lini. Jesli nie wiesz nic o Assemblerze (=To po co to czytasz??? :) =), zamiescilem komentarze do tych lini.

RET                            ;Koniec funkcji
PUSH  EBP                      ;Poczatek funkcji
MOV  EBP,ESP                   ;...
SUB  ESP,0000009C              ;...
PUSH  ESI                      ;...
> LEA  EAX,[EBP-34]              ;EAX=EBP-34
PUSH  EDI                      ;...
MOVE  ESI,ECX                  ;...
PUSH  32          ;Zapisuje: Maxymalny rozmiar ciagu znakow (=stringu=)
> PUSH  EAX         ;Zapisuje: Adres bufora textowego
PUSH  000003F4                 ;Zapisuje: Identyfikator kontroli
PUSH  DWORD PTR [ESI+1C]       ;Zapisuje: Uchwyt do okna dialogowego
CALL  [USER32!GetDlgItemTextA] ;Pobiera text

Komendy PUSH oznaczja zapisanie wartosci do pozniejszego uzycia.

Zaznaczylem wazne linie znakiem '>'. Patrzac na kod widzimy ze adres do bufora textowego jest trzymany w EAX, i EAX to bylo EBP-34. Wiec patrzymy na EBP-34 tak:

      :d ebp-34

Teraz powinienes moc przeczytac to co wpisales w oknie danych. Teraz musimy znalezc miejsce gdzie twoj serial jest porownywany z prawdziwym. Wiec wykonujemy kilka instrukcji wciskajac kilka razy F10 dopoki nie znajdziemy czegos o EBP-34... Nie bedziesz dlugo naciskal zaraz powinien pojawic sie ten kod:

> LEA  EAX, [EBP+FFFFFF64]       ;EAX = EBP-9C
LEA  ECX, [EBP-34]             ;ECX = EBP-34
PUSH  EAX                      ;Zapisuje(=na stosie=): EAX
PUSH  ECX                      ;Zapisuje(=na stosie=): ECX
> CALL  00403DD0                 ;Wywolanie funkcji
ADD  ESP, 08                   ;Kasuje zapisane informacje
TEST  EAX, EAX                 ;Sprawdza co funkcja zwraca
JNZ  00402BC0                  ;Skok jesli nie zero

Dla mnie, to wyglada dokladnie jak funkcja porownujaca stringi (=lancuchy znakow=).

To pracuje tak:

* pobiera 2 stringi, zwraca 0 jezeli sa rowne, w przeciwnym wypadku wartosc rozna od zera.

A dlaczego program porównuje string z tym który ty wpisales (=jako numer rejestracyjny=)?

Aby zobaczyc czy byl prawidlowy! (Jak sie juz pewnie domysliles) Dobra, co sie kryje pod adresem [EBP+FFFFFF64] ? SoftICE nie manipuluje dobrze blednymi numerami, wiec aby znalezc prawdziwy musisz przeprowadzic to obliczenie:

      100000000 - FFFFFF64 = 9C

W Softice mozesz to zrobic tak:

      :? 0-FFFFFF64

Numer 100000000 jest za duzy dla SoftICE, ale z drugiej strony to daje ten sam rezultat.

A teraz... Czas aby zobaczyc co kryje sie za EBP-9C... Zrob to tak:

      :d ebp-9c

Okno danych pokaze teraz dlugi rzad numerów - numer rejestracyjny! Ale pamietaj co powiedzialem wczesniej... dwa typy rejestracji daja 2 kody... wiec po tym jak zapiszesz sobie kod który wlasnie znalazles, kontynuujemy wykonywanie kodu z F10... Dopoki nie znajdziemy tego kawalka kodu:

> LEA  EAX, [EBP-68]              ;EAX = EBP-68
LEA  ECX, [EBP-34]              ;ECX = EBP-34
PUSH  EAX                       ;Zapisuje: EAX
PUSH  ECX                       ;Zapisuje: ECX
> CALL  00403DD0                  ;Znowu wywoluje funkcje
ADD  ESP, 08                    ;kasuje zapisana informacje
TEST  EAX, EAX                  ;Sprawdza co funkcja zwraca  
JNZ  00402BFF                   ;Skok jesli nie zero

A co mozesz znalezc pod adresem EBP-68? Heh... inny kod rejestracyjny!

      :d ebp-68

To na tyle... Mam nadzieje ze wszystko dziala!

3.2 Command Line 95 - Prosta rejestracja nazwa/kod, I zrobimy keymaker'a

To jest fajny przykladowy program, z bardzo prostym zabezpieczeniem.

1 Badanie programu

Zbadales program i widzisz ze jest to 32-bitowa aplikacja, wymagajaca Nazwy (=imie - czy cos takiego=) i kodu w oknie rejestracyjnym.

Wiec zaczynamy!

3.1.2 "Sledzenie" kodu

Robimy to co z TaskLock - ustawiamy breakpoint-y.

Mozemy ustawic breakpoint-y na obie najbardziej prawdopodobne funkcje: GetWindowTextA i GetDlgItemTextA. Nacisnij Ctrl+D aby uaktywnic SoftICE, i wpisz:

:bpx getwindowtexta
:bpx getdlgitemtexta

Teraz wejdz do (=po uruchomieniu Command Line 95=) okna rejestracyjnego, i wpisz nazwe (=imie=) i jakis numer (najczesciej liczba calkowita). Ja napisalem tak, i nacisnalem OK...

Nazwa:  ED!SON'96
Kod:  12345

Program zatrzymal sie na GetDlgItemTextA (=czyli Softice automatycznie sie uruchomil=), Tak jak w TaskLock, naciskamy F11 aby wrocic do wywolywanej funkcji. Przesuwamy okno instrukcji w gore naciskajac kilka razy Ctrl+(strzalka w gore) az zobaczymy to:

MOV  ESI, [ESP+0C]
PUSH  1E             ;Maksymalna dlugosc
PUSH  0040A680       ;Adres do bufora textowego
PUSH  000003ED       ;Identyfikator kontroli
CALL  [User32!GetDlgItemTextA]

Numer 40A680 wyglada dla nas interesujaco, wiec sprawdzamy adres:

      :d 40a680

I co pojawi sie w oknie danych, jesli nie nazwa ktora wpisalismy (=ED!SON'96=),

Nastepnie patrzymy ponizej powyzszego kawalka kodu, czyli:

PUSH  00                     ;(nie interesujace)
PUSH  00                     ;(nie interesujace)
PUSH  000003F6               ;identyfikator kontroli
MOV  EDI, 0040A680           ;Zapisuje adres do bufora
CALL  [User32!GetDlgItemInt]

GetDlgItemInt jest podobne do GetDlgItemText, ale zwraca liczbe calkowita z okna dialogowego. To jest zwrocone w EAX, wiec przechodzimy przez te instrukcje, (=F10=) i patrzymy w okno rejestrów... U mnie to wyglada tak:

      EAX=00003039

Ile to jest 3039 hexadecymalnie (=szestnastkowo=) ? Wpisujemy:

      :? 3039

I otrzymasz to:

      00003039 0000012345 "09"
      ^hex     ^dec       ^ascii

I, jak widzisz (jak juz pewnie zgadles), to pokazuje numer rejestracyjny który sam wpisales. Ok, co teraz?

Zobacz na nastepujacy wycinek kodu, najpierw zwracany kod jest zapisywany:

MOV  [0040A548], EAX         ;Zapisuje zwracany kod
MOV  EDX, EAX                ;Wklada zwracany kod do DX

3.1.3 Kalkulowanie kodu

Teraz zlamiesz kod!

MOV  ECX, FFFFFFFF              ;Te wiersze kalkuluja dlugosc stringu
SUB  EAX, EAX                   ;.
REPNZ  SCASB                    ;.
NOT  ECX                        ;.
DEC  ECX                        ;ECX zawiera teraz dlugosc stringu
MOVSX  EAX, BYTE PTR [0040A680] ;Pobierz bajt w 40A680
IMUL  ECX, EAX                  ;ECX=ECX*EAX
SHL  ECX, 0A                    ;Przesuniecie w lewo o 0A krokow 
ADD  ECX, 0002F8CC              ;dodaje 2F8CC do rezultatu
MOV  [0040A664], ECX

I potwierdzanie...

CMP  ECX, EDX                   ;Porównuje kody
JZ  00402DA6                    ;Jezeli takie same, wykonaj skok...

Kiedy doszles do porownania numerów rejestracyjnych, mozesz sprawdzic jaki jest poprawny numer:

      :? ecx

U mnie to dalo:

      000DC0CC  0000901324

To oznacza ze prawdziwy kod dla mnie to 901324.

Wiec nacisnij F5 albo Ctrl+D aby pozwolic programowi sie wykonywac, sproboj teraz zarejestrowac z dobrym kodem ale w formie dziesietnej oczywiscie. To dziala!!!

4. Tworzenie "keymaker-a" dla COMMAND LINE 95

Patrzymy powyzej na kalkulacje kodu, i tlumaczymy to na jezyk C. Tworzymy ta bardzo prosta deklaracje jak kod jest kalkulowany:

      code = ( (uppercase_first_char * length_of_string) << 0x0A) + 0x2f8cc;

Uwaga (1):Nie mozna zapomniec ze wszystkie znaki sa konwertowane kiedy je wpisujesz do okna dialogowego, wiec musimy zrobic to samo.

Uwaga (2): "<< 0x0A" oznacza "pomnoz przez 2^10"

Caly program w C moze wygladac tak:

      #include <string.h>
      #include <stdio.h>

      int main()
      {
        unsigned long code;
        unsigned char buffer[0x1e];

        printf("Command Line 95 Keymaker by ED!SON '96\n"
        printf("Enter name:   "); (=wprowadz nazwe (imie)=)
        gets(buffer);

        strupr(buffer);
        code = ( ((unsigned long)buffer[0] *
                (unsigned long)strlen(buffer))
                << 0x0A) + 0x2f8cc;

        printf("Your code is: %lu", code);

        return 0;
      }

Baw sie dobrze !!!

4. Jak naprawde dziala PUSH i CALL kiedy program wywoluje funkcje

Popatrzmy na ten kawalek kodu z TaskLock znowu:

PUSH  32                       ;Zapisuje: Maxymalny rozmiar stringu
PUSH  EAX                      ;Zapisuje: Adres bufora textowego
PUSH  000003F4                 ;Zapisuje: Identyfikator kontroli
PUSH  DWORD PTR [ESI+1C]       ;Zapisuje: Wskaznik do okna dialogowego
CALL  [USER32!GetDlgItemTextA] ;Pobiera text

Mozesz to wywolac z programu napisanego w C, Wywolanie bedzie wygladalo tak:

GetDlgItemTextA(hwndDlg, 0x3F4 (=to jest liczba szestnastkowa=), buffer, 0x32);
                ^ [ESI+1C]                                       ^ EAX

PUSH wklada dane na cos co sie nazywa Stos. W rezultacie kazde wywolanie PUSH wklada nowy kawalek danych na szczyt stosu, i wtedy funkcja sprawdza co lezy na stosie i uzywa tego do czego jest przeznaczona.

5. O programach napisanych w Visual Basic

Pliki .EXE napisane w Visual Basic-u (=VB=) nie sa prawdziwymi, skompilowanymi EXE.

One zawieraja kod aby przywolac VBRUNxxx.DLL, który odczytuje dane z EXE aby uruchomic program. To jest takze przyczyna dlaczego programy VB sa takie wolne. Wiec kiedy pliki EXE nie sa "prawdziwe", nie mozesz ich Disassemblowac, znajdziesz tylko wywolanie DLL-a i pelno smieci, a kiedy bedziesz Debugowal ten program, skonczysz takze na wywolaniu DLL-a (=ang. Dynamic Link Library=). Rozwiazaniem jest dekompilator. Jest dekompilator dla VB 2 i 3, zrobiony przez kogos o przezwisku DoDi. Program jest shareware i dostepny w sieci (Zobacz dodatek C). W SHIT95, sa 32-bitowe aplikacje napisane w VB 4, i nie ma narazie dla nich dekompilatora, chociaz chcialbym aby byl. Uwaga: Tylko nie prawdziwi (nie inteligentni) programisci pisza programy w VB.


A. Softice load symbols

Aby sprawdzic czy SoftICE zaladowal symbole dla GetWindowText, uaktywnij Softice naciskajac Ctrl+D i wpisz cos takiego:

:exp getwindowtext

Jesli nie dostaniesz listy wszystkich GetWindowText, musisz edytowac \SIW95\WINICE.DAT (=sciezka gdzie masz zainstalowanego SoftICE-a=) i usunac znaki (';') (= ; - znak komentarza=) z kilku lini 'exp=' ktore wystepuja po tym tekscie: "Examples of export symbols that can be included for chicago" blisko konca pliku. Mozesz usunac znaki (';') ze wszystkich tych lini, albo zeby zaoszczedzic pamiec, tylko w tych liniach ktore zawieraja pliki: kernel32.dll, user32.dll, gdi32.dll, sa one najwazniejsze. Kiedy juz to zmienisz, musisz zresetowac komputer aby to zadzialalo.

B. Skladnia funkcji

Zawsze o wiele latwiej zrozumiec wywolania funkcji o ktorych mowilismy majac ich deklaracje (=w C/C++=) , wiec:

int GetWindowText (int windowhandle, char *buffer, int maxlen);
int GetDlgItemText (int dialoghandle, int controlid, char *buffer, int maxlen);
int GetDlgItemInt (int dialoghandle, int controlid, int *flag, int type);

Aby zobaczyc bardziej szczegolowe deklaracje funkcji, sprawdz w podreczniku programowania Windows/Win32.

C. Gdzie zdobyc SOFT

Narzedzia Crackerskie:

SoftICE/Win 2.oo:http://www.geocities.com/SoHo/2680/cracking.html

Dekompilator VB:ftp://ftp.sn.no/user/balchen/vb/decompiler/

Przykladowe programy:

TaskLock: http://users.aol.com/Sajernigan/sgllck30.zip

CommandLine 95: ftp://ftp.winsite.com/pub/pc/win95/miscutil/cline95.zip

D. Kontakt ze mna (=ED!SON=)

Na IRC (EFnet): na #Ucf96, #Cracking

E-mail: edison@ccnux.utm.my albo an461165@anon.penet.fi

WWW: http://www.geocities.com/SoHo/2680/cracking.html