    
                                   FFFFFFFFFFFF
     HTTP://WWW.UNDERGROUND.ORG.PL FFFFFFFFFF
       -----------------------     FFFFFFFFFFF
            C  R  A  C  K          FFFFFFFFFFFF
       ---------> 3 <---------     FFFFFFFFFFF
    FF
                                      Napisa: mNICH
                                      Data : 13.11.1998
                                      Miejsce: Bielsko-Biala

Y0 ALL !!!
Witam wszystkich ponownie ... Hmmm zastanawialem
sie co by w tym FAQ zlamac ... hehe padlo
na CrackMe 2.0 od MiB/Cruehead. Chyba
nie bede omawial jak zlamac jakies
komercyjne programy, bo pojawiaja sie
coraz to nowe wersje i mozna miec klopot 
z zdobyciem koniecznego Soft-u ;).

Programik ma proste zabezpieczenie - tylko samo HASLO -
Nie powinniscie miec problemu ze zlamaniem go -
wiec zanim przeczytasz opis zlamania - sprobuj SAM !!!!
Jesli Ci sie nie uda to zapraszam do lektury ;))

Co potrzebne - 
Oczywiscie wystarczy nasz ukochany SoftICE !!!

Hmmm ... Jesli bede pisal nastepnego FAQ to chyba opisze
jak zlamac cos bez debuggera (tzn. WDASM + HEX-edytor).

Do crakingu wystarczy inteligencja, znajomosc ASM-a i umiejetnosc
poslugiwania sie narzedziami (Debugger, Disassembler i HEX-edytor),
jesli nie posiadasz tych cech to ... idz lepiej pograj sobie
w QUAKE'a - to Ci sie bedzie bardziej podobalo ;))
Natomiast posiadajac te cechy mozesz bez problemu zostac
crackerem - na poczatku bedzie trudno ... kazde zabezpieczenie
bedzie stanowilo dla Ciebie wyzwanie - i wlasnie o to chodzi -
zeby uzywac szarych komorek - kazde zabezpieczenie, ktore SAM
zlamiesz bedzie powodem do dumy, i da Ci pelna satysfakcje ;))
Jesli przeczytacz gdzies pelno wzorcow zabezpieczen i jak je
lamac, i wykujesz na pamiec to nie bedziesz mial z crackingu zadnej
przyjemnosci, wiec wszystko proboj lamac SAM !!!!!!!
Po pewnym czasie zaczniesz dostrzegac pewne wzorce zabezpieczen,
a jeszcze pozniej bedziesz czul sie jak profesjonalista - twoj
debugger zastapi Ci dziewczyne ... bedziesz uwazal go za swego
najlepszego przyjaciela, a kazdy kawalek kodu bedzie dla Ciebie
znajomy !!!  

Jesli: 
chcesz zadac pytanie/przeslac kase/masz jakies sugestie/
jestes szefem browaru/firmy computerowej to pisz na adres :
tomroy@kki.net.pl lub
tomroy@polbox.com lub
tomroy@friko6.onet.pl ;)

UWAGA !!!
=================================================|
Musze sie zorientowac czy te moje wypociny       |
ktos czyta, wiec jesli zalezy Ci na wydaniu      |
kolejnych czesci (nie obiecuje !!!) to napisz    |
na ktorys z powyzszych adresow.                  |
Napisz obojetnie co - wazne tylko zebym          |
wiedzial ze czytales to FAQ ;))                  |
Mozesz napisac jakies sugestie ;) np. ze         |
to co pisze jest niezrozumiale/zrozumiale i      |
musze/nie_musze zmieniac stylu, a moze           |
zauwazyles jakies bledy ???                      |
Uwaga! przysylac tylko do konca 1998 !!!         |
=================================================|  

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!Jesli uwazasz ze FAQ jest do  !
!Dupy ... to go nie czytaj.    !  
!Nie odpowiadam za nie zgodne  !
!z prawem uzycie wiadomosci    !
!tutaj nabytych!!!             !
!Mozesz kopiowac to FAQ gdzie  ! 
!i komu chcesz - tylko nie     !
!zmieniajac tresci !!!         !
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


