Cracking & Hacking – prezentare generala

[o chestie pe care am scris-o mai demult si am gasit-o intamplator prin calculator; o pun aici in ideea ca poate o sa ii foloseasca vreodata cuiva la ceva 🙂 ]

Este vorba in principal de suspendarea protectiei programelor pt calculator (cracking) si de castigarea accesului pe calculatoarele aflate intr-o retea de calculatoare (hacking).

1. Dezactivarea protectiei software

Companiile care vand softuri pt. calculator obisnuiesc sa distribuie
versiuni demonstrative ale programelor create de ei. Acestea sunt
protejate in diferite modalitati:
	a. programul ruleaza de un numar de ori, dupa care nu mai
	functioneaza
	b. programul ruleaza pentru o perioada limitata de timp,
	dupa care nu mai functioneaza
	c. unele functii ale programului sunt dezactivate
	d. programul functioneaza, doar ca din cand in cand utilizatorul
	este intrerupt de un mesaj prin care i se cere sa inregistreze
	programul
Exista, desigur, si alte metode de protejare a programelor. Au fost
enumerate aici doar cele mai importante. De asemenea, trebuie precizat
ca unele programe folosesc in mod combinat aceste metode de protectie
(ex.: pentru o perioada de timp programul ruleaza, utilizatorul fiind
bombardat cu mesaje prin care i se cere sa inregistreze programul (d);
dupa ce perioada a expirat (b), unele functii ale programului sunt
dezactivate (c);)

Atunci cand protectia programelor pt. calculator este realizata prin
instructiuni incorporate in program, protectia poate fi "sparta".
Pentru aceasta se urmeaza de obicei urmatorii pasi:
	1. Programul este de obicei tradus din cod masina in limbajul
	de programare cel mai primitiv (Assembler - limbajul in care au
	fost construite celelalte limbaje de programare) - acest
	procedeu se cheama dezasamblare sau decompilare
	2. Sunt identificate instructiunile caracteristice protectiei
	3. Se rescriu instructiunile respective, fiind inlocuite cu
	instructiuni "inofensive", fara ca prin aceasta functionarea
	restului programul respectiv sa fie perturbata
	4. Programul este recompilat intr-o varianta care va functiona
	fara protectie.

Exemplificare pe cazuri:
	a. Un program care cuprinde tipul (a) de protectie include
	de obicei un contor care inregistreaza fiecare rulare a programului;
	este vorba de un sir de instructiuni care se executa la
	pornirea programului, dupa modelul:
		1. Afla de cate ori a fost rulat programul pana acum
		2. Daca valoarea respectiva este mai mare de N (numarul
		maxim de rulari permise) intrerupe executarea programului,
		daca nu, continua executia
		3. Mareste valoarea respectiva cu o unitate
		4. Salveaza noua valoare intr-un fisier din calculator
	observatie: instructiunea 4 este necesara pentru a memora valoarea
	din contor; altfel, atunci cand programul ar fi oprit, valoarea
	ar disparea din memoria calculatorului

	"Spargerea" protectiei se poate face fie identificand fisierul in
	care se memoreaza valoarea din contor, editandu-l din cand in cand
	si schimband valoarea de acolo (fara a modifica, deci, propriu-zis
	programul), fie dezactivand instructiunea 3, fie dezactivand
	instructiunea 2, fie dezactivand instructiunea 4.

	b. Programele de tip (b) cuprind instructiuni de protectie prin
	care se acceseaza ceasul calculatorului, dupa modelul:
		1. Citeste data curenta
		2. Daca data curenta > data limita de functionare a
		versiunii demonstrative a programului, intrerupe functionarea
		programului, altfel continua executia
	Schimbarea datei din calculator la o data anterioara sau dezactivarea
	instructiunii 2 reprezinta o strategie de a continua utilizarea
	programului.

	c. In cazul in care partea de program prin care se executa
	functiile dezactivate pur si simplu nu a fost inclusa in
	varianta demonstrativa, nu se poate face nimic. Daca partea
	respectiva a fost inclusa in program, acesta e posibil sa
	cuprinda un set de instructiuni de forma:
		1. Verifica daca programul a fost inregistrat
		2. Daca da, activeaza functiile X,Y,Z, in caz contrar
		nu le activa
	Modificarea instructiunii 1 poate duce la activarea functiilor
	dezactivate.

	d. Programele de tip (d) cuprind, de obicei, instructiuni
	de forma:
		1. Creeaza o valoare aleatoare cuprinsa intre
		min (valoarea minima) si max (valoarea maxima)
		2. Verifica daca a trecut un interval de timp egal
		cu valoarea aleatoare creata
		3. In caz ca da, creeaza un mesaj prin care ii ceri
		utilizatorului sa se inregistreze, iar daca nu reia
		instructiunea 2
	O modalitate de a "sparge" partial protectia ar fi aceea de
	a modifica valorile pentru min si max, facandu-le foarte
	mari, astfel incat mesajul suparator prin care se cere
	inregistrarea sa apara mult mai rar. O alta procedura posibila
	ar putea consta in dezactivarea instructiunii 3 sau a instructiunilor
	2 si 3.

