| |
Cum dreq reusesc hackerii
astia sa sparga programe?Sau cum reusesc sa le aplice patch-uri?! Alta
intrebare:cum dreq reusesc virusii sa scape nedetectati de produsele antivirus
, chiar daca sunt foarte noi?Sau, cum fac antivirusii/antitroienii sa
descopere virusi/troieni inca necunoscuti?!
Ha! Daca v-ati pus vreodata cel putin una dintre aceste intrebari si nu
ati gasit un raspuns nesatisfacator nici pana acum,atunci il veti gasi
cu siguranta in randurile urmatoare plus multe alte "chestii"
interesante(cine shtie,shtie!)...
1.Software pentru
spargere program(debuggere,dezasambloare,engineuri euristice).
Multi dintre voi probabil
ati auzit deja despre debuggere,dezasambloare, engineuri euristice si
chiar stiti ce semnifica fiecare,dar fata de restul,care inca nu au auzit
sau nu au o idee foarte clara ma simt dator cu explicatii.Toate aceste
tipuri de programe amintite pot fi adunate sub o singura titulatura :
software pentru spargerea programului.In realitate exista doar doua tipuri
de software necesar "hackuirii" unui program si acelea sunt
debuggerul si dezasambloarele care lucreaza fara sa acceseze memoria,restul
fiind doar derivate ale acestora. Cand vorbim de hackuirea unui program
nu va ganditi in mod neaparat la ceva ilegal.Aceste produse software sunt
folosite de betta testeri si chiar de producatorii programului asupra
caruia se incearca spargerea(pentru descoperirea de hibe sau "bug-uri")
sau sunt folosite, intr-o forma sau alta,de produsele antivirus sau antitroian
incearcand sa determine daca programul care este testat este infectat
sau nu cu virus cunoscut sau necunoscut prin cercetarea comportamentului
sau(engine-uri euristice) sau incearca stergerea codului virusului/troianului
prin folosirea unui debugger(programele de cleaning).
Dupa cum probabil v-ati dat seama, ele sunt folosite si de hackeri sau
crackeri pentru a vedea punctele slabe ale programului respectiv(bug-uri)
pentru ca in viitor sa le exploateze.
Dar , haideti sa incepem cu inceputul.....
1.1.Debuggere.
Debuggerele sunt programe complexe care executa programul in memorie(periculoase,deoarece
codul executat poate contine rutine ofensive care vor fi in RAM in urma
acestui proces) sau, cele mai bune, creaza un mediu asemanator sistemului
de operare,mediu in care executa programul ce trebuie testat astfel incat,chiar
daca programul contine virus/troian sa nu se execute in sistem.Un exemplu
demn de luat in seama este puternicul SoftICE.Debuggerele folosesc doua
intreruperi pentru a analiza programul : int 3h (breakpoint interrupt)
si int 1h(urmarire pas cu pas).Ele pot executa programul in mod normal(run)
sau pot executa instructiune cu instructiune(step-by-step) pentru a oferi
un control mai bun utilizatorului.Un debugger poate fi folosit foarte
usor ca unealta de hacking(singurul lucru necesar fiind cunostintele de
asm) si in acelasi timp foarte eficient.Eu personal am spart aproximativ
20 de programe si jocuri folosind doar TD386,care nu este totusi un debugger
la fel de performant ca SoftICE.
1.2.Dezasambloare(decompilatoare).
Aceste programe , dupa cum spune si numele , sunt un fel de compilatoare
dar in sens invers,adica din limbajul masinii in cel uman(sau aproape
uman :P).Ele sunt de doua feluri :
a) care iau secventele de program direct de pe disk.
Din aceasta grupa fac parte majoritatea dezasambloarelor ele fiind mult
mai sigure (in cazul in care programul supus dezasamblarii contine cod
ofensiv) dar oferind date semnificativ reduse sau diferite de cele reale(in
cazul in care codul ce trebuie dezasamblat a fost supus criptarii).Cel
mai bun dezasamblor de acest tip pe care l-am intalnit este Sourcer.
b) care iau secventele de program din memorie.
Este imperios sa folositi acest tip de dezasambloare numai daca stiti
ce faceti.Buba lor se regaseste in faptul ca ele executa in memorie programul,dupa
care fac un dump intr-un fisier si apoi decompileaza fisierul in mod normal.De
aceea se poate spune ca sunt un hibrid intre un debugger si dezasamblor.Daca
programul ce trebuie dezasamblat contine cod ofensiv odata cu executarea
in memorie a sa se executa si portiunea de cod nedorita (virus, troian,
bomba logica, s.a.m.d.). Avantajul oferit de aceasta generatie de dezasambloare
este ca analizeaza codul real al programului si nu un mirror criptat (care
ofera doar date false).
1.3.Engine-uri euristice.
Aceste programe sunt de fapt debuggere modificate special pentru produsele
antivirus/antitroian.Ele fac tot ce face un debugger dar,in plus au o
baza de date cu operatiile care sunt cel mai des intalnite la virusi si,in
acelasi timp, mai rar intalnite la programele normale,adica : rutine de
lucru intim cu sistemul de operare, operatii de accesare intreruperi intr-o
maniera neobisnuita, cod pentru modificarea timpului si datei fisierului,etc.Adica
daca se executa un program in mediul creat si acest program are in codul
sau o incercare de determinare a tipului de fisier,atunci acest cod este
considerat ca fiind potential ofensiv.Aceste engine-uri euristice nu pot
spune cu precizie daca un fisier este infectat sau nu,ele generand o multime
de alarme false, dar, cateodata, chiar au dreptate... ;)
Motoarele euristice parcurg un fisier dat de la entrypoint pana la sfarsit
si fac un raport despre codul examinat.Acest raport il realizeaza prin
compararea instructiunilor din program cu cele din baza lor de date,considerate
ca virus-like instructions.
1.4.UNPackere.
Multi au fost foarte mirati cand au vazut ca nu tratez si arhicunoscutele
programe de "despachetare",dar acest articol il consider destinat
celor care sunt sau vor sa devina hackeri nicidecum oricarui 14m3r(daca
nu stiti ce inseamna...hmm,ar fi cazul sa nu mai cititi) caruia i-a picat
in mana acest material.Eu nu incurajez frauda,incurajez doar cercetarea.
Trebuie totusi spus ca aceste programe sunt tot un fel de dezasambloare
in memorie,doar ca nu dezasambleaza codul ci fac un dump al imaginii necriptate
a fisierului intr-un fisier nou si ,astfel,oricat de puternic ar fi algoritmul
de criptare ele trec de el pentru ca programul deja s-a decriptat singur
in memorie.
2.Cod anti-debugging.
Sincer,de cate ori nu ati pierdut o gramada de timp in fata unui PC scriind
un program care se dorea cel putin shareware si in care ati investit timp
si munca sperand la o recunoastere a acestei munci printr-o contributie
cat de mica la "fondul de pensii" al oricarui programator pentru
ca,la mai putin de o saptamana,dupa ce l-ati scos pe piata sa apara deja
un patch care sa anuleze toate restrictiile din versiunea demo/shareware?!Poate
niciodata,dar oricum io voi vorbi despre codul anti-debugging (:P).In
orice caz cine este "dashtept" isi da seama de modurile in care
poate fi intr-adevar folosit acest cod...
Cred ca nu vreti ca orice pustan de doi lei care citeste 14m3 ca fiind
"pais'pe em trei" sa sparga codul la care v-ati chinuit ore
sau zile in cateva minute cu un UNPacker de tot kk,nu-i asa?Dar nici nu
va convine sa va apara in programul pe care l-ati protejat cu un produs
antihacker ,fel de fel de stringuri de copyright,gen "1996(c) by
MeAssHole".Atunci ce sa faceti?
KurruPt - FiŁe vine in salvarea voastra cu acest articol si cu un set
de secvente de cod care satura debuggerele de programele in care sunt
continute,secvente denumite generic tricks,si care sunt incluse in arhiva
ANTI-D.RAR.Dar sa vedem care-i faza cu codul anti-debugger...
Dupa cum probabil v-ati dat seama inca de la sectiunea debuggere,acestea
se bazeaza in principal pe doar doua intreruperi.Oare putem exploata asa
ceva astfel incat sa tinem sa persoanele neavizate departe de codul nostru?!Bineinteles
ca putem.....Aceste doua intreruperi sunt extrem de usor de exploatat
si dupa cum veti vedea si in exemplele mele nu trebuie sa fii super-creier
ca sa gasesti alte exploituri (sau cel putin sa le intelegi pe astea...;)).In
continuare va voi prezenta doua secvente de cod anti-debugger extrem de
simple luate din arhiva ANTI-D.RAR pe care o puteti lua gratuit de pe
site-ul nostru. Aceasta arhiva contine aproximativ 14 secvente de cod
scrise in assembler pe care le puteti incorpora in programele voastre
pentru a scapa de debuggere.Toate au fost scrise pentru fisiere de tip
EXE sau COM de sub sistemul DOS.Ele n-au fost testate pe fisiere de tip
WinEXE!!!!(Inca nu m-am apucat sa cercetez formatul fisierelor din WinDoze
:P)
a)suprascrierea intreruperii
3
aceasta secventa de cod nu face altceva decat sa modifice vectorul intreruperii
3h inlocuindu-l cu vectorul intreruperii 21h.Aveti grija unde salvati
vechiul vector al intreruperii 3h deoarece daca il pierdeti s-ar putea
sa cauzati unele probleme singura rezolvare fiind un warm boot.
Faza cea mai simpatica e ca puteti revectoriza orice alta intrerupere(nu
numai int 21h) pe care o folositi mai mult, pe adresa int 3h pentru ca
mai apoi sa apelati intreruperea dorita executand vectorul int 3h.Se stie
ca aceasta intrerupere este singura din tabela de intreruperi codata pe
un singur byte.Astfel daca cineva a spart codul vostru,va trebui sa inlocuiasca
fiecare apel la int 3 cu un apel la intreruperea originala.Dar intreruperea
originala este codata pe doi bytes...Hmm, va rezulta o mizerie de nedescris!Dati-va
singuri seama.... ;)
BTW : sfatul meu este sa faceti revectorizarea manual!
xor ax,ax
mov ds,ax
; Facem rost de vectorii
intreruperilor
mov ax,3503h
int 21h
mov ds:[old3_off],bx
mov ds:[old3_seg],es
mov ax,3521h
int 21h
mov ds:[old21_off],bx
mov ds:[old21_seg],es
; Schimbam int 3h cu int 21h
; Dupa aceasta revectorizare TD386 vede programul
; terminat,pentru ca int 3h nu mai exista pentru el. ;) mov dx,old21_off
mov ds,old21_seg
mov ax,2503h
int 21h
;<----- Aici intra codul vostru.
; La mine este o simpla rutina de afisare a unui text,dar poate fi ; orice!
; Functiile int 21h le puteti apela ca inainte(int 21h) sau, mai
; bine cu int 3.In cazul in care codul a fost spart,hackerul va
; trebui sa inlocuiasca fiecare int 3 cu int 21h.Misto,nu?!(mai
; ales daca folositi int 21h la greu ;))In locul int 21h poate fi
; absolut orice alta intrerupere!!!
mov ah,09h
push cs
pop ds
mov dx,offset sir
int 3
;<----- Aici se termina codul vostru.
xor ax,ax
mov es,ax
; Cedam locul sistemului de operare incarcand vectorul int 3h unde ; ii
este locul pentru ca totul sa se termine cu bine!!!
mov dx,es:[old3_off]
mov ds,es:[old3_seg]
mov ax,2503h
int 21h
mov ax,4c00h
int 21h
OLD3 LABEL DWORD
OLD3_Off dw ?
OLD3_Seg dw ?
OLD21 LABEL DWORD
OLD21_Off dw ?
OLD21_Seg dw ?
sir db 'Anti-debugging code.Not the best from KurruPt - FiŁe.$'
b)Controlul flagurilor.
Aceasta secventa este una dintre preferatele mele.Software-ul care a murit
incercand sa-i dea de cap : RAV 5, RAV 6, TBScan, TBClean, F-Prot, TD386
si toate unpackerele pe care le stiu.Ideea de baza e simpla:cand se incearca
urmarirea pas cu pas sau se pun breakpoints(lucruri realizate numai de
software-ul destinat spargerii de cod) se activeaza niste flaguri.Copilasul
meu nu face altceva decat sa controleze aceste flaguri si daca le vede
activate executa un cod ofensiv care sufoca debuggerul,intitulat sugestiv(!)
"fuck_the_debugger".Daca flagurile sunt ok atunci se continua
executia in mod normal fara nici un inconvenient pentru utilizatorul obisnuit.
start:
push cs
pop ss
;!!!de aici!!!
pushf
pop ax
test ah,01h
;!!!pana aici!!!
;astea au fost cele trei linii de cod care au matrasit atatia c0d3ri ;aflati
in spatele unor programe pretentioase ca cele enumerate mai ;sus.
je no_debugger
jmp fuck_the_debugger
no_debugger:
jmp $+3
mov ax,09f4h
push cs
pop ds
mov dx,offset mesaj
int 21h
mov ax,4c00h
int 21h
fuck_the_debugger:
mov al,0feh
out 64h,al
mesaj db 'Trick$'
K!A venit si timpul
sa inchei vorbaraia asta ,nu ca nu ar mai fi de vorbit pe tema asta,dar
pur si simplu am obosit.Este ora 5:37am si peste fix doua ore si douazeci
si trei de minute am cursuri si n-am dormit deloc.Oricum,trebuie sa arunc
scrumiera(nu o mai pot folosi, chistoacele deja sunt parte integranta),sa-mi
fac loc printre sticlele de Coca-Cola(reclama gratis! CNAule,m-auzi?)
si ambalajele de Chio Chips(iarasi?!) si sa intru pe partitia de
linux
....:P
Daca aveti si voi idei despre chestii d-astea , da-tzi-mi o sa^rma pe
adresa mea(sper sa-mi scrie cineva adresa,ca io-s prea obosit s-o mai
tin minte....) de mail.
BTW,facetzi download la ANTI-D.RAR(il gasiti voi.....) si stiti de ce?!Pentru
ca merita (zic io...)! Ciao, /me va pupa si ne vedem pe IRC!
|
|
|
 |