Delphi a nd A S MKao veoma obican i lak primer sam za ovaj sesti cas pripremioBangalyev CrackMe #2. On kao i ostali primeri koje ja nisam napisao moguse preuzeti sa adrese www.crackmes.de Ako “propustimo” ovaj primer krozPeID videcemo da je on pisan u TASMu / MASMu. Ok otvoricemo Olly davidimo sta se desava unutar ovog programa. Predpostavicu da znate dapronadjete mesto gde se generise seriski broj pa cemo odmah preci na stvar.Znaci imamo ovaj deo koda koji nam je interesantan i ne zelimo da ponovopisemo ovu rutinu:00401304 |. B8 01000000 MOV EAX,100401309 |> 8B15 38304000 /MOV EDX,DWORD PTR DS:[403038]0040130F |. 8A90 37304000 |MOV DL,BYTE PTR DS:[EAX+403037]00401315 |. 81E2 FF000000 |AND EDX,0FF0040131B |. 8BDA |MOV EBX,EDX0040131D |. 0FAFDA |IMUL EBX,EDX00401320 |. 03F3 |ADD ESI,EBX00401322 |. 8BDA |MOV EBX,EDX00401324 |. D1FB |SAR EBX,100401326 |. 03F3 |ADD ESI,EBX00401328 |. 2BF2 |SUB ESI,EDX0040132A |. 40|INC EAX0040132B |. 49|DEC ECX0040132C |.^ 75 DB \JNZ SHORT Key-Crac.004013090040132E |. 56PUSH ESIMozemo da postavimo break-point na adresu 00401309 i da prodjemo parputa kroz ovaj loop da vidimo sta se to desava ovde. Videcemo da se u prvatri reda u EDX stavlja prvo,drugo,... slovo iz imena, u ostalim se vrse nekeracunske operacije i ovaj loop se ponavlja vise puta, odnosno onoliko putakoliko ime ima slova. Ono sto vidimo je da se svi registi sem ESI resetuju tojest da dobijaju neke nove vrednosti. Ovo ujedno znaci da ce na kraju loopaESI sadrzati pravi seriski broj. Ako ovo odavde ne mozete da zapazite imate ideo koda malo ispod koji vam upravo ovo govori:0040133A |. 3BC60040133C |. 75 15CMP EAX,ESIJNZ SHORT Key-Crac.00401353Ono sto cemo mi uraditi je da cemo iskoristiti ovaj ASM kod da napravimoDelphi keygenerator, ali to necemo radi prevodjenjem ovog ASM koda uDelphi nego malom modifikacijom ovog ASM koda i njegovim ubacivanjem uDelphi program. Sve od adrese 0040131B pa do adrese 00401328 cemoostaviti kako jeste, dok cemo ostatak prilagoditi. Znaci ovo cemo maloprilagoditi:MOV EBX,EDXIMUL EBX,EDXADD ESI,EBXMOV EBX,EDXSAR EBX,1ADD ESI,EBXSUB ESI,EDXOno sto moramo da uradimo je da pre izvrsavanja ovoga u EDX stavimovrednost ASCII koda nekog slova iz imena, a na kraju da ESI sacuvamo uneku promenjivu.Znaci kod cemo izmeniti u ovo:<strong>The</strong> Art <strong>of</strong> Cracking by Ap0x Page 58 <strong>of</strong> 165
asm {Pocetak ASM bloka}XOR ESI,ESI {Dodali smo ovu ASM komandu}MOV ESI,serial{U delphiu i unutar ASM bloka mozemo koristiti sve promenjive }MOV EBX,slovo{koje su definisane unutar procedure koju koristimo }XOR EBX,EBXMOV EBX,EDXIMUL EBX,EDXADD ESI,EBXMOV EBX,EDXSAR EBX,1ADD ESI,EBXSUB ESI,EDXMOV serial,ESI {ESI registar brise po zavrsetku bloka pa ga moramo sacuvati u promenjivoj}end; {Kraj ASM bloka}Ono sto smo ovde dodali je brisanje ESIa i dodeljivanje vrednosti promenjiveserial ESIu, a na kraju dodeljivanje vrednosti ESIa promenjivoj serial. Postoovo treba da se ponavlja za svako slovo iz imena, to ce u Delphiu izgledatiovako:procedure TForm1.Button1Click(Sender: TObject);varslovo,i,serial:longint;ime:string;beginserial := 0;ime := Edit1.Text;for i := 1 to Length(ime) do beginslovo := Ord(ime[i]);asmXOR ESI,ESIMOV ESI,serialMOV EDX,slovoXOR EBX,EBXMOV EBX,EDXIMUL EBX,EDXADD ESI,EBXMOV EBX,EDXSAR EBX,1ADD ESI,EBXSUB ESI,EDXMOV serial,ESIend;end;messagedlg(‘Vas seriski broj je: ‘ + IntToStr(serial) + ‘ !’, mtInformation,[mbOK],0);end;Ovo je jako jednostavan primer ali vam pokazuje kako mozete iskoristite deotudjeg koda da napravite u ovom slucaju keygenerator. U folderu…\Casovi\Cas6\keygen-source\ se vec nalazi ovaj gotov primer i source code zanjega.NAPOMENA: Ovo poglavlje je zamisljeno da bude od velike koristi Delphiprogramerima koji se bave reversnim inzinjeringom i zeleli bi da reversujuneke algoritme bez njihovog rekodiranja u Delphi sintaksu, ostalima ovaj deopoglavlja nece biti od velike vaznosti pa ga mozete preskociti.<strong>The</strong> Art <strong>of</strong> Cracking by Ap0x Page 59 <strong>of</strong> 165