Spotykamy sie po raz trzeci, dzis dowiemy sie jak szukac wlasciwych danych rejestracyjnych dzieki funkcji Hmemcpy. Jak zwykle beda Cdcheck'i. Bedziemy rowniez lamac kolejny timelimit program.
Czas zaczac !!!Jest to stary programik, dosc prosty do rozgryzienia, wybralem go z dwoch powodow: Po pierwsze - nie tak dawno dowiedzialem sie, iz istnieje tutor angielskojezyczny do tego programu i ze jest on blednie napisany (bledy merytoryczne, niepozwalajace newbies na wykorzystanie informacji zawartym w tymze tutorze), sprawdzilem i owszem CrackZ (powiedzmy), pisal malo precyzyjnie... Drugi powod, stare programy zwykle bywaja gorzej zabezpieczone, i sa juz na tyle nieaktualne, iz autor niezbyt straci jezeli sobie potrenujemy na jego dziele.
Hmemcpy - chyba najczesciej spotykana funkcja API, jest wszechobecna pod WIN32, dzieki niej szybko sa przenoszone dane z jednej czesci pamieci do innej(alokacje). Czesto newbies sa przerazeni ta funkcja, gdyz nie moga znalezc wywolania programu, gdyz Hmemcpy wywoluje kilka, kilkanascie bibliotek, "podbibliotek",... i czesto trzeba sie nawciskac F12, aby dojsc do wlasciwego kodu :) Naucze Was dzis, jak wykorzystac ta potezna bron w odnajdywaniu wlasciwych danych rejestracyjnych.
Uruchamiamy VulcanNotes, wciskamy Close, gdy program prezentuje NagScreen'a, pokazalo sie okno programu, dobrze, widzimy, iz jest tam mozliwosc rejestracji "Register" => "Enter Registration Code", okno rejestracyjne to tradycyjnie:
Your Name Serial#Ja wpisalem:
Your Name lukep Serial# 9999x
Wchodzimy do SI, zastawiamy pulapke BPX hmemcpy i F5, wciskamy OK w Vnotes i jestesmy w SI w Kernel, naciskamy F11 a nastepnie F5 , aby wyjsc z SI (nas interesuje drugie okno z serialem),ponownie znalezlismy sie w Kernel, F11 i jestesmy w module User, teraz aby dostac sie do naszego programu musimy naciskac F12 (dokladnie 6 razy), znalezlismy sie w naszym programie VNOTES95! teraz musimy znalezc interesujacy nas kawalek kodu, znajdziemy go naciskajac kolejne piec razy F12, nie interesuja nas zadne instrukcje POP, zobaczymy cos takiego:
00464FF9 CALL 00414F00 00464FFE MOV EAX, [EBP-10] <= Tu jestesmy, widzimy w gornym prawym rogu SI SS:006CF64F=00C0A400, Wpisujemy d 00C0A400 i mamy nasz niepoprawny serial 00465001 LEA EDX, [EBP-14] 00465004 CALL 00405A70 00465009 MOV EAX, [EBP-14] <= znow SS:006CF648=00C04064 i d 00C04064 = nasz zly serial 0046500C PUSH EAX <= na stos wedruje nasz zly serial 0046500D LEA EDX, [EBP-10] 00465010 MOV EAX, [EBP-04] 00465013 MOV EAX, [EAX+000001B8] 00465019 CALL 00414FOO 0046501E MOV EAX, [EBP-10] <= wyjscie z VNOTES95!, aby tego uniknac klikamy myszka dwukrotnie na instrukcje 00465021, powinna sie podswietlic, wpisujemy BC0, i wychodzimy z SI, oczywiscie jestesmy znow 00465021 LEA EDX, [EBP-18] <= TU jestesmy !!!!!!!! 00465024 CALL 00464DF0 <= transformacje Name\Serial 00465029 MOV EDX, [EBP-18] <= To tu !!! SS:006CF644=00C04E4C, wpisujemy d 00C04E4C i ukazuje nam sie wlasciwy numer !!! Dla mojego lukep to: 624749154780968 !!! 0046502C POP EAX <= zly kod jest sciagany ze stosu 0046502D CALL 004036DC <= porownanie kodow 00465032 JNZ 00465208 <= skok warunkowy
Jezeli bedziecie postepowac wedlug moich wskazowek nie powinniscie miec zadnych problemow ze znalezieniem poprawnego kodu. Program generuje takze falszywe kody, ale jak wspomnialem powyzej, idzcie wedle wskazan :)
Wpisujemy poprawny serial i dostajemy podziekowania !!!
Jezeli chcielibyscie aby program byl ponownie niezarejestrowany to usuncie z klucza rejestrow:
[HKEY_CURRENT_USER\SOFTWARE\Vulcan\Notes] "Dimensions"="4957575748574950" "Left"="303" "Top"="139" "Width"="250" "Height"="350" "ForeColor"="0" "BackColor"="65535" "ForeIndex"="0" "BackIndex"="11" "MainToolbar"="1" "Scrollbar"="1" "FontName"="Arial" "FontSize"="11" "FontBold"="0" "FontItalic"="0" "FontUnderline"="0" "FontStrikeOut"="0" "Hints"="1" "ShowDateTime"="1" "RunMinimized"="0" "HideFlashScreen"="0" "SoundIndex"="1" "SoundFile"="" "User"="lukep" <==== Usun !!! "Serial"="624749154780968" <=== Usun !!! "WindowState"="1"
i znow Vnotes95 bedzie niezarejestrowany.
Ten program ma dwie mozliwe drogi rejestracji, pierwsza to tzw. Personal Edition mozna korzystac z makr stworzonych tylko na wlasnym komputerze, oraz tzw. MultiUser Editon - korzystamy wtedy z makr stworzonych przez innych urzytkownikow MM (Internet, inne stanowiska komputerowe).
Probowalem znalezc pole do wpisania kodu MUE lecz niestety wydaje mi sie, iz w tej kopi MM nie ma takiej mozliwosci, L przy numerze wersi MM tu chyba Light ??? Dobrze, tak wiec zajmiemy sie znalezieniem numeru do PE. Uruchamiamy program, naciskamy Enter License Code na pytanie czy jestesmy zarejestrowanym uzytkownikiem MM odpowiadamy nie, pojawia sie kolejny Box z pytaniem czy na pewno chcemy zarejestrowac wersje PE, odpowiadamy Tak, pojawia sie okno gdzie mozemy wpisac numer rejestracjny, ja wpisalem 9999x, wchodzimy do SI i zastawiamy pulapke BPX hmemcpy, wychodzimy z SI, wciskamy OK w oknie rejestracyjnym, pojawi nam sie SI z modulem Kernel, wciskamy F11 i jestesmy w User teraz bedziemy wciskac F12, dokladnie 11 razy, 6 razy aby znalezc sie w kodzie programu Macros! i kolejne 5 razy aby znalezc sie przy interesujacych nas instrukcjach (POP nas nie interesuje), widzimy cos takiego:
0045D3D9 CALL 00421DB0 0045D3DE MOV EAX, [EBP-28] <- Tu jestesmy, widzimy w oknie rejestrow SS:0075F2AC=01192F98, sprawdzamy co jest pod 01192F98, nasz niepoprawny numer 0045D3E1 PUSH EAX <- Nasz niepoprawny numer idzie na stos 0045D3E2 PUSH DWORD PTR [EBP-08] 0045D3E5 PUSH DWORD PTR [EBP-0C] 0045D3E8 LEA EAX, [EBP-1C] 0045D3EB CALL 0045D8F8 <- Generowanie poprawnego kodu !!! 0045D3F0 MOV EDX, [EBP-1C] <- W rejestrach widzimy SS:0075F2B8=011DEA38, sprawdzamy co sie kryje pod 011DEA38, nasz poprawny numer :) 0045D3F3 POP EAX <- Sciagany niepoprawny numer ze stosu 0045D3F4 CALL 00403DB0 <- Porownywanie, jezeli go przesledzimy to zobaczymy np. iz nasz poprawny kod musi miec 8 cyfr !!!!
Ja otrzymalem dwa poprawne tzw. Master Key : 18660563 oraz 18610988.
Wydaje mi sie jednak, iz 18660563 jest numerem w pelni dzialajacym, jestem przekonany, iz mozliwosci otrzymania numeru jest jeszcze wiecej. Sprobuj sam, moze otrzymasz swoj wlasny Master Key - ktory bedzie dzialal na wszystkich komputerach ??? :)))) !!! Jak widzicie funkcja Hmemcpy jest na tyle uniwersalna, iz mozna jej czesto uzywac i w szybki sposob uzyskiwac poprawne wyniki !!! Jest w niektorych przypadkach "jedyna" metoda na dostanie sie do kodu programu !!!
Nareszcie !!!! Musze z przykroscia stwierdzic, iz nikt z walczacych z Heretickiem2 jak dotad nie znalazl poprawnego rozwiazania, nawet moje podpowiedzi nie wplynely na poprawne rozwiazanie, nadszedl czas aby ujawnic sekret tej gry! Na poczatek nieco historii powstania zabezpieczenia tej gry, tworcy skupiali sie na zabezpieczeniu jej przed niekontrolowanemu i nielegalnemu kopiowaniu. Trzeba im przyznac, iz zrobili to dosc dobrze, gra podczas kopiowania zmieniala tak niektore swoje pliki, iz bylo niemozliwe jej poprawne odpalenie :) Jednak, jak to zwykle bywa Ebola Crew zdolala skopiowac dwie plyty z gra na jedna piracka. Slyszalem, iz Raven wydaje juz teraz jednoplytowa kopie tej gry!
Jednym z plikow modyfikowanych byl plik quake2.dll i tam wlasnie gra ma procedure sprawdzajaca CD. Poszukiwania SDR komunikatu ktory pokazywal sie po uruchomieniu gry bez CD ("You must have the Heretic II Cd in the drive to play"), doprowadzaly do blednych wnioskow.
Jezeli jednak wiemy, iz firma kladla przede wszystkim nacisk na nielegalne kopiowanie, moze trzeba szukac odnosnikow do komunikatow nastepujacej tresci: Error CD copy !, czy Cd failed, czy No cd, wiec szukajmy.
W32Dasm i SDR: Wkrotce znajdziemy:
"Copy protection failed !"Klikamy na komunikat i jestesmy tu:
:1002EF90 CALL 1002EE50 :1002EF95 CMP BYTE PTR [EAX], 00 <- czy Eax=1 ??? :1002EF98 JNE 1002EFC0 <- nasz dobry skok wykonuje sie tylko w przypadku gdy mamy plyte w CD ROM-ie, czyli EAX=1 :1002EF9A CALL 1002EF80 :1002EF9F TEST EAX, EAX :1002EFA1 JE 1002EFB1 * Possible StringData Ref from Data Obj -> "Copy protection failed !"
Mozliwych rozwiazan jest wiele: Zamienic JNE na JMP, czyli offset 2EF98 z 75 na EB, lub instrukcje CMP BYTE PTR [EAX], 00 na BYTE PTR [EAX], 01, lub upewnic sie iz EAX jest zawsze 1...
Jak widzimy takze CD check'i moga sprawic trudnosc. Nalezy uwaznie obserwowac i wyciagac wnioski, oby prawidlowe. NIC NIE JEST NIEMOZLIWE !!!!
Powodzenia.P.S. Ukazal sie patch do Sin'a 1.06, tak jak i wersja 1.04 i 1.05 nie posiada CD check'a :)
Program to 45 dniowa wersja, po uplywie tego czasu wylancza sie. Sprobujemy powalczyc z tym programem :)
Jak zwykle, przestawiamy zegar, tak aby nasz okres trial sie skonczyl, uruchamiamy CaptureEze, pierwsze okno, naciskamy Continue Evaluation i otrzymujemy informacje, iz trial minal, mozemy jedynie wyjsc z programu.
Tym razem uzyjemy W32Dasm'a. Zapamietujemy komunikat i otwieramy plik czepro.exe w W32Dasm, po otwarciu szukamy w SDR odnosnika do tegoz komunikatu, wkrotce znajdziemy:
:0041A340 CMP DWORD PTR [EBP-04], 00005955
:0041A347 JE 0041A367 <- skocz jezeli ostatni dzien trial
* Reference To: tl32v20.trialEnvironmentOpen, Ord:00094
:0041A34D CALL DWORD PTR [00438A2C]
:0041A353 MOV DWORD PTR [004363D4], 00005955
:0041A35D MOV EAX, 00000001
:0041A362 JMP 0041A439 <- sprawdze jaki dzis dzien ?
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
:0041A347(c)
:0041A367 CMP DWORD PTR [EBP-04], 0000F90B
:0041A36E JNE 0041A395
* Possible StringData Ref from Data Obj -> "Your CaptureEze trial period"
"has expired."
Rozwiazanie naszego time limitu powinno teraz nie stanowic dla Was zadnego problemu. Wystarczy pozmieniac skoki warunkowe pod 0041A347 i(oraz) pod 0041A36E na skoki przeciwne, czyli JE na JNE, a JNE na JE... Zapisujemy offsety: 19747 oraz 1976E
Ostatecznie mozemy pozmieniac tylko offset 19747, sposobow na obejscie zabezpieczenia tego programu jest jeszcze kilka.
Kolejny program oszukany... ...I na tym koniec walki z tym programem, dlaczego...? Dlatego, iz moim zamiarem jest nauczenie jak lamac zabezpieczenia a nie jak pisac crack'i.
Mysle, iz ci z Was ktorzy sa naprawde zainteresowani real crakingiem poradza sobie z dwoma NagScreenami tegoz proga, a ci ktorzy mysla jak tanim kosztem zdobyc oprogramowanie beda musieli troche poklikac... Albo wyrwa kompletnego Crack'a z ktoregos Warezowego Site'a... :(
Milej zabawy.To na tyle, drodzy moi. Mysle, iz ten Tutor pozwolil Wam na zdobycie kolejnych umiejetnosci. Mam nadzieje, iz bedzieci czerpac tylko same przyjemnosci z Crackingu\Reversingu, tak jak ja to czynie.
Prawdopodobnie bedzie w calosci poswiecony lamaniu programow Visual Basic /Smart Check/,lub bedzie o Donglach - Hard Crack !!! Moze wpadnie cos nowego, bardziej interesujacego ???
Do nastepnego spotkania ... Wkrotce !!!!!!!!!!!!!
CheersLukep contact: lukep@gdansk.sprint.pl
Gdansk Wrzesien 1999