Prvo sto treba da uradimo je da da sve simbole iz crc32table.txtpretvorimo u ASCII kodove. U ovom slucaju je ovo jako tesko izvesti, jer suslova prilicno ne standardna, pa cemo napraviti program koji ce to uraditi zanas. Kod Visual Basic programa koji to radi bi izgledao bas ovako:Text2.Text = ""for i = 1 to Len(Text1.Text)Text2.Text = Text2.Text & Asc(Mid$(Text1.Text,i,1))if i < Len(Text1.Text) then Text2.Text = Text2.Text + “,”next iText2 sadrzi rezultat a Text1 sadrzi string za koji se racuna ASCII. Gotovprimer se nalazi u istom folderu pod imenom ascii.exe. Otvorimo ovajprogram i u njega unesimo string iz fajla crc32table.txt. Ono sto ce programpokazati je:27,111,111,20,25,25,30,25Sada treba patchujemo program crc32.exe i snimimo patchovan program kaonew.exe. Patchovacemo 00450E88 adresu u ovo:00450E88 C3 RET00450E89 90 NOPReimenujte originalni crc32.exe u crc32_1.exe, a new.exe u crc32.exe. Sadacemo pomocu getCRC32.exe dobiti CRC vrednost fajla crc32.exe (new.exe)fajla, dobicemo novi CRC koji iznosi 0D2541F9 (zapamtite CRC mora imati 8cifara). Sada cemo i ovaj CRC pretvoriti u ASCII pomocu ascii.exe-a.Dobicemo ovo:48,68,50,53,52,49,70,57Pored ovog nam je poteban i ACII kod originalnog crc32.exe fajla, koji setrenutno zove crc32_1.exe. Posto znamo da ovaj CRC iznosi 7CC85525, injega cemo pretvooriti u ASCII. To izgleda ovako:55,67,67,56,53,53,50,53Sada treba da otkrijemo kako treba enkriptujemo novu CRC vrednost -0D2541F9. Za ovo su nam potrebna dva podatka. ASCII enkriptovanog CRCai ASCII samog CRCa. Ovi podaci su:27,111,111,20,25,25,30,25 i 55,67,67,56,53,53,50,53Ono sto je bitno da se svaka prosta a i komplikovana enkripcija zasniva naobicnom XOR-ovanju. Ovo znaci da je ASCII kod jednog karakteraenkriptovan (xorovan) nekom vrednoscu i tako je dobijena nova ASCIIvrednosti. Mi treba da saznamo kojom vrednoscu je XORovan svaki karakteroriginalnog CRCa - 7CC85525 kako bi bio dobijen enkriptovani string koji senalazi u crc32table.txt fajlu. Ovo cemo dobiti reversnim xorovanjem, to jestuporedjivanjem enkriptovanog stringa i neenkriptovanog originalnog CRCacrc32.exe fajla. Znaci 27 xor ?? = 55, 111 xor ?? = 67,... Ono sto je bitno kod xorfunkcije je da je ona revezibilna to jest da je x xor y = z ali i da je z xor x = y i zxor y = x, i tako cemo otkriti vrednost ??. Znaci 55 xor 27 = 44, 67 xor 111 = 44,... itako smo dobili magicnu xor vrednost za svako slovo CRCa. Sada treba samoda enkriptujemo novi CRC pomocu vrednosti 44, i da dobijenu ASCIIvrednost pretvorenu u slova i simbole snimimo u crc32table.txt fajl. Ovocemo uraditi pomocu novog programa koji cemo sami napisati. Evo kako toizgleda u Visual Basicu:<strong>The</strong> Art <strong>of</strong> Cracking by Ap0x Page 76 <strong>of</strong> 165
Text2.Text = ""for i = 1 to Len(Text1.Text)Text2.Text = Text2.Text & Chr(Asc(Mid$(Text1.Text,i,1)) xor 44)next iopen "crc32table.txt" for output as #1print #1, Text2.Textclose #1Gotov primer se nalazi u istom folderu pod imenom XORascii.exe. Otvorimoovaj program, unesimo novi CRC u njega (0D2541F9) i program ce samgenerisati novi crc32table.txt fajl. Ako probamo da st<strong>art</strong>ujemo crc32.exesada videcemo da se poruka o modifikaciji ne menja, to jest da je jos tu.Mora da smo negde pogresili !!! Probajmo samo da umesto 0D2541F9unesemo D2541F9 u XORascii.exe i st<strong>art</strong>ujmo program sada. Radi, znaci ipakje sve ok. Ova tehnika moze biti “malo” komplikovana ali je odlicna ako sesvaki karakter XORuje drugacijim brojem, tako da ovu vrstu dekripcije nijelose znati. Istu ovakvu ekripciju passworda mozete naci i u programu Trillian,pa za vezbu mozete napraviti program koji dekriptuje njegov password.Drugi nacin:Drugi nacin se zasniva na reversovanju samog loopa za dekripcijuenkriptovanog CRCa iz crc32table.txt fajla. Ovo je veoma lako (lakse od prvognacina) i dacu vam odmah source za Visual Basic:Text2.Text = "" ‘izlazni text boxfor i = 1 to Len(Text1.Text) ‘ulazni text boxText2.Text = Text2.Text & Chr(Asc(Mid$(Text1.Text,i,1)) xor 44)next iopen "crc32table.txt" for output as #1print #1, Text2.Textclose #1i za Delphi:varwFile:TextFile;crc:string;i:integer;begincrc := ‘’;for i := 1 to Length(Edit1.Text) do begin //ulazni text boxcrc := crc + Chr(ORD(Edit1.Text[i]) xor 44);end;AssignFile(wFile,‘crc32table.txt’);writeln(wFile,crc);CloseFile(wFile);end;<strong>The</strong> Art <strong>of</strong> Cracking by Ap0x Page 77 <strong>of</strong> 165