Witam po raz kolejny. Nie bedzie to standartowy tutorial, jakiego sie mozna spodziewac, ale opis sposobu w jaki udalo mi sie zcrackowac ta gierke.
Jezeli nie czytales moich wczesniejszych tutoriali to musisz sie z nimi zapoznac, gdyz bede robil pewne skróty i nie bede opisywal dokladnie co i jak.
Okej Let's go
Zaczalem standardowo: pulapki na GetWindowTextA, GetDlgItemTextA. No swietnie zadzialalo. Znalazlem miejsce gdzie jest wpisany mój wymyslony kod i lipa. W trakcie sledzenia programu, okazalo sie ze ten kod jest modyfikowany ;((.
Hmm wlasciwie to kilka razy jest cosik robione z nim. To mnie ostudzilo ;)) Postanowilem jednak sie nie poddawac tak szybko. Postanowilem zaczac poszukiwania od konca. Skasowalem istniejace pulapki :bc * i zalozylem nowa : bpx MessageBoxA. No to rejestrujemy "wyskakuje boxik" i jestesmy w SI. F11 wyskakujemy z funkcji (hmm i czasami z SI (??), pokombinujcie z rózna dlugoscia seriala). Dobra przewinalem troszkie do góry ekran z kodem (ctrl+strzaleczki) i ujrzalem cosik takiego:
015F:0040CEBF 90 NOP 015F:0040CEC0 A18CFA4100 MOV EAX,[0041FA8C] 015F:0040CEC5 56 PUSH ESI 015F:0040CEC6 85C0 TEST EAX,EAX 015F:0040CEC8 0F85AC000000 JNZ 0040CF7A 015F:0040CECE 8B742408 MOV ESI,[ESP+08] 015F:0040CED2 A144FB4100 MOV EAX,[0041FB44] 015F:0040CED7 6A00 PUSH 00 015F:0040CED9 6810A74000 PUSH 0040A710 015F:0040CEDE 56 PUSH ESI 015F:0040CEDF 6864C74100 PUSH 0041C764 015F:0040CEE4 50 PUSH EAX 015F:0040CEE5 FF1548454200 CALL [USER32!DialogBoxParamA] 015F:0040CEEB 85C0 TEST EAX,EAX 015F:0040CEED 0F84B4000000 JZ 0040CFA7 015F:0040CEF3 A18CFA4100 MOV EAX,[0041FA8C] 015F:0040CEF8 85C0 TEST EAX,EAX 015F:0040CEFA 742D JZ 0040CF29 015F:0040CEFC 6810C34100 PUSH 0041C310 015F:0040CF01 56 PUSH ESI 015F:0040CF02 FF153C454200 CALL [USER32!SetWindowTextA] 015F:0040CF08 6A40 PUSH 40 015F:0040CF0A 6A2B PUSH 2B 015F:0040CF0C E81F5BFFFF CALL 00402A30 015F:0040CF11 83C404 ADD ESP,04 015F:0040CF14 50 PUSH EAX 015F:0040CF15 6A2A PUSH 2A 015F:0040CF17 E8145BFFFF CALL 00402A30 015F:0040CF1C 83C404 ADD ESP,04 015F:0040CF1F 50 PUSH EAX 015F:0040CF20 56 PUSH ESI 015F:0040CF21 FF15A4444200 CALL [USER32!MessageBoxA] 015F:0040CF27 5E POP ESI 015F:0040CF28 C3 RET 015F:0040CF29 6A09 PUSH 09 015F:0040CF2B E890D2FFFF CALL 0040A1C0 015F:0040CF30 A148FB4100 MOV EAX,[0041FB48] 015F:0040CF35 83C404 ADD ESP,04 015F:0040CF38 85C0 TEST EAX,EAX 015F:0040CF3A 6A10 PUSH 10 015F:0040CF3C 6A2C PUSH 2C 015F:0040CF3E 741D JZ 0040CF5D 015F:0040CF40 E8EB5AFFFF CALL 00402A30 015F:0040CF45 83C404 ADD ESP,04 015F:0040CF48 50 PUSH EAX 015F:0040CF49 6A2D PUSH 2D 015F:0040CF4B E8E05AFFFF CALL 00402A30 015F:0040CF50 83C404 ADD ESP,04 015F:0040CF53 50 PUSH EAX 015F:0040CF54 56 PUSH ESI 015F:0040CF55 FF15A4444200 CALL [USER32!MessageBoxA] 015F:0040CF5B 5E POP ESI 015F:0040CF5C C3 RET 015F:0040CF5D E8CE5AFFFF CALL 00402A30 015F:0040CF62 83C404 ADD ESP,04 015F:0040CF65 50 PUSH EAX 015F:0040CF66 6A2E PUSH 2E 015F:0040CF68 E8C35AFFFF CALL 00402A30 015F:0040CF6D 83C404 ADD ESP,04 015F:0040CF70 50 PUSH EAX 015F:0040CF71 56 PUSH ESI 015F:0040CF72 FF15A4444200 CALL [USER32!MessageBoxA] 015F:0040CF78 5E POP ESI 015F:0040CF79 C3 RET 015F:0040CF7A 6A09 PUSH 09 015F:0040CF7C E83FD2FFFF CALL 0040A1C0 015F:0040CF81 83C404 ADD ESP,04 015F:0040CF84 6A40 PUSH 40 015F:0040CF86 6A28 PUSH 28 015F:0040CF88 E8A35AFFFF CALL 00402A30 015F:0040CF8D 83C404 ADD ESP,04 015F:0040CF90 50 PUSH EAX 015F:0040CF91 6A2F PUSH 2F 015F:0040CF93 E8985AFFFF CALL 00402A30 015F:0040CF98 8B4C2414 MOV ECX,[ESP+14] 015F:0040CF9C 83C404 ADD ESP,04 015F:0040CF9F 50 PUSH EAX 015F:0040CFA0 51 PUSH ECX 015F:0040CFA1 FF15A4444200 CALL [USER32!MessageBoxA] 015F:0040CFA7 5E POP ESI 015F:0040CFA8 C3 RET
Jak widzimy wywolan MessageBoxA jest kilka, pobawilem sie z ta procka, zmieniajac flagi przy skokach i obserwowalem co sie dzieje. Nie bede tu opisywal co i ja bo:
po pierwsze: nie pamietam co i jak ;)))
po drugie: sam to mozesz zrobic ;))
Zauwazcie pewna instrukcje pojawiajaca sie kilka razy:
MOV EAX,[0041FA8C]
Hmm no tak wyglada to jak znacznik zarejestrowania. Dlaczego tak sadze?? Bo po któryms skoku cieszylem oko widokiem zarejestrowania ;)) Dobra wyczyscilem pulapki :bc* i zalozylem kolejna
:bpmb 0041fa8c rw
Wyszedlem z SI, i próbowalem zarejestrowac gierke, hmm pulapka dzialala ale nic ciekawego nie znalazlem :(( Hmm nagle mnie olsnilo. Zamknalem program i odpalilem na nowo. No teraz calkiem, calkiem:
015F:0040AAE2 50 PUSH EAX 015F:0040AAE3 51 PUSH ECX 015F:0040AAE4 FFD5 CALL EBP 015F:0040AAE6 F7D8 NEG EAX 015F:0040AAE8 1BC0 SBB EAX,EAX 015F:0040AAEA 40 INC EAX 015F:0040AAEB A38CFA4100 MOV [0041FA8C],EAX ; Znacznik zarejestrowania 015F:0040AAF0 7576 JNZ 0040AB68 015F:0040AAF2 8D54243C LEA EDX,[ESP+3C] 015F:0040AAF6 52 PUSH EDX 015F:0040AAF7 FF150C454200 CALL [USER32!CharUpperA] 015F:0040AAFD 8D44243C LEA EAX,[ESP+3C] 015F:0040AB01 33F6 XOR ESI,ESI 015F:0040AB03 50 PUSH EAX 015F:0040AB04 FF1594434200 CALL [KERNEL32!lstrlen] 015F:0040AB0A 85C0 TEST EAX,EAX 015F:0040AB0C 7E2F JLE 0040AB3D 015F:0040AB0E 0FBE44343C MOVSX EAX,BYTE PTR [ESI+ESP+3C] 015F:0040AB13 83F841 CMP EAX,41 015F:0040AB16 7C0E JL 0040AB26 015F:0040AB18 83F85A CMP EAX,5A 015F:0040AB1B 7F09 JG 0040AB26 015F:0040AB1D 0FAF05D8F94100 IMUL EAX,[0041F9D8] 015F:0040AB24 EB05 JMP 0040AB2B
Jest wreszcie !!! Dobra trzeba teraz jakos wstawic 01 do eax i program juz na starcie bedzie zarejestrowany ;)) Hmm ta czesc kodu:
015F:0040AAE6 F7D8 NEG EAX 015F:0040AAE8 1BC0 SBB EAX,EAX 015F:0040AAEA 40 INC EAX
nie bedzie nam potrzebna. Zamiast niej umiescimy komende mov eax,00000001
Kasujemy pulapki :bc* i wychodzimy SI. Teraz pora odpalic jakiegos edytorka Ja uzywam Hieva 5.92 ale moze byc dowolny. Kopiuje plik sspro32.exe do innego katalogu. Znajduje offset aae6 (f5 i .aae6 w Hiew)i wklepuje zamiast F7d81bc040 taki oto ciag b801000000 co odpowiada komendzie mov eax,00000001. Oki F9 i F10 i spróbujmy odpalic progsa. Zalama :(( Wyrzuca mi jakies info o zwaleniu jakiegos progsa itp itd. To co sie teraz stalo bylo kolejnym cudem nad Wisla. Po raz kolejny sprawdzilo sie powiedzenie ze crackerom potrzebne jest szczescie ;)) Przez przypadek zmienilem nazwe zapatchowanego progsa na inna i skopiowalem oryginalnego do katalogu, aby sprawdzic czy sie cosik gdzies nie namieszalo w rejestrach ze wali ten komunikat i odpalilem tego poprawnego. Odpalil sie jako unregistered, ale to oznaczalo ze to wina tego zapatchowanego. Dobra odpalam tego zapatchowanego i..........fiu co ja widze ?? Registered to AsmGoth/CP!. Hmm mysle sobie co jest grane ?? Skad on wiedzial ?? W windowsach znalazlem plik sspro.ini, a wiec tam sa zapisywane dane z rejestracji. Hmm ale, name jest okej ale number jest jakis lewy, to nie to samo co ja wpisywalem to jakis szyfrowany :)), i na pewno to nie jest ten wlasciwy! Ech co sie zamartwiac, przeciez caly czas mam tamtego zapatchowanego, który chodzi. Dobra no to usunalem znowu oryginala, odpalam poprawionego i kolejny komunikat. Tym razem cosik, ze nie moze znalezc pliku sspro32.exe i jeszcze jakiegos helpa. Ano tak nie zmienilem nazwy, Zmieniam nazwe odpalam i znajomy komunikat o koniecznej nowej instalacji ze wzgledu na uszkodzenie jakiegos pliku. No cóz zmienilem nazwe zapatchowanego na loader.exe ;)), wrzucilem oryginala do katalogu i zrobilem linka do loader.exe
Od tej pory wita mnie: Registered by AsmGoth/CP! Próbowalem jeszcze w Wdasmie cracknac coby sie rejestrowal na dowolny serial. Ale cosik chrzanilo mi sie. Znalazlem miejsce w którym jest sprawdzenie (tak mi sie wydaje) ale po zamianie skoków przywital mnie nowym komunikatem o uszkodzeniach pliku czy cosik takiego ;(( Dalem sobie spokój, przeciez cel zostal w zasadzie osiagniety. Metoda jest najgorsza jaka moze byc ale cel uswieca srodki.
Mam jeszcze pare pomyslów np. poszukac z czym porównywany jest ten serial z sspro.ini moze z prawidlowym ?? I wystarczylo by zamienic te seriale w pliku ?? Hmm chyba jednak tak nie bedzie i dlatego nie chce mi sie sprawdzac ;)) Moze Wy sie tym zajmiecie ?? Moze przesledzicie co on wlasciwie robi z tym wpisanym przez nas serialem ?? Moze sie czegos nauczycie, bo z tego tuta to mozna tylko jednego sie nauczyc: Zeby przec do przodu i nie zalamywac sie przy pierwszej porazce, odrobina szczescia i kolejny progs na waszym kocie bedzie zrobiony ;)))) Dlaczego to dziala w taki sposób ?? Podejrzewam ze sprawdzana jest crc pliku, program sprawdza plik odwolujac sie przez nazwe sspro32.exe. Nasz plik zwie sie teraz loader.exe. Ale w katalogu jest jeszcze oryginal ;)) Wiec sprawdzany jest nasz oryginal, poniewaz w nim nie ma zmian, program leci dalej nie podejrzewajac, ze nastapila zmiana nazwy pliku z którego jest odpalany !!! To czysta teoria poniewaz jestem leniuch i nie sprawdzilem tego. Zadanie to zostawilem dla Ciebie. Mozesz pokombinowac zostawiajac pulapki na otwarcie pliku i takie tam, i zobaczyc co wlasciwie sie dzieje. To tyle pobawcie sie jeszcze tym progsem, moze cosik nowego odkryjecie ;))
UWAGA !!! Jesli udalo ci sie zlamac ta gre w inny sposób lub masz jakies pytania skontaktuj sie ze mna :