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

                                CrackPl prezentuje 
                             by GustawKit - 23-10-1998
__________________________________________________________________________________

Target: Readiris 16/32 v 3.95
Where : CD PCWKomputer 6A/98
What  : Serial
Tools : SoftICE


Ok. dobra zaczynamy. 
Instalujesz program i wpisujesz numer trial ten, ktory podany jest na
plycie. Masz zarejestrowany jako trial, przy starcie pyta czy chcesz go zarejestrowac jako
pelny. Oczywiscie, ze chcemy. Pojawia sie okienko dialogowe, u gory jest numer identyfikacyjny,
u mnie byl 3153004816BF8280E02 ale ogolnie to jest on malo wazny. U dolu wpisujemy numer
seryjny. Zakladam, ze SoftIce jest zaladowany, wiec przechodzimy do SoftIce (standardowo
Ctrl+d) i zakladamy pulapke na wywolaniu funkcji API - GetDlgItemTextA czyli bpx
GetDlgItemTextA. Przechodzimy spowrotem do programu (Ctrl+d) i wpisujemy jakis dowolny
charakterystyczny numer. Ja z reguly wpisuje 654321, i naciskamy Ok. SoftIce przejmie nam
kontrole nad wywolaniem funkcji GetDlgItemTextA i SoftIce wyswietli nam kod tej funkcji w
module USER32. Teraz nalezy nalezy nacisnac F11 co da nam powrot do miejsca gdzie wywolana byla
ta funkcja i powinien pojawic sie taki oto fragment kodu :

014F:00407FFF  FF1570574800        CALL    [USER32!GetDlgItemTextA]
014F:00408005  68027F0000          PUSH    00007F02			-->Jestesmy tutaj kursorem
014F:0040800A  6A00                PUSH    00
014F:0040800C  FF1598574800        CALL    [USER32!LoadCursorA]
014F:00408012  50                  PUSH    EAX
014F:00408013  FF15B0574800        CALL    [USER32!SetCursor]
014F:00408019  8945F8              MOV     [EBP-08],EAX
014F:0040801C  FF1570554800        CALL    [KERNEL32!GetTickCount]
014F:00408022  05B80B0000          ADD     EAX,00000BB8
014F:00408027  8945FC              MOV     [EBP-04],EAX
014F:0040802A  FF1570554800        CALL    [KERNEL32!GetTickCount]
014F:00408030  3B45FC              CMP     EAX,[EBP-04]
014F:00408033  0F8305000000        JAE     0040803E
014F:00408039  E9ECFFFFFF          JMP     0040802A
014F:0040803E  8B45F8              MOV     EAX,[EBP-08]
014F:00408041  50                  PUSH    EAX
014F:00408042  FF15B0574800        CALL    [USER32!SetCursor]
014F:00408048  6828154800          PUSH    00481528	
014F:0040804D  6840154800          PUSH    00481540
014F:00408052  6810324800          PUSH    00483210
014F:00408057  E898010000          CALL    004081F4
014F:0040805C  83C40C              ADD     ESP,0C
014F:0040805F  85C0                TEST    EAX,EAX
014F:00408061  0F841B000000        JZ      00408082
014F:00408067  6A01                PUSH    01

Jestesmy teraz w momencie, kiedy program pobral dane z okienka dialogowego czyli nasz wpisany
654321. Teraz przegladamy kod programu w dol i szukamy ciekawych rzeczy. Funkcja GetTickCount
pobiera jakis czas i w petli odczekuje chwile, jest to pierdola i nie ma rzadnego znaczenia.
Najciekawiej zapowiada sie koncowy fragment kodu :

014F:00408048  6828154800          PUSH    00481528		--> tu jest wpisany numer
014F:0040804D  6840154800          PUSH    00481540     --> tu jest nr. ident. programu
014F:00408052  6810324800          PUSH    00483210     --> tu jest numer trial
014F:00408057  E898010000          CALL    004081F4     --> funkcja sprawdzajaca kod
014F:0040805C  83C40C              ADD     ESP,0C
014F:0040805F  85C0                TEST    EAX,EAX		--> jezeli EAX = 0
014F:00408061  0F841B000000        JZ      00408082		--> to kod poprawny

