MaHaReT Posted June 24, 2006 Report Posted June 24, 2006 Continut:Structura unui exe-cutabil.. Dezasambloare-Debuggere.. Hexeditoare.. Unpack-ere.. Patchers.. Alte utilitare.. Bun-venit in lumea crackerilor!! --------------------------------------------------------------------------------Well oameni buni.... daca ati ajuns sa cititi aceste randuri inseamna ca sunteti interesati intr-o oarecare masura de spartul programelor.Toata lumea are o idee despre ceea ce inseamna freeware , shareware...programe ce le gasim pe Cd-urile revistelor lunare (care pe la noi sunt cam putine) si care sunt perzentate spre evaluare. Toti cred ca au trecut printr-un moment in care am spus "mai sa fie programul asta era asa de misto si acum nu-l mai pot utiliza ca s-au dus 30 de zile".Eh eh eh... eeeeiii a venit momentul sa dam de cap programelor astora care trebuie sa faca ce vrea Muschii Nostri, nu ce le-au pus programatorii sa faca ..si pentru ca acesta pagina nu este decat un INTRO aici imi propun sa fac o descriere in mare a ceea ce trebuie sa stiti despre cracking. Structura unui executabil --------------------------------------------------------------------------------O imagine reala a unui executabil v-o puteti face privindu-l ca pe un sir foarte lung format numai din 1 si 0 , ceva de genul 101110100010001010001001001010........ .Cum recunoaste sistemul de operare ca acest sir este un program executabil nu este treaba noastra dar in mare va pot spune ca el scaneaza prin multitudinea de biti la adrese fixe , predefinite anunite siruri si comparand cu ceea ce cunoaste el da verdictul. Mai pe omeneste sa presupunem ca avem un fisier de tipul MZ..,qwu..u22..111002.7izj...wh.............( 1 si 0 de mai sus pot arata si asa in baza 16 ..atentie)..pai Os-ul (sistemul de operare) cauta sa spunem primii 2 bytes in cazul nostru gasind MZ, apoi ii compara cu ceva ce el cunoaste si apoi in functie de rezult stie ca are de-a face cu un executabil...sau altceva.O alta chestie interesanta e ca bitii aia nu stau asa la intamplare. Ei reprezinta condensarea pana aproape de perfectiune a informatiei... si asta-i nimic... cand te gandesti la ADN... Un fel de functie daca se poate spune asa, care in volumul infim pe care-l ocupa contine atatia parametrii incat sa dea nastere unui organism atat de complex cum e corpul uman si apoi mai este si... mintea... eeeeheheeee.... O parere despre cum e compus un executabil v-o puteti face utilisand un PE wiewer. Acest program arata sectiunile executabilului zone in executabil asemanatoare unui organism. Unele stocheaza cod executabil... un fel de inima altele resurse... bitmapuri icoane text un fel de haine...Cam atat despre structura... lucrurile sunt complicate ar mai fi de mentionat aici ca fiecare program atunci cand incepe sa se execute are o adresa bine definita de unde sa o faca atunci cand se incarca in memorie. Aceasta este specificata desigur cum banuiti intr-o zona precisa in executabil si se numeste Entry Point (EP).Cand apasam pe iconita unui executabil OS-ul citeste o gramada de parametii din exe printre care si EP-ul, il incarca apoi in memorie (pe exe) si da drumul exe-ului tocmai la adresa precizata de EP. Dezasambloare si debuggere --------------------------------------------------------------------------------Pentru inceput trebuie sa stiti care sunt instrumentele necesare si ce fac ele in mare..cu ce ne ajuta ele in munca noastra. O prima clasa ar fi cea a dezasambloarelor si debuggerelor programe cu care codul binar este transformat in limbaj inteligibil pentru om de fapt cam ultimul nivel din care omul mai poate intelege ceva.Iata aici cum din acest se transforma: Cod binar 1010101100101 -------> dezasambler debugger -------> call, jmp, deci codul binar (binar de la unu si zero) e transformat in instructiuni care pentru noi inseamna ceva.Diferenta dintre un dezasamblor si un debugger este faptul ca primele proceseaza programul executabil si genereaza apoi un "dead listing" (un gen de fisier text in care codul binar e tradus in limbaj de asamblare) pe cand celelalte care sunt si cele mai inportante tool-uri fac acelasi lucru dar in timp ce programul este incarcat in RAM si se executa.De aici rezulta si superioritarea acestora din urma fata de primele... adicatelea debuggerele dau posibilitatea crackerului sa ruleze programul instructiune cu instructiune sa modifice in timp real instructiuni si totodata sa observe efectele modificarilor facute... bla bla bla...SoftIce este the best tool in clasa debuggerelor practic 95% din programele crackuite de mana lu' SIce mor. Ca dezasambloare e de amintit W32Dasm care este si debugger este usor de folosit datorita interfetei win32.Daca acum auziti prima data de ele va sfatuiesc sa faceti repede rost de ele si sa incepeti prin a va obisnui cu utilizarea lor...Nu insist mai mult utilizarea lor e mai bine de invatat pe exemple.. Hexeditoare (eeee.. buuuun.. ce este un hexeditor ?) --------------------------------------------------------------------------------Odata crackuite (sparte) utilizand fie SIce fie alte programe este nevoie ca crackul sa fie aplicat definitiv executabileleor. Acest lucru este posibil utilizand un hexeditor. Eeee.. bun.. ce este un hexeditor?Un hexeditor este un program care "deschide" un executabil afisandu-i continutul in forma hexadecimala (vezi reprezentare numerelor in diferite baze ..2..10..16). Oricum intr-un astfel de hexeditor veti vedea numere de la 1 la 10 si litere de la A....F.Nu mentionez aici nici un nume... ele sunt foarte numeroase... ramane la latitudinea fiecaruia sa-si aleaga pe cel ce-i place mai mult. " ERA Unpackers "(despachetatoare) Quote
MaHaReT Posted June 24, 2006 Author Report Posted June 24, 2006 Trebuie sa mai stiti ca din ce in ce mai multe programe "ies" pe piata impachetate. Adica executabilul spre exemplu xxxx.exe este supus unei operatii de criptare... sau de comprimare in scopul protejarii lui impotriva actiunilor corozive a crack-erilor... eh eh eh...i ntelegi ce vreau sa spun. Aici este ceva mai mult de discutat.Un astfel de executabil dupa opeatia de impachetare devine yyyy.exe cu o marime variabila (daca initial ar fi avut 2Mb dupa ar putea avea 3sau 1Mb in general mai mica). Pe piata actuala se gaseste o varietate de astfel de packere... Neolite, PKlite, Shrinker, ASPack ce stau la dispozitia softistilor pentru a-si proteja munca.Cum actionaza aceste packere ?.... in mare supun executabilul ce trebuie protejat unor algoritmi mai mult sau mai putin complecsi rezultand in final o mare harababura ( veti intelege mai putin mai tarziu cu afecteaza ea dezasambloarele ). O data harababura terminata isi lasa o parte din ele la inceputul programului EP si banuiti cred ca aceasta nu poate fi altceva decat un algoritm prin care harababura sa fie adusa la forma ei initiala.Dar cu aceasta harababura cum se mai poate executa programul ? Pai simplu... intai se despacheteaza datorita algoritmului cu care incepe sa ruleze si dupa ce s-a despachetat total aceasta rutina de despachetare da controlul spre executie programului propriuzis. In SoftIce noi putem monitoriza tot acest proces dar acest lucru cere multa experienta si determinarea algoritmilor de impaketare este foarte greoaie chiar si pentru experti.Sa vedem cum ne afecteaza activitatea aceste packere. Sa presupunem ca avem de anulat un nag (o fereastra nedorita)... ei bine cautam in SoftIce ceva jmp-uri si gasim ca avem de inlocuit stiu eu 74 spre exemplu cu EB. Revenim apoi intr-un hexeditor sa aplicam patch-ul (petecul) si stupoare nu gasim 74 ala.Nota:- primul semn ca un program e impachetat e faptul ca daca cautam intr-un hexeditor un sir hexa (pe care il notam la intamplare din SoftIce) nu il gasim.- o alta simptoma ar fi aceea ca dupa incarcarea intr-un dezasambler nu gasim string referance, si instructiunile nu au nici o insiruire logica.Acestea fiind spuse va dati seama ca peticirea este imposibila caci nu vom gasi ceea ce cautam. Vom ramane cu programul spart doar la stadiul de SIce. Si pentru ca suntem la sectiunea de unpackers sa revenim la oile noastre.La ce sunt bune unpackerele?Pai ati uitat ca pentru a se executa programele impachetate au nevoie sa se despacheteze intai ? Si unde... in memorie desigur. Eeee asta era... deci ce fac unpackerele astea de fapt... asteapta pana ce rutina de despachetare isi termina treaba si apoi dump-eaza zona de memorie in care se afla programul gata de executie. Frumos nu?Cu toate acestea rezultatele nu sunt garantate tocmai pentru ca exista o multitudine de packere fiecare necesitand parametrii specifici de dumpare.Tatal tuturor unpackerelor si nasul packerelor e ProcDump ajuns acum la versiune 1.6. Acesta recunoaste multe packere si in plus ofera posibilitatea configurarii pentru cele necunoscute.Odata executabilele despachetate si functionale (nu orice dump poate fi functional 99%) nu ne ramane decat sa aplicam patch-ul. Patchers (generatoare de crackuri) --------------------------------------------------------------------------------Presupunem ca avem programul gata spart si vrem sa'l facem public. Nu stim de asemeni prea multe de-ale programarii. Ce facem atunci ? Patcherele sunt mici executabile care au capacitatea de a genera alte executabile. Ele sunt de mai multe tipuri in functie de necesitati: Search and replace cauta o secventa predefinita intr-un anumit fisier si o inlocuieste cu ce trebuie... util in cazul unor crackuri pentru mai multe versiuni ale aceluiasi program care pastreaza aceeasi protectie dar are dimensiuni diferite (exe-le).File compare genereaza un crack-ul prin compararea fisierului spart cu originalul... in acest caz crackul e functional doar pentru versiunea exacta a programului pe care a fost facut.RunTime pach destul de interesant si in ultima instanta un inlocuitor la unpatcherelor... programul nu mai trebuie despachetat (si ganditi-va ce usurare si in plus nu de putine ori exista cazuri cand aceasta esueaza), patchul executandu-se in timpul rularii in memorie a programului ce trebuie spart. Alte utilitare ---------------------------------------Programatorii vor sa ne umple calculatorul cu tot felul de porcarii . V-ati pus vreodata intrbarea cum poate un program sa tina minte de exemplu data cand a fost instalat astfel ca dupa x zile sa va bage nag-ul in fata si sa va spuna arogant... "Gata m-am terminat" ? ... ce nesimtire !!!! ...sau la o protectie putin mai complicata chiar daca dati ceasul inapoi sa va ameninte ca va formateaza hardul!!!.Desigur el nu poate face asta decat lasandu-si ceva amprente prin registrii sau ascunzand pe undeva un fisier cu data resprctiva criptata sau nu.Important in crackuirea unui program este sa stim ce si unde modifica acesta la instalare sau in timpul rularii... de ce date are el nevoie din registrii... etc.Doua astfel de programe unul monitorizand registrii si altul fisierele cu care interactioneaza o anumita aplicatie sunt RegMon si FileMon .Nu mai vorbim aici cum putem determina si apoi sterge data... ora... la care s-a instalat un anumit program numarul de utilizari.. etc. Chiar daca de multe ori gasirea orei.. datei sunt dificile numai simpla identificare a cheilor scrise in registru e importanta.. caci aceste chei pot fi sterse si programul reinstalat ca intaia oara. Quote
MaHaReT Posted June 24, 2006 Author Report Posted June 24, 2006 Generalul Cracking Am pornit sa scriu un nou articol, si anume unul despre cracking in general. In primul rand : Ce inseamna cracking? Cracking-ul insemna a gasi schemele de protejare a unui program, a fi in stare sa le dezactivezi temporar sau permanent pe diverse cai. Bun. Si care ar fi aceste scheme ? Ele sunt variate : simple numere de inregistrare, protectii care verifica daca exista sau nu anumite fisiere, limtatii de diverse feluri (la timp, numar de utilizari, diverse optiuni dezactivate etc.), prezenta CD-rom-ului in unitate, chei hardware (dongles).Ca programe sunt folosite debuggerele EX : debug din DOS, Soft-ICE.Pentru generare de listing-uri in asm sunt folosite dezasambloare : EXSourcer pentru DOS ,W32Dasm, IDA pro pentru programe WIN 16 sau WIN 32.Cu Soft-Ice poti face aproape orice cu programul ales atata timp cat acesta este incarcat in RAM. De exemplu poti schimba adresa de executie a programului, poti schimba continutul registrilor procesorului, poti vedea orice zona din memorie, poti seta sau reseta flagurile etc Dar cum am spus, modificarile vor fi valabile doar in RAM nu si pe hard disk.Ei bine, W32Dasm dezasambleaza programul ales, afiseaza clasele, siruri de caractere folosite in program, offset-urile, adresele relative, referiri la adresele de la care au fost executate salturi. Listing-ul se poate salva, spre o utilizare viitoare, deasemenea se poate incarca intr-un editor de texte. Voi trata in acest eseu cracking-ul programelor pentru Windows pe 16/32 biti.1. Numere de inregistrareCe sunt si cum se obtin? Cred ca de multe ori ati intalnit programe shareware care cer numere de inregistrare pentru a putea fi folosite ca programe full. Unele numere de inregistrare sunt simple siruri de caractere alfa-numerice care se afla undeva in program sau in fisierele folosite de acesta. Altele pot fi obtinute prin diverse operatii asupra numelui si/sau companiei, adresei, numarului de telefon etc Sunt programe care folosesc un sistem de criptare avansat (EX : WinRAR). Unele numere de inregistrare difera de la un sistem la altul si de aici nevoia de patchuri sau generatoare de coduri (keygenerators). Cum pot fi gasite ? Folosind un debugger (Soft-Ice e cel mai bun). Se pun puncte de intreruperi la functiile din WINDOWS care permit transferul datelor dintr-o casuta de dialog intr-un anume buffer : GetDlgItemText(A),GetWindowText(A), GetDlgItem etc. Ar trebui stiute prototipurile acestor functii. Ele pot fi gasite in SDK de la WINDOWS etc. Pentru a afla adresa din memorie unde se afla numarul serial introdus se executa o cautare in Soft-Ice :s 0 l ffff "cod_introdus" - pentru programe pe 16 bitis 0 l ffffffff "cod_introdus" - pentru programe pe 32 bitiDaca exista string-ul cautat, va fi afisata adresa acestuia. Mai departe se pune o intrerupere la accesarea acestei adrese la citire/scriere. Astfel, Soft-Ice va opri temporar programul acolo unde se va executa o operatie asupra sirului introdus : copiere in totalitate sau numai a anumitor caractere, comparare etc. Ideal ar fi sa se gaseasca cat mai usor compararea numarului fals cu cel real dar acest lucru se intalneste numai la programele cel mai prost protejate EX : Cmp Eax, Ebx unde eax poate stoca codul real , ebx cel fals. Pot fi comparate doar anumite carctere de exemplu daca primul caracter coincide cu '5' sa zicem, si ultimul cu 'R' atunci totul este ok. Compararea se poate face si indirect, adica fara ajutorul instructiunii Cmp. Iata un exemplu : Eax contine codul adevarat iar Ecx cel fals. Daca diferenta dintre ele este 0 atunci iarasi e ok. Acestea sunt doar cateva situatii. In caz ca se face copierea sirului la alta adresa atunci trebuie pus un punct de intrerupere la noua adresa : bpm adresa_noua sau bpr 30:adresa_noua 30:adresa_noua + lungimea_sirului si se sterge cel vechi cu bc nr_intrerupere_precedenta. Ordinea intreruperilor se poate afla cu 'bl'. Acest procedeu se repeta daca este intalnita iarasi o copiere. Daca programul nu foloseste nici una dintre functiile API de mai sus, se pot folosi Hmemcpy sau alte metode. Una dintre ele este urmatoarea : tastati 'task' , obtinand astfel numele modulului de spart, apoi 'hwnd nume_modul_cautat' si cautati in rubrica 'Class Name' edit, retinand ce scrie la 'Window Handle'. Dupa aceea se pune o intrerupere la handle-ul gasit pentru orice mesaj WM_GETTEXT trimis (daca aveti putine cunostiinte de programare de Windows veti intelege mai mult) : 'bmsg handle_gasit wm_gettext'. Soft-Ice va iesi la iveala atunci cand programul va prelua informatia introdusa. Pentru a ajunge in codul programului se apsa F12 de cateva ori. Sper ca nu v-am incalcit gandurile prea mult cu aceasta rubrica de numere de inregisrtare; acestea sunt cele mai comune situatii. Un caz particular se constituie in programele scrise in Visual Basic. Aici se utilizeaza de cele mai multe ori formatul WideString. De exemplu deschidem executabilul cu un editor hexa si vrem sa cautam sirul "Unregistered" (de ce oare ? ;P) vom cauta U.n.r.e.g.i.s.t.e.r.e.d. si nu Unregistered.In cazul programelor vb W32DASM o da in bara in marea majoritate a cazurilor pentru ca executabilul nu este unul obisnuit. El contine date si chemari de functii standard continute in dll ca VBRUN300.DLL, VB40016.DLL sau VB40032.DLL, msvbvm50.dll, msvbvm60.dll care se afla in c:windowssystem. Reverserii de la Dread au venit in ajutorul crackerilor cu o versiune a W32DASM care poate vedea referintele la diverse string-uri. In cazul acesta se poate aplica schema obisnita si anume se cauta mesajul (daca exista si se va schimba conditia de validare a numarului serial (eX: in loc de jne mesaj_eroare se pune je, adica totul este ok atata timp cat numarul de serie este diferit de cel corect ) facandu-se un patch. Aceasta metoda este standard. Ea se poate optimiza. De exemplu pot fi mai multe verificari. Dar ce ne-am fi facut fara aceasta scula? Ei bine, razzia a gasit o solutie valabila pentru vb3 si 4. Iata : - se executa un search de forma s 0 l ffffffffff 8B,CA,F3,A6,74,01,9f,92,8D,5E,08,E8,0E,06- se pune un punct de intrerupere la adresa rezultata din cautarea de mai sus:bpx <seg:offset>- F5 pana se ajunge la verificareTot ce aveti de facut este sa vizualizati continutul de la ds:(e)di si ds:(e)si. Pentru programele scrise in VB 4 este valabil acelasi algoritm dar se executas 0 l fffffffff 56,57,8b,7c,24,10,8b,74,24,0c,8b,4c,24,14.In VB 5,6 lucrurile se simplifica oarecum. Acum se pot pune bpx-uri la functii de compararestandard : __vbastrcomp, __vbastrcmp etc. IMPORTANT : in fisierul winice.dat trebuiementionate cele 2 dll-uri astfel EXP=c:windowssystemmsvbvm50.dll si EXP=c:windowssystemmsvbvm60.dll.Pentru programele in vb6 bpx-ul se va pune astfel : bpx msvbvm60!__NumeFunctie. Olista cu alte functii vb se poate obtine tastand in Soft-Ice exp __vba. Un alt program care vapoate ajuta vine tot de la NuMega, si anume SmartCheck, un fel de decompilator. Il puteti folosi la gasirea de algoritmi de generare a numerelor seriale (util pentru genaratore de key-uri). Cam atat despre Visual Basic Cracking.2. Cate ceva despre mesajele 'suparatoare' (nag-screens)De cate ori nu ati intalnit un program shareware care sa nu va streseze ca mai aveti doar x zile de utilizare a programului respectiv, sau ca programul este 'Unregistered', sau bla...bla...bla In acest caz, W32Dasm ajuta destul de mult, deoarece arata referintele la diverse string-uri,si, daca priviti mai sus dati probabil si peste cauza care a produs afisarea acestora (in loc si la timp nepotrivit . Odata gasita aceasta conditie, se inlocuieste cu opusa ei si se face un patch pentru a elimina definitiv acest bug...Presupunand ca avem un nag-screen care afiseaza 'Mesaj' putem proceda astfel: incarcam executabilul in W32DASM si pe urma ii dam un 'Search' scriind mesajul de mai sus. Vom ajunge acolo unde a fostfacuta referinta la acest string ::004043D4 85C0 test eax, eax:004043D6 7437 je 0040440F:004043D8 6A04 push 00000004* Possible StringData Ref from Data Obj ->"Mesaj"; esti aici:004043DF 68C8C44000 push 0040C4C8:004043E4 8B5508 mov edx, dword ptr [ebp+08]:004043E7 52 push edx* Reference To: USER32.MessageBoxA, Ord:01BEh:004043E8 FF159CA14000 Call dword ptr [0040A19C]Pentru a scapa de mesaj se poate pune in loc de je 0040440F jne 0040440F sau je 0040440F sau jmp 0040440F(in patch se va inlocui 74 (je) cu 75(jne) sau EB (jmp)). Se observa ca nag-screen-ul s-a constituit intr-un messagebox. Putem folosi si Soft-Ice astfel bpx messageboxa, F12 odata, ctrl+UP ca sa vedem conditia, punem un bpx la adresa cu saltul conditionat (in cazul nostru 004043D6), F5, provocam programul sa ne arate iarasi mesajul, caz in care ne trezim in Soft-Ice la bpx pus inainte..., rfl z (adica setam flagul z in pozitia dorita , bc *, si sdin nou F5. Nici urma de nag-screen. Unele nag-screen-uri mai atragatoare pot fi cele care folosesc DialogBoxParamA, DialogBoxIndirectParamA etc---------asta presupun ca`i continoarea--------- Quote