Zakladne antireversing techniky.1 - lahky uvod

Zdroj: SOOM.cz [ISSN 1804-7270]
Autor: jOe
Datum: 10.9.2007
Hodnocení/Hlasovalo: 0/0

Zakladne antireversing techniky.1 - lahky uvod

Zakladne antireversing techniky.1 - lahky uvod

V tomto clanku si preberieme par zakladnych technik na ztazenie
analizy kodu.

Pri vytvarani softwarovych ochran sa treba vzit do koze crackera.
Takze zastanme nachvilu a zamyslime.Ake su prve kroky,co prve robi clovek
ktory zacal s analyzou nasho kodu?

1.Myslim ze vacsina z vas otvori nejaky PE header scanner a hlada znamky
zapakovanych popripade zacryptovanych sekcii.

2.Ako druhy krok prebieha kontrola struktury PE headera.
Na tieto dve veci sa zameriame niekedy inokedy to nas momentalne nezaujima.

Takze nedetekovali sme ziaden packer a PE struktura je v poriadku co by spravila vacsina ludi?

3.Analyza string references.

Ano prave string references predstavuju caste miesto vstupu do programu. Casto nam stringy ako "Good serial" prezradia miesto ktore ma zjavne co docinenia s kontrolou SN.Vacsinou sa nablizku nachazda algorytmus na kontrolu
vstupnych udajov s naslednym rozhodnutim spravnosti a nespravnosti registracie.
Prave s timto by sme mali pocitat pri vytvarani kontrolneho algorytmu.

Tu je jednoducha metoda ako vytvorit string za az behu.

char text[] = {'G','o','o','d','','s','e','r','i','a','l','\0'};

Skor ci neskor by cracker objavil kod ktory vyzera nejak takto:

MOV BYTE PTR SS:[EBP-C], 47
MOV BYTE PTR SS:[EBP-B], 6F
MOV BYTE PTR SS:[EBP-A], 6F
MOV BYTE PTR SS:[EBP-9], 64
MOV BYTE PTR SS:[EBP-8], 20
MOV BYTE PTR SS:[EBP-7], 73
MOV BYTE PTR SS:[EBP-6], 65
MOV BYTE PTR SS:[EBP-5], 72
MOV BYTE PTR SS:[EBP-4], 69
MOV BYTE PTR SS:[EBP-3], 61
MOV BYTE PTR SS:[EBP-2], 6C
MOV BYTE PTR SS:[EBP-1], 0

Ako vidite bolo by velke stastie ak by si cracker takito kod nevsimol. Mozete pouzit rozne sifrovacie algorytmi a string odsifrovat za behu ale obecne je najlepsie string vobec nepouzit.

Pri nepravnom zadani nemusite odpovedat a v pripade spravneho serioveho cisla
mozete uzivatela upozornit aj inym sposobom.

Daju sa pouzit rozne techniky
avsak pri velkej aplikaci,z mnoho externymi dllkami moze aj tato technika crackera
trosku zdrzat v pripade ze tento kod dobre schovate.

4.Breakpointy na zname funkcie.

Vyborne.String refences sme eliminovali,cize vacsina crackerov skusi dalsi postup.
Niektory programatori sa dopustaju velkych chyb ak vo svojom 1337 kontrolnom algorytme pouzivaju notoricky zname funkcie ako strcmp,strlen alebo API GetDlgItemText , MessageBox;

Neraz sa mi stalo ze jeden dobry breakpoint stacil na zistenie spravneho serial.
Pred ocami sa mi zjavil kod podobny tomuto:

push offset var1; blablabla
push offset var2; spravny serial
call strcmp
test eax,eax
jz good
; bad
; good

pricom var1 bol serial ktory som zadal var2 bol spravny serial k mojmu menu.

Taketo chyby su fatalne a znicia cely ,niekedy dobry algorytmus. Ved je predsa velmi jednoduche he napisat si rutinu na porovnanie stringov

int Compare(char *string1,char *string2)
{
int i;
for(i = 0;true;i++)
{
if(string1[i] == 0)
{
if string2[i] == 0)
{
return 0;//identical
}else
{
return -1;//bad
}
}
if(string1[i] != string2[i])
{
return -1; //bad
}
}
}

a to uz nehovorim ze je to cele vopred odsudene k zahube.
Takze ako skryjeme volania nasich standartnych API funkcii?

Moznosti je niekolko ako prve musim vysvetlit par pojmov.

Importovane funkcie.
Su to funkcie,ktore su PE suborom volane ale on sam ich neobsahuje.

Importovane funkcie su zapisane v takzvanej tabulke importov -
IMPORT ADDRESS TABLE.(IAT)