Tyle wstepu ... przechodzimy do konkretow ;) .......

===================================================================

1. Uruchamiamy CrackMe ver 2.0 ... klikamy Help/Enter Password
   i wpisujemy jakies dowolne HASLO np. ja wpisalem "tomek"

2. Wchodzimy do S-ice'a (Ctrl+d) ... ustawiamy breakpoint na
   GetDlgItemTextA :

          bpx getdlgitemtexta

   Heh ... prawdopodobnie za kazdym razem gdy lamiesz program 
   pod W95 (SERIAL lub NAZWA/SERIAL) to ustawiasz breakpointy
   na GetDlgItemTextA i GetWindowTextA ... nie lepiej byloby
   np. za pomoca jednego slowa (komendy) ustawic breakpointy
   na obydwie funkcje ??? ... Mozesz to zrobic tak :
   w WINICE.DAT (w linijce inicjalizacyjnej), no chyba ze
   chcesz jednorazowo, wpisac komende :

          macro break = "bpx getdlgitemtexta; bpx getwindowtexta"
          
   teraz wystarczy ze wpiszesz komende <break> i masz ustawione 
   breakpointy na tych dwoch popularnych funkcjach !!!
   pomiedzy codzyslowami mozesz wpisywac dowolne komendy ...
   tzn. ze mozesz np. dodawac kolejne funkcje, ktore maja sie
   kryc pod komenda <break>.

