Witam wszystkich ktorzy staraja sie zostac Crackerami, Reversami...?? Mam nadzieje, iz wiesz co nieco na temat lamania ( idealnie by bylo gdybys juz cos zlamal ), gdyz ten tutorial nie jest dla kompletnych nowicjuszy /???/, choc kto wie moze sie myle. Jedno jest pewne , nie bede dokladnie opisywal jaki klawisz do czego sluzy w naszych ulubionych narzedziach. Nie bede rowniez uczyl asemblera, no moze troche... Chce Was nauczyc jak myslec (hmmm mam nadzieje, iz nikt sie nie smieje), jak podchodzic do zabezpieczen, jak szukac, jak je analizowac, a wreszcie jak omijac i zabijac !!!
To na tyle, zaczynamy : CO JEST NIEZBEDNE ( jezeli chodzi o ten tutorial ) :Wiem iz wielu z Was slabo lub bardzo slabo zna jakikolwiek jezyk programowania, dlatego tez stworzono wiele patcherow ktore same generuja gotowe pliki exe , com z przygotowanymi przez Was "udoskonaleniami" :) Oto krotki przeglad dostepnych patcherow dla nieznajacych lub leniwych !!!
I to na tyle jest jeszcze kilka innych programow do patchowania , sam musisz wybrac ten najlepszy, albo nauczyc sie programowac...
Te i inne patchery mozesz znalezc: http://www.corleone.net/p_a_t_c_h_e_r_s.html
!!! U W A G A !!!Aby uniknac ewentualnych pytan zwiazanych z nizej zamieszczonym textem : Wszystkie programy ktore posluza nam za przyklady mozna zlamac przy pomocy Soft Ice'a. Lecz w tym tutorialu chodzi o poznanie innych zasad lamania (innymi narzedziami),ostatnio powstaja tysiace tutoriali na temat Soft Ice'a , dlatego zdecydowalem ,iz polamiemy WDasmem. Ponadto istnieja programy ktore bardzo ciezko lamac SI, i wtedy WDasm wypelnia ta luke. Jezeli chcesz poczytac na temat lamania SI to polecam tutoriale mNICH'a , SirGrega, oraz Fravie (tam ostatnio tylko o tym),lub przeczytaj moj nastepny tutor , hehe !
Program ten to naprawde dobry spliter (dzieli pliki na dowolne czesci). Wlanczamy AM 3.00 , uupss Nagscreen informujacy, iz mamy trzydziesci dni aby nacieszyc sie programem , trzy przyciski, OK wciskamy I agree , jestesmy wewnatrz , nacisni Help ,jest tam raz Register... oraz dwa About AxMan...klikni Register, trzy pola Name,Company,Registration key ,tym zajmiemy sie pozniej,teraz About AxMan,aha tu program wyswietla prawidlowo wprowadzone info rejestracyjne ,jako ze teraz nic nie zostalo wprowadzone mamy UNREGISTERED ,tym rowniez zajmiemy sie nieco pozniej... Teraz przestaw zegar na dwa miesiace do przodu...Masz ,dobrze, uruchom AM i co wcisnales I Agree, a tu nic tylko info :"This copy of AxMan has expired! To register - send email to..." etc.
No dobra robimy kopie pliku AxMan.exe (ja po prostu zipuje),otwieramy WDasm'a32, klikamy na Disassembler =>Open file to disassemble... Wybieramy sciezke dostepu do naszego AxMana.exe i czekamy , czekamy... czekamy o nareszcie jest , co my tutaj widzimy ??? A widzimy czysty kod Asemblera naszego programu,no dobra ale jak znalezc gdzie znajduje sie ten wlasciwy kawalek kodu ,aaaaa Wdasm oprocz kodu asemblera ma mozliwosc wyswietlania odnosnikow textowych do ktorych odwoluje sie kod asemblera ,nazywa sie to Refs,i znajduje sie kolo Helpa ,to co nas interesuje to String Data References ,poniewaz to tam znajduje sie caly zbior wszystkich odnosnikow = polecen... Zastanowmy sie chwile, pamietamy text ktory pojawil informujac nas o uplywie czasu korzystania z AM ,dobrze wiec znajdzmy ten text,klikamy na String Data References (SDR), i przeszukujemy w poszukiwaniu naszego nieszczesnego komunikatu ... , ...ooo jest "This copy of AxMan has expired!" ,teraz klikni dwukrotnie na ten komunikat, WDasm przeniosl nas do miejsca gdzie ten komunikat pojawil sie po raz pierwszy w kodzie Asemblera, a w oknie widzicie cos takiego:
* Referenced by (U)nconditional or (C)onditional Jump at Address: :0040308A (C) :00403095 33C0 xor eax,eax * Referenced by (U)nconditional or (C)onditional Jump at Address: :00403093 (U) :00403097 8BC8 mov ecx,eax :00403099 E8E2270000 call 00405880 :0040309E 8BC8 mov ecx,eax :004030A0 E82B080000 call 004038D0 :004030A5 3C01 cmp al,01 :004030A7 7537 jne 004030E0 :004030A9 6A30 push 00000030 * Possible StringData Ref from Data Obj -> "AxMan" :004030AB 6830F24500 push 0045F330 * Possible StringData Ref from Data Obj -> "This copy of AxMan has expired!" :004030B0 6888F24500 push 0045F288 itd.
To co musimy przeanalizowac znajduje sie pomiedzy 00403097 a 004030A7 (dlaczego??? Poniewaz program wykonuje tam kilka bardzo ciekawych operacji, tuz przed wyswietleniem nam komunikatu "This copy of AxMan has expired!"): Ponizszy kawalek kodu to nic innego jak sprawdzanie ilosci dni poczawszy od dnia instalacji, program sprawdza date instalacji , nastepnie aktualna date systemowa ,nastepnie dokonuje porownania (cmp), jezeli porownanie to wciaz miesci sie w okresie time trial to nastepuje skok do 004030E0 i mozemy nadal korzystac z programu, w przeciwnym wypadku skok jne nie nastepuje, a program wykonuje procedure przewidziana po uplywie 30 dnii (przestaje funkcjonowac).
:00403097 8BC8 mov ecx,eax :00403099 E8E2270000 call 00405880 :0040309E 8BC8 mov ecx,eax :004030A0 E82B080000 call 004038D0 :004030A5 3C01 cmp al,01 :004030A7 7537 jne 004030E0 <==== jezeli nie rowny wynik porownania al z 01 skocz
Czyli przed uplywem 30 dni wynik w al jest 00 , po uplywie 30 dni w al mamy 01 i skok nie nastepuje. Dobrze, ale co zrobic aby po uplywie 30 dni program nadal wykonywal skok do 004030E0 ??? Najprostsza metoda jest zmiana skoku jne (jump if not equal = skocz jesli nie rowne), na je (jump if equal=skocz jesli rowne), Hex wartosci obu instrukcji to jne = 75 a je = 74 , teraz wystarczy w Hiew zmieniamy wartosc 75 na 74 i zabilismy time limit.Dobrze do dziela klikamy na pole instrukcji
:004030A7 7537 jne 004030E0
tak aby sie podswietlilo na dolnym pasku stanu WDasma powinnismy ujrzec offset podswietlonej instrukcji w naszym przypadku bedzie to: @offset 000030A7h , spisujemy go mozemy juz wyjsc z WDasma , ale najpierw zapiszmy aktualna sesje, tak abysmy podczas ponownego otwierania AM w WDasmie nie czekali zbyt dlugo. Otwieramy Hiew604 i wybieramy AxMan.exe ,naciskamy F4 i Decode.Nastepnie naciskamy F5 (szukanie ffsetu), wpisujemy nasz offset 30A7 (poczatkowe zera i ostatnie h pomijamy), juz po chwili Hiew znajdzie nam szukana wartosc, teraz naciskamy F3 i mozemy zmienic wartosc 75 na 74, zapisujemy zmiany F9 i opuszczamy Hiew. Z lekkim niepokojem uruchamiasz AxMana, najpierw pojawia sie Nag informujacy iz nasz czas trialu juz minal, naciskasz I Agree ...YES YES YES zlamany, cieszysz sie niemilosiernie ... ale musze Ciebie zmartwic - to nie jest dobry crack, dlaczego...??? Wyjdz z AxMana i cofni date na aktualna (bedzie to najwyzej dzien lub dwa po instalacji), teraz uruchom AM i co - dostales info , iz Twoj czas korzystania z programu dobiegl juz konca? Coz za przewrotnosc po 30-u dniach mozesz korzystac z AM chocby i cala wiecznosc, a teraz musisz czekac. Alez skad, pomyslmy, teraz w al jest 00 a je nie pozwala na wykonanie skoku, hmmmmm TAK a gdyby je zastapic instrukcja EB (jump directly to = skocz wprost do), to dobry pomysl, bez wzgledu na to jaka jest data skok zawsze zajdzie!!! Do dziela Hiew, zmien 74 na EB i uruchamiamy AxMana ,nareszcie wszystko dziala , teraz przestaw date na dwa miesiace wyprzedzenia, wlacz AM - dzialaaaaaa! Zrobione, teraz to dobra Crackerska robota :)
Teraz chwile o innych typach zabezpieczen czasowych (klasyfikacja wedlug +ORC'a) :
Kolejny etap naszego Crackowania to usuwanie Nagscreenow. Nadal na przykladzie AxMan'a. Zaraz po uruchomieniu AM ukazuje nam sie info (okno), odliczajace pozostaly czas trial, oraz informacje na temat programu. Zaraz sprobujemy to zlikwidowac. Nagscreeny mozemy podzielic na kilka kategorii:
Jeden: Niezbyt skomplikowane - latwo je wykryc i usunac przy pomocy Hiew lub debugera (SI lub WDasm).
Dwa: Zaawansowane - czesto sprawiaja klopot, gdyz sa dobrze ukryte lub dobrze zintegrowane z programem czesto pomaga BPX DialogBoxParamA w Soft Ice.
Trzy: Bardzo skomplikowane - doskonale zamaskowane w kodzie programu, zawierajace np. animacje itp., nie dajace sie wywolac (w sposob prosty), komendami SI (BPX). Skuteczna metoda to komenda TASK w Soft Ice (poczytaj).
Nasz przykladowy program to typ pierwszy, czyli nie powinien nam sprawic trudnosci. Dwa podejscia sa mozliwe, oba tylko z uzyciem Hiew !!!
Otwieramy AxMan'a, patrzymy na Nagscreen, spisujemy jakis oryginalny wyraz np. AGREE , wchodzimy do Hiew, F4 nastepnie Hex oraz F7 (to opcja szukania), mamy tam dwa pola ASCII i Hex. W pole ASCII wpisujemy nasz szukany wyraz AGREE, uwaga program jest 32bitowy tak wiec kazda znak musi byc izolowany przez wartosc hex 00 !!! Czyli wpisujemy w ASCII litere A, down arrow 00, up arrow G, down arrow 00 ...itd. Hiew po chwili znajdzie nasz szukany wyraz oraz jego reprezentacje Hex, teraz szukamy w poblizu miejsca gdzie sie znalezlismy FF FF 82 lub FF FF FF FF 82 <- taki Hex reprezentuje wyswietlanie jakiegos okna z info. W naszym przypadku znajdziemy w 9 linijce ponizej naszego AGREE cos takiego -FF FF FF FF - FF FF 82, teraz najezdzamy kursorem na wartosc 82 wciskamy F3, a nastepnie zmieniamy wartosc 82 na 7E i juz nigdy nie ujrzymy Nagscreen'a. Proste!!! Prawda???
Po prostu wpisujemy w wartosci szukania Hiew HEX FF FF 82, czasem to trwa dluzej niz sposob pierwszy... Teraz juz mamy AxMana bez ograniczen czasowych + bez paskudnego Nag screen'a !
Uruchamiamy AxMana i klikamy Helpa, a nastepnie Register..., wpisujemy dowolne dane i klikamy OK, no tak otrzymales komunikat "Invalid Registration Information" (nieprawidlowe informacje rejestracyjne).Moze juz wiesz co zrobic...??? ... Oczywiscie, otworzyc WDasm'a i poszukac w SDR sekwencji "Invalid Registration Information". Do dziela !!!
Oto co otrzymalismy po podwojnym kliknieciu na "Invalid Registration Information" :
:0040688B 50 push eax
:0040688C 51 push ecx
:0040688D 52 push edx
:0040688E 8D4C241C lea ecx, dword ptr [esp+1C]
:00406892 C644242803 mov [esp+28], 03
:00406897 E8E4F9FFFF call 00406280
:0040689C 84C0 test al, al
:0040689E 6A30 push 00000030
:004068A0 7513 jne 004068B5
* Possible StringData Ref from Data Obj -> "AxMan - Error 400"
:004068A2 6850F84500 push 0045F850
* Possible StringData Ref from Data Obj -> "Invalid Registration Information"
:004068A7 682CF84500 push 0045F82C
:004068AC 8BCE mov ecx, esi
:004068AE E8F9710200 call 0042DAAC
:004068B3 EB49 jmp 004068FE
* Referenced by (U)nconditional or (C)onditional Jump at Address:
:004068A0 (C)
* Possible StringData Ref from Data Obj -> "AxMan"
:004068B5 6830F34500 push 0045F330
* Possible StringData Ref from Data Obj -> "Thank you for registering your"
"copy of AxMan"
:004068BA 68FCF74500 push 0045F7FC
etc.
I znow sprobuj pomyslec nad tym fragmentem kodu...
Hmmmmm, no dobrze cala esencja zabezpieczenia kryje sie:
:0040688E 8D4C241C lea ecx, dword ptr [esp+1C] :00406892 C644242803 mov [esp+28], 03 :00406897 E8E4F9FFFF call 00406280 :0040689C 84C0 test al, al :0040689E 6A30 push 00000030 :004068A0 7513 jne 004068B5
To tu program "decyduje" czy informacje ktore wpisalismy sa poprawne, jezeli nie to jne czyli jump if not equal = skocz jesli nie rowne, nie bedziemy analizowac w jaki sposob program transformuje nasze dane wstukane w pole rejestracyjne, a zajmiemy sie jedynie jak oszukac program. Bardzo prosto. Moze juz wiesz, oczywiscie zamieniajac jne na jmp (dlaczego na jmp ? pomysl...no wlasnie, co by bylo gdybys jakims cudem wpisal wlasciwa rejestracje???...).
Dalej to juz proste, Hiew w ruch znajdujemy offset 68A0 i zmieniamy 7513 na EB13, zapisujemy zmiany i uruchamiamy AxMan'a. Wpisujesz dowolne dane w oknie rejestracyjnym i OK, wyskakuje "Thank you for registering..." = zrobione !!!
Bardzo dobrze, a teraz klikni w Helpie About AxMan... OHHH SHITTTTT !!! Ty tez widzisz te trzy paskudne UNREGISTERED. Co jest grane??? Program musi gdzies jeszcze porownywac dane rejestracyjne wpisane przez uzytkownika z prawidlowymi, jezeli wszystko gra, prawidlowe dane rejestracyjne pojawiaja sie zamiast UNREGISTERED. Cos trzeba z tym zrobic.Otwieramy WDasm'a i SDR w poszukiwaniu wyrazu UNREGISTERED.
Mamy, klikamy dwukrotnie i ladujemy:
* Referenced by (U)nconditional or (C)onditional Jump at Address: :004104CA (C) <<======= UWAGA !!! * Possible StringData Ref from Data Obj -> "Unregistered" :004104F3 6844104600 push 00461044 :004104F8 8D8ED4000000 lea ecx, dword ptr [esi+000000D4] :004104FE E8F9ED0100 call 0042F2FC * Possible StringData Ref from Data Obj -> "Unregistered" :00410503 6844104600 push 00461044 :00410508 8D8E10010000 lea ecx, dword ptr [esi+00000110] :0041050E E8E9ED0100 call 0042F2FC * Possible StringData Ref from Data Obj -> "Unregistered" :00410513 6844104600 push 00461044 Sprubujmy odszukac komorke 004104CA, widzimy: :004104BE 8D4C2424 lea ecx, dword ptr [esp+24] :004104C2 E8B95DFFFF call 00406280 :004104C7 3C01 cmp al, 01 :004104C9 5F pop edi :004104CA 7527 jne 004104F3 <---- zly skok
Jne skacze do Unregistered gdy po sprawdzeniu w rejestrze dane nie zgadzaja sie z tymi ktore program wykalkulowal na podstawie wprowadzonych informacji przez uzytkownika, co mozemy zrobic? Proponuje offset 104CA i jne zastapic je, czyli 7527 zmienic na 7427 i wszystko powinno dzialac !
Sprawdzamy... Huuuraaaa, dziala !!!!!!!!!!!!!!!!!!!!!!AxMan 3.00 w pelni skrakowany. Swietnie, a teraz zrobcie to jeszcze raz, SAMI !!!
Zadanie domowe: Oprocz AxMan'a w jego katalogu znajdziecie AxManRestore. Zarejestrujcie go !!!
Wielu z Was czesto pyta o to jak skrakowac gre, aby dzialala bez CD, teraz wlasnie nadszedl czas aby Was tego nauczyc:
Instalujemy Q2, przynajmniej Normal Install. Po udanej instalacji wyjmujemy plyte z napedu i uruchamiamy gre.
Wyskoczyl komunikat "You must have the Quake2 CD in the drive to play". Doskonale. Otwieramy WDasm'a i disassemblujemy plik Quake2.exe (291328 bajtow).
Czekamy, czekamy...uupsss... Jest, teraz SDR i szukamy naszego przeslania "You must have the Quake2 CD in the drive to play". Klikamy dwukrotnie i:
* Referenced by (U)nconditional or (C)onditional Jump at Address: :0042B21E (C) :0042B235 8A442404 mov al, byte ptr [esp+04] :0042B239 FEC0 inc al :0042B23B 3C7A cmp al, 7A :0042B23D 88442404 move byte ptr [esp+04], al :0042B241 0F8E6AFFFFFF jle 0042B1B1 * Possible StringData Ref from Data Obj -> "You must have the Quake2 CD in the drive to play" :0042B247 68644744 push 00444764 :0042B24C 6A00 push 00000000 :0042B24E E89D6CFEFF call 00411EF0 :0042B253 83C408 add esp, 00000008
No i co my tu mamy, hmmm ciekawe zabezpieczenie...Jak myslicie gdzie kryje sie newralgiczny punkt zabezpieczenia...??? Moze 0042B21E ...moze 0042B241...nie, nie, autorzy byli sprytniejsi, centrum CD-check'a to call 0042B24E !!! Zwroccie uwage na ten typ zabezpieczenia, poniewaz wystepuje on coraz powszechniej, a latwo go pominac! Spryciarze z ID, no bo kto by szukal zabezpieczenia po komunikacie...?Jezeli chcecie przesledzcie losy naszego call'a, bo teraz trwalo by to zbyt dlugo. Co teraz? Hiew i szukamy offsetu 2A64E, mamy tam E89D6CFEFF, zmieniamy to na 9090909090. 90 oznacza instrukcje nop = no operation (brak operacji), dzieki temu cala procedura sprawdzania CD przestanie miec znaczenie!!! Odpalamy Q2, nerwowe chwile, ooooooo DZIALA bez CD!
Kolejna rewelacyjna gra, krwawa i mroczna, dokladnie to co lubie... ale do pracy! Zainstalowales juz pewnie Blood2: The Chosen, najlepiej full install. Wyjmii plyte z napedu i uruchom gre, smieszny Nag, wciskasz Launch Blood2 i... komunikat: "Please insert the Blood2 CD-ROM into your CD-ROM drive." No juz chyba wiesz co robic dalej.
WDasm, SDR i szukamy "Please insert the Blood2 CD-ROM into your CD-ROM drive."
I znajdujemy sie tu, kilka linijek powyzej znanego nam juz zlowrogiego informatora :)
:00403F6C C78424D800000000000000 mov dword ptr [esp+000000D8], 00000000 :00403F77 E854010000 call 004040D0 :00403F7C 85C0 test eax, eax :00403F7E C78424D8000000FFFFFFFF mov dword ptr [esp+000000D8], FFFFFFFF :00403F89 0F8503010000 jne 00404092 <---nasz zly skok !!!
Nie pisalem calego kodu, gdyz po co...? Nasz cel to 00403F89 i jne, co mozemy zrobic, mozemy tak ustawic polecenie jump, iz bedzie ono wykonywane pomimo braku CD, trzeba zmienic jne na je, Hiew offset 3389, bedzie to wygladac pierwotnie 0F8503010000 na 0F8403010000. Wychodzimy z Hiew i uruchamiamy gre, i BoooM. ZROBIONE !!!
Teraz dodatek do B2 => Nightmares Levels ! Po zainstalowaniu Nightmares mozna grac w nowe plansze jak i w tradycyjnego B2. Beda tez potrzebne dwa Cracki. Instalujemy B2:Nightmares. Wyjmujemy plyte i uruchamiamy gre. Oczywiscie screen informujacy : "Please insert the "Blood2: Nightmares"CD-Rom into your CD-ROM drive."Robimy dokladnie co uprzednio, czyli WDasm, SDR ...
CD check kryje sie ::0040118E 7410 je 004011A0
offset 58E , proponuje aby zmienic 7410 na 9090. Odpalamy Nightmares. Wspaniale!!!!!!!!!!!!!!! Dziala!!!!!!!!!!!!!!!!!
To czesc pierwsza naszej crackerskiej pracy. Uruchom przywitalnego Screena B2, i odlacz Nightmares Add-on, teraz mozemy grac w tradycyjnego Blood'a 2.Lecz bez CD jest to jednak niemozliwe.Zadanie domowe usunac CD checka !!!! To naprawde nic trudnego!!!!!!!!
Instalujemy Sin'a - Full Install, nastepnie wyjmujemy plyte i odpalamy gre. "You must have the Sin CD in the drive to play." Dalej czynnosci wciaz te same, WDasm...SDR...i szukamy "You must have the Sin CD in the drive to play." A kod wyglada tak:
* Referenced by (U)nconditional or (C)onditional Jump at Address: :004568B4 :0045BBB0 E8CBFEFFFF call 0045BA80 :0045BBB5 803800 cmp byte ptr [eax], 00 :0045BBB8 750F jne 0045BBC9 * Possible StringData Ref from Data Obj -> "You must have the Sin CD in the drive to play." :0045BBBA 685C014800 push 0048015C
Coz za prostackie zabezpieczenie, no coz, chyba to widzisz...???!!! Jezeli plyta jest w napedzie CD to w eax mamy 1 i skok nastepuje, my chcemy aby skok nastepowal gdy plyty nie ma, wiec zmienimy offset 5AFB8, jne na je. Hiew 750F na 740F. Odpalamy gre i .........Huraaaaaaaaaaaaaaaa !!! Zlamane!!!!! :)
Dobra, to czesc pierwsza, teraz czas na Sin'a version 1.01 !!!
Instalujemy upgrade do wersji 1.01. Odpalamy gre i ... oczywiscie "You must have the Sin CD in the drive to play." No dalej to juz sami... Mamy taki kawalek kodu :
* Referenced by (U)nconditional or (C)onditional Jump at Address: :004574444 :0045C770 E8CBFEFFFF call 0045C640 :0045C775 803800 cmp byte ptr [eax], 00 :0045C778 750F jne 0045C789 * Possible StringData Ref from Data Obj -> "You must have the Sin CD in the drive to play."
Chyba WIESZ co zrobic ? Sin version 1.03 zostawiam dla Was, uprzedzam, nie bedzie tam zadnych fajerwerkow :)
Jak widzicie lamanie CD checkow jest niezwykle prosta sprawa, dlatego tez zdobadz Heretic II i sprobuj zlamac !
Nie bedzie to juz takie proste...??? Powodzenia !!!
Software - PAINT SHOP PRO 5.03 EVALUATION
PSP 5.03 posiada zabezpieczenie czasowe, po okresie probnym program sie nie uruchamia. Nie ma takze mozliwosci rejestracji, wpisania hasla, etc. Co oznacza ze bedziemy musieli gleboko pogrzebac w kodzie, aby unieaktywnic zabezpieczenie. To juz nieco wyzsza szkola crackingu, bedziemy potrzebowac RegMon, ja uzywam wersji 4.12 WDasm'a, Hiew oraz nieco z filozofii ZEN CRACKING... ZEN CRACKING - filozofia Crackerska (nie tylko), polegajaca na maxymalnym i intuicyjnym wczytywaniu sie w kod Asemblera, zrozumienia istoty dzialania zabezpieczenia, wnioskowani z niezwykle malej ilosci przeslanek. Nie dajcie sie jednak zwiezc, Zen Cracking to przede wszystkim ogromna wiedza i jeszcze raz wiedza !!! "FEEL THE CODE !!!"
Do dziela odpalamy PSP i widzimy Nag'a informujacego, iz iles tam dni uzywamy programu... Przestawmy zegar na dwa, trzy miesiace do przodu i widzimy, iz nasz trial period sie skonczyl. Co teraz, WDasm - moze byc, lecz niewiele nam to pomoze !Uruchamiamy RegMon'a, a nastepnie PSP, kiedy PSP pokaze nam Nag Screeny wychodzimy z niego (PSP), i spogladamy w okno RegMon'a, upssss, troche tego jest...
Pomyslmy, program musi gdzies w rejestrach miec zapisana date instalacji oraz tolerowana ilosc dni od instalacji, kiedy to mozemy go otworzyc, popatrzmy co sie dzialo podczas otwierania PSP. PSP musial podczas otwierania sprawdzic te informacje (daty), OK, ale gdzie, zastanow sie, gdybys byl programista, czy ukryl bys zabezpieczenie w jakims idiotyczni prostym do wychwycenia kluczu np.: HKEY_LOCAL_MACHINE\Software\PSP\Install Date..., czy tez ukryl bys ja przed wstretnymi Crackerami (fuuuuu, ohyda), gdzies w malo dostepnym miejscu, pod niepozorna nazwa ? Oczywiscie!!!, popatrz dobrze, co wydaje Ci sie podejrzane... Tak ! Cos czesto program odwolywal sie do klucza {84124FF1-5D04-11D1-A575-00A0C96F2B0D}, przyjrzyjmy mu sie z bliska.
Klikamy na ten klucz bedac nadal w RegMonie, powinien nam sie zglosic Regedit i otworzyc klucz {84124FF1-5D04-11D1-A575-00A0C96F2B0D}. Masz, doskonale, co tam widzimy: 8 podrzednych kluczy, przejrzy kazdy z nich, ... , kazdy odwoluje sie do PSP, najdziwniejszy i najbardziej podejrzany to MiscStatus\5031 i 5032 hmmmm, ten ciag liczb musi cos oznaczac, prawda...???!!!
Sprobujmy.Otwieramy plik Psp.exe w WDasm'ie, troche to potrwa ... ... ... ... ...
Jest, swietnie, uprzedzam w SDR nic nie znajdziemy, ale sprobujmy opcja Search, wpisujemy wyraz MiscStatus i niech szuka, po chwili znajdzie cos takiego:
* Reference to: MFC42.Ordinal: 03AD, Ord: 03ADh :0058040B E88A6B0500 call 005D6F9A * Possible StringData Ref from Data Obj -> "MiscStatus" :00580410 680C766200 push 0062760C :00580415 8D4C2418 lea ecx, dword ptr [esp+14] ...a ponizej widzimy :
* Reference to: ADVAPI32.RegQueryValueExA, Ord: 017Bh :00580456 8B3D583F6300 mov edi, dword ptr [00633F58] :0058045C 52 push edi :0058045D 8D4C2434 lea ecx, dword ptr [esp+34] :00580461 8D542450 lea ecx, dword ptr [esp+50] :00580465 51 push ecx :00580466 8B4C2434 mov ecx, dword ptr [esp+34] :0058046A 52 push edx :0058046B 53 push ebx :0058046C 51 push ecx :0058046D 50 push eax :0058046E FFD7 call edi :00580470 85C0 test eax, eax :00580472 750E jne 00580482 <== to tu !!! ...
Mam nadzieje, iz to widzicie, to tu wykonywany jest NASZ skok, lub tez nie, chcielibysmy aby ten skok byl wykonywany zawsze, prawda ??? No dobrze spisujemy offset (00180472h). Otwieramy Hiew i zmieniamy 750E na EB0E. Odpalamy PSP i ... informacja, iz jest to pierwszy dzien naszego uzytkowania Paint Shopu !!!!
A teraz zadanie domowe, pozbyc sie wstepnego, NagScreen'a w PSP! Jezeli uczynisz to samodzielnie - to wysli do mnie rozwiazanie, dwa: znalezc inny sposob na cracka do Paint Shop'a ! Takze i w tym przypadku prawidlowe odpowiedzi beda mile widziane !
Wykaz podstawowych funkcji wykorzystywanych podczas Crackingu:
HEX ASM Znaczenie
75 lub 0F85 jne jump if not equal = skocz jesli nie rowne
74 lub 0F84 je jump if equal = skocz jesli rowne
EB jmp jump directly to = skocz bezposrednio do
90 nop no operation = nic nie rob
77 lub 0F87 ja jump if above = skocz jesli powyzej
0F86 jna jump if not above = skocz jesli nie powyzej
0F83 jae jump if above or equal = skocz jesli powyzej lub rowne
0F82 jnae jump if not above or equal = skocz jesli nie powyzej
lub nie rowne
0F82 jb jump if below = skocz jesli ponizej
0F83 jnb jump if not below = skocz jesli nie ponizej
0F86 jbe jump if below or equal = skocz jesli ponizej lub rowne
0F87 jnbe jump if not below or equal = skocz jesli nie ponizej lub nie rowne
0F8F jg jump if greater = skocz jesli wiecej
0F8E jng jump if not greater = skocz jesli nie wiecej
0F8D jge jump if greater or equal = skocz jesli wiecej lub rowne
0F8C jnge jump if not greater or equal = skocz jesli nie wiecej lub nie rowne
0F8C jl jump if less = skocz jesli mniej
0F8D jnl jump if not less = skocz jesli nie mniej
0F8E jle jump if less or equal = skocz jesli mniej lub rowne
0F8F jnle jump if not less or equal = skocz jesli nie mniej lub nie rowne
UWAGA !!!
Wiem, ze wielu z Was chetnie korzysta z instrukcji 90 = NOP, ale uwazajcie, coraz wiecej programow potrafi wykryc anormalna ilosc 90 i zawiesza sie program lub system. Oprocz tutoriala otrzymaliscie katalog Achart z dokladnym wykazem ASCII i wszelkimi mozliwymi przeksztalceniami, naprawde dobra rzecz !!! Wlasnie organizuje zalozenie wiekszej grupy CRACKERSKIEJ, jezeli uwazasz, iz moglbys sie w to bawic zapraszam !
MAIL ME : lukep@gdansk.sprint.pl
Jezeli zauwazyles jakies bledy napisz, bede wdzieczny.
Gdansk Lipiec 1999