Dezactivarea unor instructiuni se realizeaza fie prin stergerea lor, fie prin
inlocuirea lor cu instructiuni inofensive. Uneori, intr-o alta parte a
programului exista secvente de verificare. Aceasta sunt de forma:
		1. Verifica lungimea programului
		2. Daca aceasta este mai mica de N (lungimea initiala a
		programului) - de unde reiese ca unele instructiuni au
		fost sterse, opreste executia programului, iar daca nu,
		continua executia
Bineinteles ca si aceste secvente de verificare pot fi dezactivate.

Multe programe care sunt distribuite in versiuni demonstrative pot
fi inregistrare prin completarea unui cod de inregistrare. In acest
caz ele vor functiona la intreaga capacitate. "Spargerea" programului
poate consta, in cazul acestor programe in descoperirea codului de
inregistrare. Putem intalni doua situatii:

	a. fie codurile prin care poate fi inregistrat programul
	sunt pastrate undeva in interiorul programului
	b. fie codurile sunt generate prin executarea unor
	functii matematice (de pilda, codul de inregistrare ar
	putea fi un numar format din primele patru cifre ale
	puterilor succesive ale numarului 1234: 1234, 1522, 1879 etc.)
	observatie: uneori, atunci cand pentru inregistrare este nevoie
	si de completarea unui nume de utilizator, este vorba de procedee
	criptografice intermediul carora numarul de inregistrare este
	de fapt numele utilizatorului codificat numeric potrivit unei
	anumite chei de criptare

In ambele cazuri cel care "sparge" programul va identifica portiunea
de program care are legatura cu stocarea sau generarea codurilor de
inregistrare si va descoperi care sunt acestea, dupa care va rula programul
si il va inregistra ca si cand ar fi primit cheia de inregistrare de la
producator.



2. Castigarea accesului pe calculatoarele aflate in retea