4. Teraz wychodzimy z S-ice (F5) ... i znowu w nim jestesmy ;) ...
   Jak zwykle wciskamy F11 zeby znalezc sie w miejscu skad
   zostala wywolana funkcja GetDlgItemTextA (teraz jestesmy w 
   USER32.DLL). Jak wiecie z poprzedniego FAQ ustawiamy
   teraz breakpoint na komorke pamieci w ktorej program
   przechowuje nasze HASLO (chyba nie musze tlumaczyc jak
   znalezc ta komorke) no wiec :
           
          bpm 0040217E

   naciskamy F5 ... i znowu w S-ice ;) ... Zobaczmy gdzie sie
   znalezlismy :

          00401371   MOV    AL,[ESI]  <------------|
      >>>>00401373   TEST   AL,AL                  |
          00401375   JZ     00401390               |
          00401377   INC    BYTE PTR [00402118]    |
          0040137D   CMP    AL,41                  |
          0040137F   JB     00401385               |
          00401381   CMP    AL,5A        ;Petelki {|
          00401383   JAE    00401388               |
          00401385   INC    ESI                    |
          00401386   JMP    00401371  <------------|
          00401388   CALL   004013B2               |      
          0040138D   INC    ESI                    |
          0040138E   JMP    00401371  <------------| 
                
   OK. Wyladowalismy w miejscu ">>>>" ... No chyba nie powiesz
   mi ze nie wiesz co robi powyzszy kawalek kodu ?????
   Jesli tak to odsylam do FAQ nr. 2 !!!
   Wiec teraz moje HASLO - "tomek" zamienia sie na "TOMEK".
 
5. Przechodzimy do nastepnych linijek :

          POP    ESI
          CALL   00401399

   przechodzimy przez "POP ESI" (F10) i zeby zobaczyc co jest
   wewnatrz procedury (00401399) naciskamy F8 ... Oto co
   w niej jest :

          00401399   XOR    EBX,EBX             (1)
          0040139B   XOR    EDI,EDI             (2)
          0040139D   MOV    CL,[EDI+004021A3]   (3)  <--------|
          004013A3   MOV    BL,[ESI]            (4)           |
          004013A5   TEST   BL,BL               (5)           |
          004013A7   JE     004013B1            (6)           | 
          004013A9   XOR    BL,CL               (7)   ;PETLA {|
          004013AB   MOV    [ESI],BL            (8)           | 
          004013AD   INC    ESI                 (9)           | 
          004013AE   INC    EDI                 (10)          | 
          004013AF   JMP    0040139D            (11) <--------|  
          004013B1   RET                        (12)    

   Linijka (1) to oczywiscie zerowanie rejestru EBX ... Linijka (2)
   to (znowu oczywiscie) zerowanie EDI ... Natomiast co w 
   linijce (3) ??? hmmm ... zobaczmy co jest pod tym adresem :

          d edi+004021A3

   W oknie danych wyskoczylo cos takiego : Messing_in_bytes ...
   Chyba ten string nie siedzi tam bez celu ??? ... No wiec
   w (3) przy kazdym obiegu PETLI do CL jest ladowany kolejny
   znak tego stringu (bo przy kazdym obiegu inkrementowane 
   jest EDI) !!! ... a co w linijce (4) ??? ... do BL ladowany
   jest (przy kazdym obiegu PETLI) kolejny znak z naszego
   HASLA !!! (bo ESI takze jest inkrementowane). Linijka (5)
   sprawdza czy aktualny znak w naszym HASLE (BL - aktualny znak)
   jest NULL, jesli tak, to skok z (6) do (12) czyli konca procedury. 
   Linijka (7) XOR-uje dwie wartosci (w BL i CL) i wynik idzie do BL,
   a nastepnie z BL do [ESI] (8) - ESI wskazuje na adres naszego HASLA
   (konkretnie kolejnego znaku w tym HASLE ... przy kazdym obiegu 
   PETLI), nastepnie inkrementowane (powiekszane o 1 - jakby
   ktos nie wiedzial ;) ) jest ESI (9) oraz EDI (10) oraz skok
   do poczatku petli (11) (czyli do (3)). Hmmmm ... co powoduje
   caly ten wycinek kodu ??? ... 
   Otoz w wyniku jego wykonania
   pod adresem wskazywanym przez ESI (przedtem bylo tam nasze
   HASLO) znajduje sie nasze HASLO zXOR-owane ze stringiem :
   Messing_in_bytes !!! Dla mnie to bedzie :

          T  XOR  M = .
          O  XOR  e = *
          M  XOR  s = >
          E  XOR  s = 6
          K  XOR  i = "

   Czyli takie COS :  .*>6"    

6. Naciskamy F5 ... i jestesmy tutaj :             
          
          004013B8   XOR     EDI,EDI         (1)
          004013BA   XOR     ECX,ECX         (2)
          004013BC   MOV     CL,[00402118]   (3)
          004013BE   MOV     ESI,[ESP+04]    (4)
          004013C2   MOV     EDI,00402150    (5)
      >>>>004013C7   REPZ    CMPSB           (6)
          004013C9   RET                     (7)
    
   Wyladowalismy w miejscu ">>>>"
   Na poczatek zerowanie EDI (1) oraz ECX (2)
   Linijka (3) powoduje ze do CL zapisywana jest ilosc
   znakow w twoim HASLE !!!
   hmmm a co w (4) ??? ... do ESI wkladana jest wartosc     &&&&&&
   zXORowanego HASLA, czyli :  .*>6"  ,a w (5) do EDI idzie
   to co jest pod adresem 00402150 ... a co pod nim jest ???
   
          d 00402150

   otrzymamy ze po tym adresem jest takie cos :  .,76;=(.=&.1-;7>
   W linii (6) wystepuje porownywanie dwoch stringow pod adresami
   DS:ESI oraz ES:EDI ... porownywanie konczy sie kiedy skoncza
   sie wszystkie znaki w obydwoch stringach (REPZ - 
   powtarzaj dopoki zero). No i (7) to powrot z funkcji.

7. przechodzimy przez RET (F10) oto gdzie jestesmy :

          0040123C   ADD    ESP,04         (1)
          0040123F   TEST   CL,CL          (2)
          00401241   JZ     0040124A       (3)
          00401243   CALL   00401349       (4)

   (1) nie ma znaczenia. (2) sprawdza czy w CL jest jakas
   wartosc rozna od zera ... jesli jest rozna to skok w (3)
   nie nastepuje a jezeli 0 to skok jest ;) ... hmmm ale
   co ta flaga (ZF - jesli ustawiona to zero) oznacza ???
   co ja zmienia ??? i po co to jest robione ??? ... I tutaj
   jest najwazniejszy punkt zabezpieczenia !!!   
   Hmmm tutaj trzeba troche pomyslec ... zobaczcie jeszcze raz
   na instrukcje REPZ CMPSB w poprzednim punkcie ... porownywanie
   (bo to jest zadaniem tej instrukcji) znakow nastepuje datad
   az w CX (tu wystarczy CL) bedzie 0 (CL jest za kazdym razem
   dekrementowane - zmniejszane o 1 !!!) ... czyli instrukcja ta jest 
   wykonywana dopoki nie skoncza sie znaki w ES:EDI lub
   aktualnie porownywane znaki (z ES:EDI i DS:ESI) 
   sie roznia !!! Jesli wszystkie znaki z ES:EDI
   sa rowne ze znakami z DS:ESI to twoje haslo jest poprawne i
   flaga ZF zostaje ustawiona (ligiczna 1).
   To by bylo na tyle ze starego kodu ... wrocmy do obecnego ...
   Linijka (1) jest nie wazna - choc warto zaznaczyc ze zmienia
   ona flage ZF na nie ustawiona (logiczne 0) !!! ... pewnie
   pomyslales to poco byla ustawiana przy REPZ CMPSB ??? ...
   Otoz jak sie zaraz przekonasz nie ma to wiekszego znaczenia,
   czy flaga ZF jest tam ustawiana czy nie (nie mowie ze tamta 
   instrukcja jest nie wazna - jest bardzo wazna - wazne, ze
   ustawia wartosc w CL na 0 lub nie !!!). W linijce (2) jak juz wiesz
   jest sprawdzane czy w CL jest jakas wartosc rozna od zera ...
   ale teraz od czego uzaleznione jest to czy jest tam zero czy nie
   ??? juz wyjasniam : przed instrukcja REPZ CMPSB w CL byla
   wartosc ktora okreslala z ilu znakow sklada sie nasze HASLO ...
   a teraz pomysl jaka wartosc siedzi w CL po instrukcji REPZ CMPSB
   ??? otoz ta instrukcja jest wykonywana tyle razy ile jest
   znakow w twoim HASLE, czyli CL razy !!! przy czym CL po 
   kazdorazowym wykonaniu instrukcji jest dekrementowane,
   az w koncu (jesli wszystkie znaki pasuja) CL osiaga
   wartosc 0, natomiast nigdy nie osiagnie zera gdy twoje HASLO
   jest zle, bo to dekrementowanie przerwie sie (cala instrukcja
   REPZ CMPSB zakonczy dzialanie) i wyladujesz z wartoscia
   w CL ktora bedzie liczba znakow w twym HASLE minus te ktore 
   pasuja do wzorca. Np. jesli haslo jest "cracking" a ty wpiszesz
   "cractom" to w CL znajdzie sie 7-4 czyli 3 !!!
   Wniosek jest taki : jesli podales dobre haslo to flaga ZF
   jest ustawiona (przed instrukcja (1) !!!) po instrukcji (1)
   zmienia sie na nieustawiona (taka juz jest wlasciwosc 
   instrukcji ADD ;) ) i teraz jezeli bylo prawidlowe HASLO to
   (CL=0) to po wykonaniu instrukcji (2) flaga ZF zostanie ponownie
   ustawiona !!! i nastapi skok (3) (JZ - skok jesli zero (ZF=1)) 
   do procedury wypisujacej ze podalismy dobre HASLO !!!
   a jesli podalismy zle to zostanie wywolany CALL (4), ktory
   spowoduje podanie informacji ze mamy zle HASLO !!! 
   UFFF !!! ... najgorsze wyjasnienie mam juz za soba ... mam
   nadzieje ze zrozumieliscie ;)). 

