The Art of Reversing by Ap0x - Tutoriali.org
The Art of Reversing by Ap0x - Tutoriali.org
The Art of Reversing by Ap0x - Tutoriali.org
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Reversing</strong> CRC32 checks<br />
Jedna od veoma cesto koriscenih anti-cracking tehnika je provera CRC<br />
checksuma nekog fajla. Sta je to CRC CRC je tehnika koja omogucava<br />
proveru sadrzine nekog fajla. Ona jednostavno uzme neki fajl, napravi<br />
njegovu “sliku” i to pretvori u osmocifreni heksadecimalni broj koji<br />
predstavlja unikatnu “sliku” posmatranog fajla. Posto CRC zavisi od sadrzine<br />
fajla to znaci da razliciti fajlovi imaju razlicite CRCove. CRC je broj koji se<br />
nalazi u rasponu od 00000000 pa do FFFFFFFF. Ovo ujedno znaci da ako<br />
promenimo neki fajl patchovanjem promenicemo mu i CRC pa ce sam<br />
program jednostavnom proverom znati da je modifikovan. Imajte na umu da<br />
ako je ova zastita dobro implementirana u program bice vam potrebno<br />
izuzetno mnogo vremena i zivaca da pronadjete gde se to tacno nalazi CRC<br />
provera u programu koji reversujete. Primer koji sam ja za ovu priliku<br />
napravio je veoma lak i necete imati nikakvih problema da ga reversujete.<br />
Primer se nalazi ovde: …\Casovi\Cas7\CRC\crc32.exe, a sadrzi i pomocni fajl<br />
crc32table.txt koji u stvari cuva enkriptovani CRC32 checksum crc32.exe fajla.<br />
Primecujete da se u txt fajlu cuva CRC checksum koji program koristi da ga<br />
uporedi sa svojim CRCom i pitate se zasto je to ovako Zasto program ne<br />
cuva svoj CRC u samom sebi Pa odgovor je veoma jednostavan: Ako bi<br />
program cuvao svoj CRC u samom sebi CRC bi se uvek menjao, ako<br />
kompajlujemo program koji cuva u sebi jedan CRC, zbog tog broja CRC bi se<br />
promenio, a ako bismo taj broj promenili u novi CRC, onda bi se CRC opet<br />
promenio pa se zbog toga CRC cuva u posebnom fajlu ili u Registryju. Ako<br />
startujete ovaj primer videcete da se pojavljuje standardan NAG ekran pre<br />
samog startovanja i zatvaranja aplikacije. Ono sto moramo da promenimo u<br />
ovom primeru je da ubijemo ovaj NAG. Ovo je veoma lako i to, ako ste citali<br />
knjigu lepo sa razumevanjem, morate da znate da uradite sami. Kada ovo<br />
uradite snimite fajl kao crc32.exe a stari reimenujte u crc32_1.exe. Ako sada<br />
startujete crc32.exe fajl prikazace se poruka o pogresnom CRCu. Mozete i<br />
nju naci i promeniti. Ovo je isto lako:<br />
00451104 |. E8 DB3AFBFF CALL crc32.00404BE4<br />
00451109 |. 74 40 JE SHORT crc32.0045114B<br />
0045110B |. 6A 40<br />
PUSH 40; MB_OK|MB_ICONASTERISK|MB_APPLMODAL<br />
0045110D |. 68 C0114500 PUSH crc32.004511C0 ; |Title = "Error"<br />
samo treba promeniti skok na adresi 00451109 iz JE u JMP i to je to. Kao sto<br />
rekoh ovo je veoma laka “zastita”, dok ce vas lepo implementirana CRC<br />
provera posteno namuciti. Pogledajmo malo ovu CRC zastitu koja pocinje na<br />
adresi 00450ED0. Jednostavnim pregledom stringova videcemo da program<br />
otvara fajl crc32table.txt i kopira crc32.exe u bak.bak da bi najverovatnije na<br />
novom bak.bak fajlu proverio CRC. Ovo je zanimljivo posto kako vidimo<br />
program koristi specificno ime crc32.exe a ne neku promenljivu u slucaju da<br />
se ime exe fajla promeni. I ovo mozemo da iskoristimo. Iskopirajmo<br />
crc32.exe u novi fajl new.exe i u new.exe fajlu samo ubijmo NAG. Ako sada<br />
startujemo new.exe videcemo da nema NAGa ali da nema ni poruke o<br />
pogresnom CRCu jer se CRC32 proverava na kopiji crc32.exe fajla a ne na<br />
samom sebi, u ovom slucaju new.exe-u. Naravno ako u praksi nadjete ovako<br />
glupu zastitu posaljite mi email programera koji ju je napisao da ga castim<br />
pivom :) A posto sam ovako glupu zastitu napisao ja sam, mislim da cu<br />
<strong>The</strong> <strong>Art</strong> <strong>of</strong> <strong>Reversing</strong> <strong>by</strong> <strong>Ap0x</strong> Page 132 <strong>of</strong> 293