Calculatoarele aflate in retea comunica intre ele pachete de informatii
ce sunt transmise intr-un anumit format, potrivit unor protocoale de
comunicatie. Protocolul cel mai utilizat, folosit pentru comunicarea de
informatii prin intermediul retelei Internet, este TCP/IP (Transfer
Control Protocol / Internet Protocol). Modul de procedare este urmatorul:

	- fiecare calculator este identificat in retea prin intermediul
	unei adrese numerice unice care ii este alocata (o adresa
	de forma: 192.12.168.77);
	- pentru ca informatiile de pe calculatorul respectiv sa fie
	disponibile in retea trebuie ca pe el sa ruleze programe care
	preiau informatii de pe harddisk-ul calculatorului si le trimit,
	eventual la cerere, catre interfata de retea;
	- in functie de programele care ruleaza pe calculator, se considera
	ca acesta ofera diferite servicii; acestor servicii li se aloca
	porturi de comunicatie diferite, ca si cand, in mod virtual, fiecarui
	tip de serviciu i s-ar aloca un cablu diferit pentru transmiterea
	informatiilor;
	- porturilor de comunicatie li se asociaza un cod numeric care se
	ataseaza la adresa calculatorului; de pilda, atunci cand vedem
	paginile de web aflate pe un calculator, putem face aceasta pentru ca
	pe calculatorul respectiv exista un program, numit server de web
	care deschide portul de comunicatie 80 si raspunde la cererile
	pe care i le adreseaza browserul de web (Internet Explorer, de pilda)
	care ruleaza pe calculatorul nostru;
	- in spatele vizionarii unei pagini de pe site-ul www.microsoft.com,
	sa spunem, se intampla urmatorul lucru: browserul de pe calculatorul
	nostru se conecteaza la un calculator pe care sunt inregistrate
	tabele de corespondenta intre adresa in litere (www.microsoft etc...)
	a calculatorului din retea cu care dorim sa comunicam si adresa
	numerica a acestuia (sa presupunem ca aceasta este 192.12.1.1.);
	apoi browserul se conecteaza la calculatorul 192.12.1.1 pe portul
	80 (adica se duce la adresa 192.12.1.1:80) si transmite mesajul prin
	care cere ca un anumit fisier (care contine pagina pe care dorim
	sa o vedem) sa fie trimis la adresa numerica alocata calculatorului
	nostru; programul care ruleaza pe server preia cererea si o executa,
        trimitand fisierul prin retea pe adresa calculatorului nostru; browserul
        primeste informatia si o afiseaza pe ecran;
	- exista servicii, diferite de cel prin care sunt vizionate paginile
	de internet, care ne permit nu doar sa tranferam fisiere de pe un
	calculator pe altul, ci chiar sa utilizam un alt calculator, prin
	retea, ca si cand am fi in fata lui, sa rulam programe pe calculatorul
	respectiv, sa vedem rezultatele pe calculatorul nostru s.a.m.d.;
	un astfel de serviciu este telnet, conectarea facandu-se in acest caz
	pe portul 23; ceea ce se intampla este ca, in loc sa trimita efectul
	rularii programelor de pe calculatorul gazda catre monitor, serverul
	de telnet care ruleaza pe acesta trimite rezultatul prin retea catre
	calculatorul nostru, unde acesta este afisat pe monitorul nostru, iar
	comenzile pe care le dam noi sunt preluate ca mesaje, transmise prin
	retea, interpretate drept comenzi pe calculatorul gazda si executate
	pe acesta;
	- accesarea unor asemenea servicii se realizeaza dupa o verificare;
	aceasta consta de obicei in completarea unui nume de utilizator si
	a unei parole;

In mod uzual, informatiile aflate pe calculatoarele aflate in retea, se impart
in informatii publice (la care pot avea acces toti utilizatorii sistemului
respectiv) si informatii private (fiecare utilizator are acces doar la
informatiile private proprii, nu si la cele apartinand celorlalti utilizatori).
Conectarea la un serviciu de retea sub numele unui anumit utilizator nu permite
decat accesarea informatiilor private ale utilizatorului respectiv.
Un singur utilizator, si anume administratorul sistemului, are in principiu
acces la toate informatiile aflate pe calculatorul respectiv.