8. No dobra ... powiedzialem jak program sprawdza czy podalismy
   dobre HASLO czy zle, ale teraz, to co nas najbardziej
   interesuje, jak uzyskac to HASLO ??? Przeanalizujmy jeszcze
   raz co jest robione z naszym HASLEM :
   a) Zamienienie wszystkich liter w HASLE na wielkie. 
   b) zXOR-owanie HASLA ze stringiem "Messing_in_bytes"
   c) jesli ta uzyskana wartosc jest rowna temu :  .,76;=(.=&.1-;7> 
      to mamy prawidlowe HASLO !!!
   Jak wiec je zdobyc ??? Pamietasz z FAQ nr 2 wlasnosc XOR-a ???
   jesli nie to odsylam ... jesli ja znasz to nie powinienes
   miec klopotu z adnalezieniem prawidlowego HASLA ... wystarczy
   tylko zXOR-owac wartosc :  .,76;=(.=&.1-;7>  z  Messing_in_bytes
   i otrzymamy dobre haslo - chyba wiesz dlaczego ???
   No wiec wpisujemy komendy :

            ? 1F2C3736 ^ 4D657373   // .,76  XOR  Mess
            52494445  RIDE
            ? 3B3D2819 ^ 696E675F   // ;=(.  XOR  ing_
            52534F46  RSOF
            ? 3D261A31 ^ 696E5F62   // =&.1  XOR  in_b
            54484553  THES
            ? 2D3B373E ^ 79746573   // -;7>  XOR  ytes
            544F524D  TORM            
  
   UWAGA !!! Stawiam pivo temu kto wyczai jak w S-ice odrazu zXOR-owac
   obydwa stringi (bez rozbijania na grupy po 4 bajty !!!)  
   No ... wystarczy teraz tylko zlaczyc wszystkie wyniki i
   powstanie prawidlowe HASLO !!!!! Czyli :  RIDERSOFTHESTORM
           !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          
   HASLO mozesz zapisac malymi literami bo i tak sa one potem
   konwertowane na duze litery !!!
   Pozostaje tylko wpisac HASLO i dostajemy gratulacje ;)))))

   A teraz UWAGA !!! ... za "zadanie domowe" macie zrozumiec
   dlaczego po wpisaniu HASLA skladajacego sie z jednej
   (jakiejkolwiek) litery, lub z liter poczatkowych
   prawidlowego HASLA np. "riderso", program podaje
   ze wprowadzilismy poprawne HASLO ??????????????????
   hehe ... mam wyrzuty sumienia ze zadaje wam zbyt malo
   "zadania domowego" wiec jeszcze zlamcie ten program 
   tak by mozna bylo wpisac dowolne haslo (banalne zadanie
   no ale coz...), wprawdzie autor zastrzegl ze patche sa
   nie dozwolone, ale dla potrzeb tego FAQ zrobimy wyjatek ;)). 
   Wiec HEX-edytory w ruch ... i piszcie patcha.

