Tema: Re: Darželinuko klausimas apie asm
Autorius: Jornada Del Muerto
Data: 2010-12-14 17:16:19
Dar ZX laikais specialiai veldavom koda visa, kad neitu is viso pradebugyt ar suprast, pvz.:

1. Pasirasai tokia spausdinimo funkcija kuri ESI registre gautu teksto pointeri ka spausdint, daleiskim terminatorius $, o ji poto jumpina i sekanti uz terminatoriaus adresa, tipo:

mov edi, offset label1
jmp print
label1 db "text1$"
mov edi, offset label2
jmp print
label2 db "text2$"

dekompiliuojant viskas susivels i asm instrukcijas.

2. Arba apsauga nuo dunduku budavo, pvz programa turi kazka isspausdint ir iskviest kazkokias kelias proceduras, daleiskim tai com - ta prasme i OS sugryztama su ret;

push offset label1
push offset print
push param1
push param2
push offset routine1
push offset routine2
ret
... o cia beleko prikist galima kad painiau butu... taip pat tarpe pushu galima kokia nors netikra logika ideti tiesiog demesi nukreipt nuo esmes...
label1 db "belenkas$"
routine1:    
    pop eax
    pop ebx
    .. do something ..
    ret
routine2:
    ..do something...
    ret
print:
    pop esi
    .. print text as esi...
    ret

3. Masininio kodo lauzymas

Atmitinai nepamenu jau x86 mnemonikos bet, visada galima budavo isdurt nesamoningu baitu prikaisiojant i programa

vyksta kazkokia pseudo logika:

mox eax, #9c9c4040
dec eax
and bx, 0
pop edi
mox esi, edi
dec edi
push edi
mox ebx, offset label2
mox ecx, ebx
inc ebx
push ecx
push ebx
ret
label1 db kazkokie klaidinantys baitai
label2 db klaidinantis prefixas per kuri asmo komanda dekompiliojant virsta visai kita, 1 ar keli baitai, atitinkamai tiek kartu inc ebx aisku tai gali buti ir kokia nors buline daugyba ar sudetis jei ju daug
label3:
normalus kodas

mnemonikos dabr nepamenu tai siaip is galvos parasysiu, norint galima pagal mnemonika susirast realias komandas, pvz. masininis kodas but:
label2:
21 
label3:
56 41

    taciau su 21 daleiskim gaunasi visai kita instrukcija, pvz valdancioji ret, call, jmp ir t.t.. ta prasme keicianti ECS o su label2 dekompiliuosis i kita instrukcija, zaidimas prideliojas i steka tikru ne tikru adresu trukdys atrinkt galus,galu gale galima ir teksta paleist labai norint jei is jo gausis jmp, dekompiliatorius is viso gali nesusigaudyt kas darosi, taip kaip ir su debugeriu koks studentas ;) 


va tokius dalykus darydavau 16 metu ;) tik ant z80 ;)