Pentru a castiga accesul la informatiile de pe un calculator trebuie sa fie
depasite procedurile de verificare specifice fiecarui serviciu de comunicare
a informatiilor. Pasii urmati de catre un hacker sunt de regula urmatorii:

	1. scanarea unui numar de calculatoare din retea (de exemplu,
	de la 198.12.12.1 si pana la 198.12.12.225) - pentru aceasta
	se folosesc programe specializate care apeleaza pe rand fiecare
	adresa, incercand sa initieze diferite servicii de retea (verificand
	daca o adresa este alocata si ce porturi sunt deschise pe calculatorul
	de la adresa respectiva)
	2. dupa gasirea unui calculator, sa presupunem ca este un calculator
	care ofera serviciu de telnet, se initiaza procedura de verificare
	in urma careia poate fi capatat accesul la serviciul respectiv; pentru
	aceasta hackerul ruleaza un program care genereaza si trimite cu
	viteza mare un numar urias de combinatii de nume de utilizator si
	parole catre calculatorul respectiv, pana cand se gaseste o
	combinatie valida - in acest moment hacker-ul a castigat acces
	in contul unui anumit utilizator;
	3. dupa conectarea la calculatorul respectiv se pot urma mai multe
	proceduri prin care sa fie castigat accesul de la nivel de administrator
	de sistem; de pilda:
		- hackerul transfera pe propriul calculator fisierele in care
		se afla parolele utilizatorilor, inclusiv cea a administratorului
		si incearca sa le decripteze
		- hackerul copiaza pe calculatorul gazda un program care, odata
		rulat, initiaza un serviciu pirat, astfel incat toate informatiile
		vechiculate printr-un port de comunicatie ii sunt transmise si
		lui, dupa care asteapta ca administratorul sa se conecteze la
		serviciul respectiv pentru a-i citi parola
		- hackerul ruleaza pe calculatorul gazda programe care, datorita
		unor erori de programare ale sistemului de operare, ii ofera
		"din greseala" posibilitatea de a-si schimba identitatea cu cea
		a administratorului de sistem
		etc.
	4. odata castigat accesul la nivel de administrator de sistem, sunt
	transferate prin retea informatiile dorite
	5. la sfarsit sunt indepartate toate informatiile care ar putea trada
	accesul unui intrus la calculator (de pilda: calculatorul inregistreaza
	intr-un fisier toate accesele utilizatorilor la sistem, cu data si
	ora accesului; daca hackerul a intrat pe calculator in calitate de
	administrator, in acest fisier a fost creata o inregistrare care spune
	ca administratorul a accesat calculatorul la ora respectiva;
	administratorul real poate avea, bineinteles, acces la aceasta inregistrare,
	asa ca hackerul sterge linia respectiva din fisier etc.)

Bineinteles, procedurile de operare sunt mai complicate, nefiind schitate
aici decat in linii generale.