OK. KONIEC

====================================================================

UPS! zostalo mi troche miejsca wiec sprobuje zrobic krotkie
wprowadzenie do S-ice'a ;)
Bo widze, ze najwiecej problemow macie wlasnie z nim ;)
Oto (przyblizony) widok na okno S-ice'a !!!

|-----------------------------------------------------------------------------|
|                              <<<<<Rejestry i flagi>>>>>                     |
| EAX=00000074  EBX=0063FD46  ECX=80090480  EDX=8008E0E8  ESI=0040217E        |
| EDI=0063FCFC  EBP=0063FCF4  ESP=0063FCDC  EIP=00401373  o d I s z a p c     |
| CS=0137   DS=013F   SS=013F  ES=013F   FS=2E97  GS=0000                     |
|-----------------------------------------------------------------------------|
|                                                                             |
|                                                                             |
|                                                                         < > |
|-------------------------------------------------byte--------------PROT--(0)-|
|                              <<<<<Okno danych>>>>>                          |
|13F:00000000 9E 0F CB 00 65 04 70 00-16 00 02 D7 63 0D 51 03 ....e.p.....c.Q.|
|13F:00000010 65 04 70 00 54 FF 00 F0-8B EA 00 F0 33 EA 00 F0 e.p.T.......3...|
|13F:00000020 00 00 AF 14 D2 08 2D 0F-3A 00 02 D7 52 00 02 D7 ......-.:...R...|
|13F:00000030 0C 2A 4E DA 82 00 02 D7-9A 00 02 D7 65 04 70 00 .*N.........e.p.|
|13F:00000040 0E 00 F9 14 4D F8 00 F0-41 F8 00 F0 22 25 5C FD ....M...A..."%\.|
|-----------------------------------------------------------------------------|
|                              <<<<<Okno kodu>>>>>                            |
|137:00401371  8A06                  MOV    AL,[ESI]                          |
|137:00401373  84C0                  TEST   AL,AL                             |
|137:00401375  7419                  JZ     00401390                          |
|137:00401377  FE0518214000          INC    BYTE PTR [00402118]               |
|137:0040137D  3C41                  CMP    AL,41                             |
|137:0040137F  7204                  JB     00401385                          |
|137:00401381  3C5A                  CMP    AL,5A                             |
|137:00401383  7303                  JAE    00401388                          |
|137:00401385  46                    INC    ESI                               |
|137:00401386  EBE9                  JMP    00401371                          |
|137:00401388  E825000000            CALL   004013B2                          |
|137:0040138D  46                    INC    ESI                               |
|137:0040138E  EBE1                  JMP    00401371                       < >|
|---------------------------CRACKME2!CODE+0371--------------------------------|
|                              <<<<<Okno komend>>>>>                          |
|:bpx getdlgitemtexta                                                         |
|:                                                                            |
|-------Enter a command (H for help)----------------------------------Crackme2|


