07.02.2015 Views

The Art of Reversing by Ap0x - Tutoriali.org

The Art of Reversing by Ap0x - Tutoriali.org

The Art of Reversing by Ap0x - Tutoriali.org

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

VC++ and ASM<br />

Vec smo videli da kako se u Delphiju koristi ASM, a sada ostaje da<br />

iskoristimo ovo znanje i da ga primenimo na VC++. Za ovo cemo iskoristiti<br />

isti primer koji smo iskoristili i za Delphi. Evo kako bi to izgledalo u C++u:<br />

#include <br />

#include <br />

int main(void){<br />

unsigned int i,serial,ln;<br />

char* ime;<br />

char name[50];<br />

printf("Enter name: ");<br />

gets(name);<br />

ln = strlen(name);<br />

ime = name;<br />

serial = 0;<br />

__asm{<br />

MOV ECX,ime<br />

MOV EAX,0h<br />

lop:<br />

movzx EDX,<strong>by</strong>te ptr[ECX+EAX]<br />

MOV EBX,EDX<br />

IMUL EBX,EDX<br />

ADD serial,EBX<br />

MOV EBX,EDX<br />

SAR EBX,1<br />

ADD serial,EBX<br />

SUB serial,EDX<br />

INC EAX<br />

CMP EAX,ln<br />

jne lop<br />

}<br />

printf("Serial: %d \n",serial);<br />

gets(name);<br />

return 0;<br />

}<br />

Analiziracemo malo ovaj kod. Kao sto vidimo prvo cemo konzolno uneti nase<br />

ime. Prvo cemo videti da je ASM blok odvojen od ostalog koda pomocu<br />

komande __asm{} koja oznacava blok komandi. Takodje cete primetiti da<br />

ime mora biti tipa const char jer ce se u protivnom desiti Access exception i<br />

program ce se srusiti. Sledeci problem predstavlja prosledjivanje slova, jedno<br />

po jedno, samoj petlji Ovo cemo resiti pomocu sledecih komandi:<br />

MOV ECX,ime ... MOVZX EDX,BYTE PTR[ECX+EAX]<br />

Gde prva komanda u ECX registar prosledjuje const char ime (unutar ASM<br />

bloka se mogu koristiti sve varijable definisane u programu), a druga EDX registru<br />

dodeljuje HEX vrednost svakog slova. Ovo se radi preko pointera koji<br />

prevashodno prvo pokazuje na ECX, sto predstavlja prvo slovo unetog imena.<br />

Posto se EAX povecava u svakom prolazu tako i EDX dobija drugu vrednost<br />

sve dok se ne iskoriste sva slova i EAX dobije vrednost duzine unetog imena.<br />

Od ostalih specificnosti bitno je znati da se labele oznacavaju isto kao i u<br />

MASMu to jest kao ime:. Ka ovim labelama se moze usmeravati program<br />

pomocu bilo koje standardne JMP komande i njenih varijanti. Labele se<br />

takodje mogu pozivati i u smislu CALL komande ali se onda kao i kod ASM<br />

programiranja mora navesti izlazak (RET komanda) iz CALLa koji pocinje sa<br />

labelom.<br />

<strong>The</strong> <strong>Art</strong> <strong>of</strong> <strong>Reversing</strong> <strong>by</strong> <strong>Ap0x</strong> Page 117 <strong>of</strong> 293

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!