                     _______                   ______
                     |   _   |-----.--.--.-----.   _  \
                     |   1___|  -__|  |  |  -__|.  |   |
                     |____   |_____|\___/|_____|.  |   |
                     |:  1   |                 |:  |   |
                     |::.. . | POLISH CRACKERS |::.|   |
                     `---===='__             __`-==_---'
                        |       |-----.---.-.   Y   |
                        |.|   | |  -__|  _  |.      |
                        `-|.  |-'_____|___._|. \_/  |
                          |:  |             |:  |   |
                          |::.|             |::.|:. |
                          `---'             `--- ---'

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=i n f o r m a t i o n s-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

   prog name   : Crackme 2.2 by LobiX - skill medium
   Date        : 03.05.2000
   Writen by   : plastek
   What        : tut ;)

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-t u t o r i al-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Ok zaczynamy od wstepnego rozpoznania odpalamy crackme i juz na poczatku widzimy 
015F:00401000  MOV       [00403228],ESP
015F:00401006  PUSH      004013E7
015F:0040100B  CALL      KERNEL32!SetUnhandledExceptionFilter 
015F:00401010  MOV       EBP,4243484B 		;to taki bajer poczytaj o anti-si
015F:00401015  MOV       EAX,00000004		;konkretnie o BCHK
015F:0040101A  INT       3
015F:0040101B  PUSH      00
015F:0040101D  CALL      KERNEL32!ExitProcess
co to oznacza dla nas???
jezeli jest odpalony SI (niezapatchowany bo te niedogodnosc mozna usunac) to program po wykonaniu INT3 pojdzie dalej do ExitProcess a to oznacza koniec roboty :(
co w takim razie zrobic???
przed CALL      KERNEL32!SetUnhandledExceptionFilter
mamy  push 	004013E7 i tu program by skoczyl gdyby SI nie bylo wiec
przerabiamy pod hexeditem ten push 004013e7 na... nie nie na jmp 4013e7 :) gdyz musimy podac offset pod jaki ma skoczyc program  bedzie to jmp 7e7 !!! (wiem ze to troche zakrecone ale coz to wynika z budowy pliku)
ok mamy juz jmp i idziemy dalej :)
015F:004013E7  MOV       ESP,[00403228]
015F:004013ED  PUSH      00
015F:004013EF  CALL      KERNEL32!GetModuleHandleA
015F:004013F4  MOV       [00403220],EAX
015F:004013F9  CALL      KERNEL32!GetCommandLineA
015F:004013FE  PUSH      0A
015F:00401400  PUSH      DWORD PTR [00403224]
015F:00401406  PUSH      00
015F:00401408  PUSH      DWORD PTR [00403220]
015F:0040140E  CALL      00401419		<-tu jak domyslamy sie nalezaloby wejsc
015F:00401413  PUSH      EAX			;bo potem ExitProcess :((
015F:00401414  CALL      KERNEL32!ExitProcess	
a teraz moze mala dygresja odpalamy w32dasm lub IDA i deasemblujemy nastepnie dajemy Find i wpisujemy SIDT (dlaczego to sie by wyjasnilo po paru fake procedurkach :))
i co???
no tak mamy cos takiego:
015F:00401317  PUSH      EAX
015F:00401318  CALL      USER32!EnableMenuItem  
015F:0040131D  SIDT      FWORD PTR [0040322C]	;no tu jest nasze SIDT
015F:00401324  MOV       EAX,[0040322E]
015F:00401329  ADD       EAX,08
015F:0040132C  MOV       EBX,[EAX]
015F:0040132E  ADD       EAX,10
015F:00401331  MOV       EAX,[EAX]
015F:00401333  AND       EAX,0000FFFF
015F:00401338  AND       EBX,0000FFFF
015F:0040133E  SUB       EAX,EBX
015F:00401340  CMP       EAX,1E
015F:00401343  JNZ       0040134C 		;tu najlepiej przerobic na jmp
015F:00401345  MOV       BYTE PTR [0040321C],01 ;jesli jest SI to pod 40321c mamy 1
015F:0040134C  RET
ta procka ukazuje sie w chwili tworzenia dialoga kiedy jest tworzone menu i pod to Lobix podpial SIDT 
no tak ale co to jest to SIDT??? 
odpowiedz w wielu tutach ;)
aby sie tego pozbyc mozemy uzyc COOKIESICE (najlepsze chyba narzedzie do tego a propos thx to CoxoC & massh) albo zapatchowac
wiec zapatchujmy jesli nie mamy COOKIESICE pod reka
masz???
ok idziemy dalej czyli uruchamiamy progsa i F5 bo wiecej bajerow nie stwierdzilem :)
no dobra mamy do wpisania heselko tylko nie wiemy jakie :( wiec wpisujemy byle co (mozesz nawet wpisac "byle co" jesli chcesz ale najlepiej wpisz byle co :)) np plastek :)))
no i co dalej???
najczesciej uzywana funkcja w krakmikach do pobierania txtu jest GetDlgItemTextA wiec na niej BPX
i OK ale co to??? program sie nie lapie na tym tylko wywala Wrong pass....
no dobra sprobujemy GetWindowTextA tez nic :(((
i nic innego tez nie dziala :( no dobra powiem o co chodzi 
daj BPX SendDlgItemMessage i sie na tym zlapie po wyjsciu z funkcji i po ret wracamy do czegos takiego ta funkcja zwrocila nam liczbe znakow seriala
015F:00401360  CALL      004011FB ;tu bylismy
015F:00401365  ROR       EAX,04   ;
015F:00401368  DEC       EAX
015F:00401369  ROL       EAX,04
015F:0040136C  ADD       EAX,02
015F:0040136F  ROR       EAX,04
015F:00401372  DEC       EAX
015F:00401373  JZ        0040137D   ;jesli eax=0 to good jmp                            
015F:00401375  LEA       EAX,[00401382]
015F:0040137B  JMP       EAX	    ;bad :((
I) 015F:0040137D  CALL      0040108F   ;tu trzeba zajrzec :)

czyli nasz serial musi miec tyle znakow aby bylo 0 sprobujmy wiec to odwrocic:
eax=0
INC EAX
ROL EAX
SUB EAX,2
ROR EAX,4
INC EAX
ROL EAX,4
po wykonaniu tego otrzymujemy EAX=1E=30 czyli tyle musi byc znakow w serialu!!!
dobra piszemy wiec serial 123456789012345678901234567890
ok odpalamy jeszcze raz (ile to jusch bylo???) przechodzimy przez te procke bez problemu i wchodzimy w (I).
potem troche przejedziemy i okaze sie ze na chwile pojawia sie cos takiego
015F:004010AC  CALL      05B7F901
015F:004010AD  PUSH      EAX
015F:004010AE  CALL      USER32!GetWindowTextA
czyli dopiero tu jest pobierany txt
II) 015F:004010B3  CALL      00401066         ;tu jest procka ktora oblicza sume hex znakow seriala do edx suma 15 pierwszych a do eax 15 ostatnich ;) ale nie bedziemy sie nad tym roztrzasac
015F:004010B8  LEA       EDI,[004031E5]	 
015F:004010BE  MOV       ECX,0000001E
015F:004010C3  REPZ MOVSB
015F:004010C5  SUB       ESI,1E
015F:004010C8  SUB       EDI,1E
015F:004010CB  SUB       EAX,EDX         ;tu odejmuje sume obliczona wczesniej (II)
015F:004010CD  SUB       EAX,000000D5    ;i odejmuje jeszcze D5 od reszty
015F:004010D2  JZ        004010DA	 ;jesli 0 to good jesli nie to chyba sami wiecie
tu najlepiej zmienic flage przy przechodzeniu bo nie ma po co bawic sie serialem
015F:004010D4  POP       EAX
015F:004010D5  MOV       EAX,[ESP]
015F:004010D8  JMP       EAX		;tu skok bad :(((
015F:004010DA  XOR       ECX,ECX	;chyba wiadomo co to???
015F:004010DC  XOR       EAX,EAX
015F:004010DE  MOV       BL,[ESI+1D]	;odtad jest procka mielaca nasz serial
015F:004010E1  CMP       ECX,-0F	
015F:004010E4  JZ        004010FC
015F:004010E6  NEG       ECX
015F:004010E8  XOR       [ESI+ECX],BL
015F:004010EB  MOV       AL,[ESI+ECX]
015F:004010EE  NEG       ECX
015F:004010F0  MOV       BL,[ESI+ECX+1C]
015F:004010F4  ROL       AL,CL
015F:004010F6  XOR       [ESI+ECX+1D],AL
015F:004010FA  LOOP      004010E1	;jak skonczy mielic to 
015F:004010FC  CALL      00401066	;wchodzi do tego calla i liczy sumy hex znakow jak w (I)
015F:00401101  SHL       EDX,1
015F:00401103  SUB       EDX,EAX
015F:00401105  INC       EDX
015F:00401106  ROR       EDX,04
015F:00401109  DEC       EDX
015F:0040110A  JZ        00401112      ;jak 0 to good czyli zmiana flagi
015F:0040110C  POP       EAX
015F:0040110D  MOV       EAX,[ESP]
015F:00401110  JMP       EAX		;bad :(
od tego miejsca mamy same delicje czyli wyliczanie poprawnego seriala -  w przeciwienstwie do tych z fake procek (ktore IMHO tez rozwalilem zanim znalazlem ten SIDT ale coz czlowiek sie uczy do tego sa bardzo fajne) ten serial jest bardzo latwo znalezc :)))) ale opisze krok po kroku
015F:00401112  MOV       EAX,9C9E8DBD 	;do eax 9c9e8dbd
015F:00401117  ADD       [EDI],EAX	;i zsumowanie tego z pierwszymi 4 znakami seriala
015F:00401119  JNZ       0040110C	;jesli <>0 to baaaaaad jmp 
zeby bylo zero pierwsze 4 znaki naszego seriala musza dac po zsumowaniu z 9c9e8dbd 0 czyli napiszmy w SI  ?0-eax (jesli w eax jest ta liczba of coz) czyli:
:?0-eax
63617243  1667330627  "carC"  ;	no tak ale po zapisaniu tego w odwrotnej kolejnosci otrzymujemy "Crac" i to zapiszmy na kartce lub w pamieci (na razie nie tej komputerowej)
zmienmy flage i idziemy dalej 
015F:0040111B  MOV       EAX,20654D6B   ;do eax 2065d6b
015F:00401120  SUB       [EDI+04],EAX   ;i odjecie od tego kolejnych 4 znakow seriala ;)
015F:00401123  JNZ       0040110C	;to samo jak wyzej
ok mamy miec 0 wiec jaka liczba po odjeciu od niej 20654d6b da nam 0 ???
oczywiscie 20654d6b (to wyzsza matematyka tego nie ucza w podstawowce)
wpiszmy ?20654d6b zeby zobaczyc co to jest za string
:?20654d6b
20654D6B  0543509867  " eMk"  ; i na odwrot to jest "kMe " czyli razem z tym pierwszym tworzy 
"CrackMe " (to " " to spacja) notujemy zmieniamy flage i dalej mamy
015F:00401125  MOV       EAX,DFCFD1CE
015F:0040112A  ADD       [EDI+08],EAX
015F:0040112D  JNZ       0040110C	;bad
no tu juz wiemy co zrobic 
:?0-dfcfd1ce
20302E32  0540028466  " 0.2" ; czyli "2.0 " i razem mamy "CrackMe 2.0 " czyli juz robi sie coraz ciekawiej :)) zmiana flagi i mamy
015F:0040112F  MOV       EAX,[EDI+0C] ;kolejne 4 znaki seriala do eax
015F:00401132  CMP       EAX,4C207962 ; i porownanie ich z 4c207962 
015F:00401137  JNZ       0040110C	;bad
czyli musza one byc rowne 4c207962 wiec
:?4c207962
4C207962  1277196642  "L yb" ; po odwroceniu kolejnosci jest "by L" czyli "CrackMe 2.0 by L" 
015F:00401139  MOV       EAX,A7969D91	
015F:0040113E  ADD       [EDI+10],EAX
015F:00401141  JNZ       0040110C	;bad
i znowu (to juz staje sie nudne :((()
:?0-a7969d91
5869626F  1483301487  "Xibo" ; czyli "CrackMe 2.0 by LobiX" 
015F:00401143  MOV       EAX,8DBCA4E0
015F:00401148  ADD       [EDI+14],EAX
015F:0040114B  JNZ       0040110C	;bad
to samo
:?0-8dbca4e0
72435B20  1917016864  "rC[ " ; "CrackMe 2.0 by LobiX [Cr"
015F:0040114D  MOV       EAX,AF949C9F
015F:00401152  ADD       [EDI+18],EAX
015F:00401155  JNZ       0040110C	;bad
:?0-af949c9f
506B6361  1349215073  "Pkca"	;czyli "CrackMe 2.0 by LobiX [CrackP"
015F:00401157  MOV       AX,A2B4
015F:0040115B  ADD       [EDI+1C],AX
015F:0040115F  JNZ       0040110C	;bad
:?0-a2b4
FFFF5D4C  4294925644 (-41652)  "]L"  ;no i tu koniec bierzemy tylko te 5d4c bo jest porownanie tylko z dwoma (ostatnimi znakami) i koncowe heselko brzmi
"CrackMe 2.0 by LobiX [CrackPL]" ;oczywiscie nalezy usunac te "" przy wpisywaniu bo to tylko dla odznaczenia !!!
015F:00401161  XOR       ECX,ECX	   ;tu nastepuje deszyfrowanie stringu 
015F:00401163  CMP       ECX,10		   ;"You R the BEST!" korzystajac z tego przerabionego 	015F:00401166  JZ        00401176	   ;seriala 
015F:00401168  MOV       EAX,[ECX+0040320C]
015F:0040116E  XOR       [ESI+ECX],EAX
015F:00401171  ADD       ECX,04
015F:00401174  JMP       00401163
015F:00401176  PUSH      00000BB8
015F:0040117B  PUSH      DWORD PTR [00403264]
015F:00401181  CALL      USER32!GetDlgItem
015F:00401186  PUSH      00
015F:00401188  PUSH      EAX
015F:00401189  CALL      USER32!EnableWindow
015F:0040118E  MOV       BYTE PTR [0040321D],01
015F:00401195  LEA       EDX,[00403232]
015F:0040119B  PUSH      004011A3
015F:004011A0  RET				;i tu powrot pod adres 4011a3 gdzie to zostaje wykonany call triumfalnie wyswietlajacy string "You R the BEST!" i okienko do wprowadzania txtu wylacza sie :))))