Zaczynamy :
1)
W "Rejestry i flagi" - EAX=000... itd. to chyba wszystko jasne ???
w ostatniej linijce : CS=0137 DS=01... to rejestry segmentowe
Jesli podczas wykonywania jakiejs instrukcji ma sie zmienic wartosc
jakiegos rejestru to jest on podswietlony.
Po prawej literki :
o to flaga OF - Overflow flag
d to flaga DF - Direction flag
i to flaga IF - Interrupt enable flag
s to flaga SF - Sign flag
z to flaga ZF - Zero flag
a to flaga AF - Auxiliary flag
p to flaga PF - Parity flag
c to flaga CF - Carry flag
Jesli dana flaga jest ustawiona to literka sie podswietla i 
zamienia na duza litere np. w przykladowym widoku ustawiona
jest tylko flaga IF .
2)
Puste miejsce pomiedzy "Rejestry i flagi" oraz "Okno danych"
to okno w ktorym mozesz obserwowac rozne wartosci ktore
okreslasz przy pomocy komendy <watch>.
3)
W "oknie danych" po lewej sa adresy poszczegolnych komorek
pamieci przedstawione w postaci Segment:offset, oczywiscie
wiadomo ze aktualny segment jest taki jak w DS !!!
Widac ze offsety zmnieniaja sie co 10h.
Nastepnie jest 16 bajtow, posrodku przedzielone kreska, a
potem ich reprezentacja znakowa (ASCII) ... przy czym
jesli nie da sie przedstawic danej liczby hexadecymalnej (bajtu)
w postaci znakowej to stawiany jest znak '.' (kropka).
4)
"Okno kodu" chyba najbardziej nas interesuje. Tak samo jak
w poprzednim oknie po lewej sa adresy. Aktualny segment jest
w CS !!! Offsety zmieniaja sie w zaleznosci od dlugosci
(w bajtach) poszczegolnych instrukcji. Nastepna liczba 
to hexadecymalna reprezentacja instrukcji. Nastepnie
jest instrukcja wraz z operandami. 
Instrukcja, ktora ma sie wlasnie wykonac (po nacisnieciu F10 czy F8)
jest podswietlona.
5)
"Okno komend" sluzy do wpisywania komend za pomoca ktorych sterujemy
S-icem.

W dolnym prawym rogu mamy nazwe programu ktorego kod wlasnie 
analizujemy !!! Tak samo jak ten napis ponad "Okno komend" (CRACKME2!C..). 
Przewijaniem okien strujemy za pomoca myszy lub klawiatury :
Mysza przy pomocy strzalek po prawej stronie okna.
Natomiast klawiatura :
Ctrl+strzalka w gore(czy w dol) lub Ctrl+PgUp(czy PgDn) steruje
przewijaniem okna kodu.
Alt+strzalka w gore(czy w dol) lub Alt+PgUp(czy PgDn) steruje
przewijaniem okna danych.