V tabulke su je zoznam mien funkcii a zoznam modulov ktore ho exportuju.

Address=00425294 Section=.idata Type=Import(Known) Name=USER32.MessageBoxA

Pozname aj tabulku exportov - EXPORT TABLE.
V nej je zoznam funkcii ktore PE subor exportuje.
Vacsinou exportuju dynamicke kniznice (dynamic libraries) .dll

Strukturu PE Headera si este preberieme podrobnejsie,ked si budeme vytvarat vlastny PE sifrer(ak sa mi bude chciet pisat tieto clanky)

Standartne volania externych funkcii pouzivaju IAT,ale my chceme svoje volanie schovat takze musime vymysliet nieco ine.

HMODULE Handle = GetModuleHandle("user32");
FARPROC hMbox = GetProcAddress(Handle,"MessageBoxA");

_asm
{
push 0
push addr title
push addr text
push 0
call hMbox // call MessageBox()
}

aby sme presne pochopili ako kod uvedeny hore funguje
pozreme si MSDN popis funkcie GetProcAddress()

return value:
If the function succeeds, the return value is the address of the exported function or variable.

Cize hMbox obsahuje adresu API funkcie MessageBoxA v user32.dll
a ako operand instrukcii call pouzijeme priamu adresu.

Nielen ze takto volana funkcia nebude v IAT ale v prvom priblizeni nebude cracker ani vediet aka funckia je volana
lebo uvidi nieco ako toto:

push
push
push
mov dword ptr [ebp-4], 401012
call dword ptr [ebp-4]

Samozrejme ze za behu cracker zisti aka funckia je volana.V tom by mu mohli zabranit antidebug techniky.

Vyborne.IAT crackerovi nic neprezradi.GetProcAddress musime mat v IAT
a pomocou nej potom ziskame handle ostatnych funkcii. (niektore packeri pouzivaju tuto techniku pri depacku)

Este by sa dala pouzit technika skopirovania export table,nejakeho modulu tu mozno ukazem inokedy.

Samozrejme ze tieto techniky samy o sebe crackera nezastavia a pre skusene crackera to bude zbytocna otrava ale v kombinacii s pokrocilejsimi technikami ako code obfuscation, rozne antidebug techniky,sifrovanie
mozu byt zrazu celkom ucinne.

Velmi casta otazka: "Oplati sa ochranovat software ,ked mi ho aj tak cracknu?"
Urcite ano.Uz neraz sme sa stali svedkami situacie,ked najskusenejsim crackerom sveta trvalo 3 mesiace kim ochranu prelomili,vtedy sa konkretne jednalo o Star-force.Jeden software vydrzal 2.5 roku kim boli crackeri schopni vytvorit plnohodnotny keygen.Mozno niekedy vysvetlim co im sposobovalo take velke problemy.

Pouzitim pokrocilych technik sa da analyza tak skomplikovat,ze crackovat takyto software
je vyslovene utrpenie.Tieto techniky vsak nie
su zaujimave len pre tvorcov softwarovej ochrany.

Pre tvorcov roznych wormov,virov,botov je castokrat klucove zdrzat security business v analyze.V tejto dobe je velmi rychle zachytenie wormu do honeypotu skoro iste a nikto predsa nechce prist o 0-day len tak zadarmo.Takisto klamanie AV signatur je velmi dolezite.V buducnosi mozme ocakavat metamorphne wormy,ktorych kazda nova kopia bude plnit rovnaku funkciu
ale kod bude naprosto odlisny.Takisto techniky na zakryvanie praveho miesta vniknutia zacinaju byt nutnostou.

V niektorom z clankov si rozobereme bota,mozno sa nam podari ulovit aj botnet ako sa uz par krat stalo.
Tento clanok bol take rozbehnutie a nepriniesol nic extra.
Nabuduce sa trosku pohrame s ret instrukciou a mnoho dalsieho.
(Tieto clanky nebudu vychazdat pravidelne a nie je iste ci vobec budu.)

Citajte Phrack a budte verni undergroundu.
Zapojte sa do projektu anti NARUS (blizsie info v Phracku)
Takisto mozete mapovat dolezite uzly internetu a poslat ich phracku.

Autor: jOe <10.9.07>
j0shbyte@gmail.com

icq 284848285 - len rozumne veci!

<--- blackhat-forums.com --->

http://community.reverse-engineering.net/
http://www.codebreakers-journal.com/
https://www.damnvulnerablelinux.org/
http://packetstormsecurity.org/
http://www.woodmann.com/forum/
http://www.cryptome.org/
http://www.2600.com/
http://rootkit.com/

EOF