Aby dojsc do tego fragmentu mozemy sledzic po instrukcji naciskajac (F10) lub lepiej kliknac
dwukrotnie myszka na linijce z PUSH 00481528 co zastawi nam pulapke na tej lini i uruchomic
dalej program (F5). Program po chwili zatrzyma sie na tej linijce.
Instrukcje PUSH klada na stos informacje zawarte pod danymi adresami. Jezeli chcemy cos
wyswietlic to urzywamy instrukcji d czyli dajemy np. d 00481528 i w okienku data pojawi sie nam
zawartosc pod tym adresem a w naszym wypadku jest to 654321 czyli kod ktory wpisalismy.
Podobnie ogladajac 481540 - mamy tam fragment numeru identyfikacyjnego programu a pod 00483210
mamy numer trial, ktory byl na plytce i ktory wpisalismy.
Nastepnie widzimy wywolanie CALL a pozniej sprawdzenie rejestru EAX i odpowiednio skok dobry
kod/zly kod.
Aby dowiedziec sie z czym porownywany jest kod musimy wejsc do funkcji wywolanej w CALL czyli
sledzimy program F10 i w momencie CALL wchodzimy w nia klawiszem F8. Otrzymujemy taki oto
fragment kodu :

014F:004081F3  C3                  RET
014F:004081F4  55                  PUSH    EBP
014F:004081F5  8BEC                MOV     EBP,ESP
014F:004081F7  83EC70              SUB     ESP,70
014F:004081FA  53                  PUSH    EBX
014F:004081FB  56                  PUSH    ESI
014F:004081FC  57                  PUSH    EDI
014F:004081FD  8B4508              MOV     EAX,[EBP+08]
014F:00408200  50                  PUSH    EAX
014F:00408201  E8D4000000          CALL    004082DA
014F:00408206  83C404              ADD     ESP,04
014F:00408209  85C0                TEST    EAX,EAX
014F:0040820B  0F8507000000        JNZ     00408218
014F:00408211  33C0                XOR     EAX,EAX
014F:00408213  E9BD000000          JMP     004082D5
014F:00408218  8B4508              MOV     EAX,[EBP+08]
014F:0040821B  0FBE00              MOVSX   EAX,BYTE PTR [EAX]
014F:0040821E  83F834              CMP     EAX,34
014F:00408221  0F851A000000        JNZ     00408241
014F:00408227  8B4508              MOV     EAX,[EBP+08]
014F:0040822A  0FBE4001            MOVSX   EAX,BYTE PTR [EAX+01]
014F:0040822E  83F833              CMP     EAX,33
014F:00408231  0F850A000000        JNZ     00408241
014F:00408237  B801000000          MOV     EAX,00000001
014F:0040823C  E994000000          JMP     004082D5
014F:00408241  837D1000            CMP     DWORD PTR [EBP+10],00
014F:00408245  0F8507000000        JNZ     00408252
014F:0040824B  33C0                XOR     EAX,EAX
014F:0040824D  E983000000          JMP     004082D5
014F:00408252  6834314700          PUSH    00473134             -->Tu jest poprawny numer
014F:00408257  8B4510              MOV     EAX,[EBP+10]
014F:0040825A  50                  PUSH    EAX
014F:0040825B  E880DA0500          CALL    00465CE0				--> sprawdzenie
014F:00408260  83C408              ADD     ESP,08
014F:00408263  85C0                TEST    EAX,EAX
014F:00408265  0F850A000000        JNZ     00408275
014F:0040826B  B801000000          MOV     EAX,00000001
014F:00408270  E960000000          JMP     004082D5

Program tutaj porownuje wpisany przez nas kod czyli 654321 najpierw z numerem trial i cos tam
jeszcze. Nie bede analizowal dokladnie bo nie ma potrzeby. Interesuje nas linijka : 

014F:00408252  6834314700          PUSH    00473134

gdy dojdziemy do niej (F10) i wyswietlimy zawartosc adresu 00473134 to otrzymamy poprawny kod w
okienku data. W moim wypadku bylo to 3873.
Teraz uruchamiajac dalej program (CTrl+d), mozemy wczesniej wylaczyc wszystki pulapki i
wpisujemy ten wlasnie numer. Okazuje sie, ze program jest zarejestrowany. Dane zapisane
sa w win.ini

____________________________________________________________________________
|   Crackpl - http://friko6.onet.pl/ns/gcrkpl/                             |
|   GustawKit.......[cracker,writer]                                       |
|   Zomo/BBU........[cracker,admin Crackpl Maillist]                       |
|__________________________________________________________________________|