Jesli nie znasz dzialania jakiejs komendy to wpisz komende
<help> - krotki opis wszystkich komend - lub <help komenda>
np. <help macro> - aby uzyskac pomoc o konkretnej komendzie.
Oczywiscie wszystko po angielsku, ale nawet jesli go nie znasz
powinienes zalapac o co chodzi ;).

A teraz wyjasnie dzialanie "kilku" podstawowych komend w kolejnosci
alfabetycznej (UWAGA!!! ... to nie wszystkie komendy - jest ich
o wiele wiecej !!!):


<a adr>   - Pozwala zmienic instrukcje (ASM) pod adresem "adres"
            na jakas inna. np. <a 024E3A34> ... po tej komendzie
            S-ice kaze nam wpisac jakas instrukcje ASM np.
            <0028:00002345 XOR EDI,EDI> ... sama komenda bez 
            parametrow <a> edytuje instrukcje ASM pod aktualnym
            (podswietlonym) miejscem w "oknie kodu".

<bc nr>   - Kasuje breakpoint o numerze "nr" ... komenda
            <bc *> kasuje wszystkie aktualnie ustawione   
            breakpointy.

<bd nr>   - Wylacza breakpoint (nie kasuje !!!) breakpoint o numerze
            "nr" ... <bd *> wylacza wszystkie.

<be nr>   - Ta komenda wlaczamy uprzednio wylaczone breakpointy ...
            albo jeden o numerze "nr" albo wszystkie <be *>

<bl>      - Listuje wszystkie breakpointy np. w wyniku bedzie takie 
            cos: 
            00)   BPX USER32!GetDlgItemTextA   
            01) * BPMB #0030:0040217E RW DR3
            gwiazdka oznacza ze dany breakpoint jest wylaczony !!!

<bpm adr> - Ustawia breakpoint na dostepie do jakiejs komorki
            pamieci np. <bpm DS:903B94A3>.

<bpx nm>  - Ustawia breakpoint na wywolaniu jakiejs funkcji
            np. znajome <bpx getdlgitemtexta> UWAGA!!! zeby
            z tego zkorzystac musisz zaladowac odpowiednie
            symbole tzn. odblokowac niektore DLL-e w WINICE.DAT
            takie jak USER32.DLL, KERNEL32.DLL i GDI32.DLL 

<cls>     - czysci okno komend.

<code>    - argument on/off ... jesli "on" to w oknie kodu
            po lewej stronie kazdej instrukcji pokazuje
            sie jej odpowiednik hexadecymalny, a jezeli
            off to nie pokazuje. 

<color>   - Niezbyt wazna ... ale ustawia kolory roznych
            czesci S-ice jak text, ramki i inne takie ;)
            Jako argumenty podajesz wartosci hexadecymalne
            kolorow poszczegolnych czesci ... bez argumentow pokazuje
            aktualne kolory.

<d adr>   - Pokazuje dane (hexadecymalne i ASCII) pod adresem
            "adr" w oknie danych.

<db...>   - Instrukcje <db> <dd> <dl> <ds> <dt> <dw> zmieniaja
            format danych w oknie danych np. <db> - dane w postaci
            bajtow ... <dw> - dane w postaci slow (word). Na naszym
            przykladowym ekranie mamy dane w postaci bajtow.

<e adr>   - Edytuje dane (w oknie danych) pod adresem "adr".

<eb...>   - Instrukcje <eb> <ed> <el> <es> <et> <ew> : 
            Edytuja dane (w oknie danych) pod adresem "adr"
            w odpowiednim formacie danych np. byte lub 
            word (bajt lub slowo).    

<faults>  - on/off ... jesli "on" to S-ice przerywa wykonywanie
            programu jesli ten popelni jakis blad. UWAGA!!!
            czasami (jesli nie jestes programista i nie wyszukujesz
            bugow) to lepiej ja wylaczyc bo jesli juz S-ice
            przerwie wykonywanie tego programu to czasem trudno
            z niego wyjsc !!! 

<fkey>    - sluzy do definiowania innych kombinacji klawiszy (do
            wykonywania poszczegolnych zadan) niz standardowe.