8 thoughts on “Cracking & Hacking – prezentare generala

  1. krossfire

    E criminal fontul ala, a trebuit sa-l copiez in word. Cunosteam notiunile insa ma mira ca nu ai mentionat miile de ”hackeri” care trag tepe pe site-urile de licitatii si apoi se lauda la prietenii din bloc.

  2. Pingback: Happy Hacking! « radio…fm…

  3. Seth

    simplut si frumos explicate conceptele.
    doar 1-2 chestii merita subliniate:
    1) termenul de hacker nu inseamna doar persoana care incearcas sa obtina accesul la un alt sistem intr-un mod “dubios”. La origine termenul insemna o persoana care avea cunostinte f bune in domeniul IT/Electronic si le folosea pt a modifica programe/chestii electronice. E adevarat ca de la un punct incolo a inceput sa fie asociat cu activitati dubioase :D.
    Insa in prezent este folosit in sintagme de genu “kernel hacking” care inseamna modificare kernelului Linux/Windows pt a satisface o necesitate care nu a fost prevazuta initial.
    Este o chestie destul de bine platita si on the light side :).
    2) cam greu gasesti servere in ziua de azi care sa accepte conexiuni telnet din cauza ca telnet-ul nu foloseste o criptare a mesajelor. Acestea fiind transmise in clar oricine poate intercepta acel mesaj si citi user/pass dupa care restul e usor :D.
    Cele mai frecvente conexiuni se fac (in linux mai ales) prin SSH( daca nu ma insel cumva). SSH = secure shell si este un protocol care foloseste criptarea prin algoritmul RSA.
    Asta il face mai dificil de decriptat ( algoritmul foloseste pt codare niste numere f mari si ar necesita mult processing time pt decodare) si deci mai safe.

    Just my 2 cents sorry de bagarea in seama 😀

  4. gramo

    @krossfire: aia nu sunt hackeri;

    @Seth: 10x a lot pentru completari! you’re right cu “hacker“, care e folosit si in alt sens, fara nici un fel de conotatii negative; si ai dreptate si cu ssh, am vazut ca tot mai multe servere de universitati desfiinteaza telnet si ftp si lasa doar ssh si scp.

  5. claudiu

    @seth – daca ai sti cate servere au telnetul activat…asta din motive de admini tampiti sau nepriceputi..
    @gramos – nu stiu cat de mult te pricepi in domeniul IT, dar mi se pare o idee buna sa scrii cate ceva despre aspectele mai putin cunoscute ale calculatoarelor, si oarecum mitizate. pentru ca, pana acum, desi exista o multime de bloguri si pagini care au ca subiect domeniul IT, eu nu am gasit vreo informatie interesanta, exceptand stirile copiate de pe alte site-uri, de obicei straine. In concluzie, mi-a placut postul, si te-as ruga sa continui. Bineinteles, daca face obiectul unui interes real din partea ta.

  6. inaequitas

    @krossfire: majoritatea browserelor reactioneaza la combinatia [ctrl + ] prin marirea fontului [sau ‘command +’ daca esti fericit cu un Mac]

    @gramo: sa luam ‘la atac’ diverse puncte

    1. Cheile de software [serials] sunt de multe ori generate prin algoritmi prestabiliti. Chestia cu numele si serial number-ul foloseste de cele mai multe ori un one-time pad/hash function ca sa genereze un serial valabil. Nu e nevoie neaparat de cheie [si ar fi foarte usor de extras cheia din program] Functia respectiva, aplicata unui nume, ar trebui sa genereze un anumit tip de valori pentru serial; programul stie si el asta si calculeaza acelasi lucru cand il inregistrezi.

    2. De multe ori, inainte de dezasamblare, programul se ruleaza printr-un debugger [gdb, NuMega SoftICE] ca sa vezi, orientativ, unde se intampla ce. Un executabil de 11 MB o sa contina cateva carti de x86 ASM si e impractic sa intelegi atat cod.

    3. Mai multe detalii despre terminologie pe http://catb.org/esr/jargon/html/go01.html – The Jargon File [ca sa nu-mi fac reclama singur, am scris si eu acum ceva vreme o scurta analia a diverselor specimene din underground.]

    Oricum, textul pare scris mai demult si e destul de solid dpdv al informatiilor. Doar ca limitezi definitia ‘hacker’-ului si asta… e neplacut.

  7. gramo

    @claudiu: a facut obiectul unui interes real mai demult, cand am invatat un pic de C, un pic de ASM (plus assembler pentru procesoare de palm), am mai citit chestii despre retele si m-am mai jucat cu niste scripturi, am testat niste softuri de spart parole s.a.

    anyway, n-am avut niciodata nici pregatirea, nici rabdarea unui hacker, iar toate interesele astea sunt, oricum, istorie acum 🙂

    @inaequitas: you’re right cu toate completarile; 10x! prezentarea din post, otoh, e supersimplificata, avand in vedere un auditoriu care n-o sa stea sa urmareasca prea multe detalii tehnice;

    in plus, nici nu imi propusesem sa ofer o definitie pentru “hacker”, ci doar sa disting intre oamenii care “sparg softuri” si cei care “sparg servere”, fiindca pentru unii nu e nici o diferenta intre cele doua categorii 🙂

  8. petru

    buna am descarcat de pe softpedia.com un joc cu camioane numit 18 wheel of steel convoy si dupa o ora jumate jocul mi-a iesit automat si nu am mai putut intra deloc in el imi vere sa il cumpar nu stiiti cumva va rog un program pentru a dezactiva cererea de inregistrare?
    Va multumesc

Comments are closed.