Jesli cos jeszcze jest niezrozumiale NIE pisz do mnie!!! bo nie mozna tego nie zrozumiec 

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=members of SeveN TeaM-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

  Prezident:      MaxiBogas...........................founder/coder/cracker
  VizePrezident:  Plastek.............................founder/coder/cracker
  Seniors:
                  pawlos............................................cracker
                  Mr. Ketchup.......................................cracker 
                  Rusty.............................................cracker
  Division:
                  Jube........................................cracker/coder
                  {ATOM}....................................decoder/cracker
                  jamman............................................cracker
  Trial:
                  Pokropek..........................................cracker
                  lukasw............................................cracker
                  Dumboo............................................cracker
                  zoomek.....................................writer/cracker
  WebPage:
                  LIAR..............................webmaster/graphic/coder
                  _2000_.......................................server_admin

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-o t h e r s-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

  Greets to : Cys, mNICH, smola, Mietor, _r00t_, Liquid^, AraKuS
     groups : CrackPL, AAOCG, CookieCrk

  My e-mail: marbardi@alpha.net.pl
             ~~~~~~~~~~~~~~~~~~~~~
  SeveN TeaM - Official WebPage:  http://www.7team.z.pl
                                  ~~~~~~~~~~~~~~~~~~~~~
-=-=-=E-O-T=-=-=-=E-O-T=-=-=-=E-O-T=-=-=-=E-O-T=-=-=-=E-O-T=-=-=-=E-O-T=-=-=-=E-O-T=-=-=-=E-O-T=-