<g adr>   - bez parametrow dziala tak jakbys wyszedl z S-ice (F5)
            ... natomiast z parametrem - wykonuje program
            az do adresu "adr" (wtedy S-ice przerywa).

<h>       - <h> = <help> 

<lines>   - okresla w ilu liniach ma sie zmiescic okno S-ice'a
            (ilosc linii musi byc wieksza lub rowna 25 !!!) 

<macro>   - definiuje makro - jesli wpisujesz n razy n komend
            to mozesz zdefiniowac makro ktore Ci to ulatwi.
            np. <macro tom = "lines 50; code on; bpx getwindowtexta">

<r>       - edytuje wartosci rejestrow np. <r ebx=777>

<rs>      - powoduje pokazanie ekranu programu, po nacisnieciu
            jakiegokolwiek klawisza nastepuje powrot do Sic-e.

<s>       - poszukuje w pamieci jakiejs danej ... np.
            <s 0 L FFFFFFFF 'mNICH'> , aby znalezc nastepna
            komorke wystarczy samo <s> (bez parametrow).

<t>       - powoduje to samo co F8 ... czyli wykonanie pojedynczej
            instrukcji (bez wchodzenia w funkcje itp.).

<watch>   - wprowadza dodatkowa jednostke do "obserwacji" .
            np. <watch esp+04> - bedzie (w dodatkowym oknie) 
            pokazywalo wartosc esp+04 (nie to co jest pod adresem
            ESP+04 tylko rzeczywista wartosc np. jesli ESP ma
            wartosc C0F15E94 to ESP+04 bedzie C0F15E98 !!!)

<wc...>   - <wc> : wlacza/wylacza okno kodu
            <wd> : wlacza/wylacza okno danych
            <wr> : wlacza/wylacza okno rejestrow i flag
            <ww> : wlacza/wylacza okno watch-a


Heh... to by bylo na tyle tych komend - reszte musisz sam 
wykombinowac jak dzialaja ;).

Jeszcze na koniec jeden problem z S-ice'm ... wiele osob ma z tym
problem i mnie pytalo wiec musze o nim wspomniec ;). Jesli 
nacisniesz Ctrl+D i nic sie nie pojawi a W95 kompletnie sie 
zawiesi albo cos podobnego to masz ten sam problem. Problem jest 
zwiazany (prawie na pewno) z karta graficzna ... musisz sam dopasowac 
odpowiednie ustawienia w "Display Adapter Setup" ... Ustaw na 
"Standard VGA"/"Standard Display Adapter (VGA)" nastepnie
zaznacz pod spodem "Universal Video Driver..." w wiekszosci
przypadkow powinno zadzialac ;). 

Acha ! i zawsze staraj sie zdobyc najnowsza wersje S-ice'a
ma on dodatkowe sterowniki graficzne ... a poza tym dodatkowe
ciekawe funkcje !!!!!     

To by bylo na tyle ... pamietaj : im wiecej bedziesz lamal 
zabezpieczen tym wiekszej nabierzesz wprawy !!!!!!!!!!!!!!

==================================================================
Linki (UWAGA! wszystkie strony po angielsku!) :

Lord Caligo - cracking.home.ml.org/      Duzy zbior roznych narzedzi
                                         i innego crackerskiego stuffu
                                   
MiB - server.kibla.org/lusers/mib/       Kilka dobrych FAQ i
                                         kilka dobrych programikow Crackme
                                         wraz z rozwiazaniami

+Fravia - fravia.org/      bardzo dobra strona czlonka +HCU
                           bardzo duzo opisow zlaman

ASM tutorials - www.la-online.com/assembly.htm      Duzo faq dotyczacych ASM-a

+Greythorne - home.sol.no/reopsahl/files/assem.htm    ciekawa strona 
                                                      o Crackingu i ASM

Reszte poszukaj - jest troche linkow na powyzszych stronach,
jesli znasz jakas polska strone crackerska, a moze sam zakladasz,
bo przydala by sie strona z najnowszymi narzedziami i dobrym transferem ;). 
oczywiscie Mail me !!!

