Srodne teme
14.04.2024. Re: Gde je Kejt? (samo pogrešni odgovori)
30.07.2001. vCard exploit
15.03.2002. Plug-inovi (Delphi/win32asm)
14.03.2002. Problem sa dll-ovima
18.04.2002. dll
01.08.2002. DLL
24.06.2003. dll missing
19.02.2011. pisanje .dll u VB-u?
Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

MessageBoxA in user32.dll

[es] :: Security Coding :: MessageBoxA in user32.dll

Strane: 1 2 3

[ Pregleda: 9925 | Odgovora: 40 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Vojislav Milunovic

Član broj: 25
Poruke: 2117
*.verat.net



+1 Profil

icon Re: MessageBoxA in user32.dll30.07.2001. u 11:45 - pre 277 meseci
Nije bre tako...evo ti sta gdb kaze za taj tvoj kod :

Code:

0x80494d4 <gg>: call   0x18254464


i
Code:

char gg[] = {0xe8, 0x8b, 0xaf, 0x20, 0x10};
 
Odgovor na temu

tOwk
Danilo Šegan
Zemun/Beograd

Član broj: 94
Poruke: 2743
*.etf.bg.ac.yu

ICQ: 9344053
Sajt: alas.matf.bg.ac.yu/~mm011..


+2 Profil

icon Re: MessageBoxA in user32.dll31.07.2001. u 02:19 - pre 277 meseci
Ma nemoguce, pomocu NASM-a sam proverio.

Uostalom, pogledacu i instruction set reference od Intela, pa cu da budem siguran.

Ali, to malo kasnije.

Toliko.
Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.
 
Odgovor na temu

tOwk
Danilo Šegan
Zemun/Beograd

Član broj: 94
Poruke: 2743
*.etf.bg.ac.yu

ICQ: 9344053
Sajt: alas.matf.bg.ac.yu/~mm011..


+2 Profil

icon Re: MessageBoxA in user32.dll31.07.2001. u 02:27 - pre 277 meseci
U pravu si, znam zasto sam istripovao.

U pitanju je relativna adresa, pa ona moze uvek biti razlicita. Zbog toga, mislim da ova adresa zavisi od toga gde je kod ucitan. Nemam sad vremena time da se bakcem, pogledacu samo jos da nema neka far call instrukcija sa direktnim operandom, a ne relativnim.


Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
*.verat.net



+1 Profil

icon Re: MessageBoxA in user32.dll31.07.2001. u 12:17 - pre 277 meseci
Ma turis u register i cepas ;o) sta je to 7 instrukcija u odnosu na 5 instrukcija.mislim kod se moze optimizovati na mali milion mesta
 
Odgovor na temu

tOwk
Danilo Šegan
Zemun/Beograd

Član broj: 94
Poruke: 2743
*.etf.bg.ac.yu

ICQ: 9344053
Sajt: alas.matf.bg.ac.yu/~mm011..


+2 Profil

icon Re: MessageBoxA in user32.dll01.08.2001. u 12:59 - pre 276 meseci
Citat:
Intel Software Developer's Manual 3: Instruction Set reference:

Opcode - Instruction - Description

E8 cw CALL rel16 Call near, relative, displacement relative to next instruction

E8 cd CALL rel32 Call near, relative, displacement relative to next instruction

FF /2 CALL r/m16 Call near, absolute indirect, address given in r/m16

FF /2 CALL r/m32 Call near, absolute indirect, address given in r/m32

9A cd CALL ptr16:16 Call far, absolute, address given in operand

9A cp CALL ptr16:32 Call far, absolute, address given in operand

FF /3 CALL m16:16 Call far, absolute indirect, address given in m16:16

FF /3 CALL m16:32 Call far, absolute indirect, address given in m16:32


Tabela bas i nije lepo poravnata, ali mislim da bi "FF /2 CALL r/m32 Call near, absolute indirect, address given in r/m32" bilo ono sto se trazi.

Prema tome, treba probati 0xff 0x10 0x10 0x10 0x10 da bi bio u pitanju call 0x10101010

Makar mislim, nisam ispitao ceo pricucnik.

A sto se optimizacije tice, predatorova tvrdnja stoji. Cak, zasto koristiti call kad se moze koristiti jmp. Call je sporiji i rizicniji (menja stack), pa bih predlozio jmp. Ali o tom, potom.

Toliko.
Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
*.verat.net



+1 Profil

icon Re: MessageBoxA in user32.dll01.08.2001. u 14:34 - pre 276 meseci
call je koristan kad treba neki string da pokupis koji se nalazi u kodu : "/bin/sh" najcesce mada moze sa push da se napravi nesto ali jmp-call je mnogo lepsa i elegantnija varijanta ;o)
 
Odgovor na temu

tOwk
Danilo Šegan
Zemun/Beograd

Član broj: 94
Poruke: 2743
*.rcub.bg.ac.yu

ICQ: 9344053
Sajt: alas.matf.bg.ac.yu/~mm011..


+2 Profil

icon Re: MessageBoxA in user32.dll02.08.2001. u 03:37 - pre 276 meseci
Ovo poslednje nisam razumeo, pa ako mozes da mi objasnis, bio bih zahvalan.

Toliko.
Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
*.verat.net



+1 Profil

icon Re: MessageBoxA in user32.dll02.08.2001. u 10:26 - pre 276 meseci
Pa call sluzi da se nadje adresa necega u memoriji !

call offset
nesto
offset:
pop %ebx i sad u ebx imas adresu od nesto,to nesto je najcesce string "/bin/sh" mada sa push moze da se kreira string.http://www.hack.co.za hell code za Linux 22byte (ili za FreeBSD) pa pogledaj nasta mislim
 
Odgovor na temu

tOwk
Danilo Šegan
Zemun/Beograd

Član broj: 94
Poruke: 2743
*.rcub.bg.ac.yu

ICQ: 9344053
Sajt: alas.matf.bg.ac.yu/~mm011..


+2 Profil

icon Re: MessageBoxA in user32.dll03.08.2001. u 02:30 - pre 276 meseci
Ok, shvatio sam (ili mi se makar cini).

call smesta EIP na stack kako bi mogao da se vrati sa ret, a to se naravno moze i rucno iscitati sa steka, kada ret bas i nece dobro raditi.

Ali, zar ne postoje jos neki nacini da se sazna adresa necega u kodu. Samo iscitavanje EIP sa mov npr. bi trebalo da uradi posao (ili movl :).
Jedino je problem sto tada treba dodati velicinu trenutne komande (mozda) na EIP. Mozda i ne ako procesor uveca EIP u trenutku izmedju ucitavanja komande i njenog izvrsavanja, ali to treba proveriti.

To je nesto kao caka, i koliko vidim korisno je zato sto je jednostavno, i najverovatnije manje mesta zauzima od jednog mov-a i add-a.

Toliko.


Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
*.verat.net



+1 Profil

icon Re: MessageBoxA in user32.dll03.08.2001. u 11:35 - pre 276 meseci
E pa ne mozes da citas EIP sa movl ;o) To je bre ne moguce...njega inkrementira procesor a puni se sa call / jmp instrukcijama ;o)
 
Odgovor na temu

kajla
Milorad Janković
Beograd

Član broj: 445
Poruke: 909
*.InfoSky.Net



+2 Profil

icon Re: MessageBoxA in user32.dll03.08.2001. u 15:31 - pre 276 meseci
Citat:
predator je napisao:
E pa ne mozes da citas EIP sa movl ;o) To je bre ne moguce...njega inkrementira procesor a puni se sa call / jmp instrukcijama ;o)


Nisam svatio sta je nemoguce: da se cita EIP sa mov ili je nemoguce da se cita EIP?
ovo drugo mora da je moguce jer kako debuger-i citaju CPU registre(izmedju ostalog i EIP)?

poz.
 
Odgovor na temu

kajla
Milorad Janković
Beograd

Član broj: 445
Poruke: 909
*.InfoSky.Net



+2 Profil

icon Re: MessageBoxA in user32.dll03.08.2001. u 15:35 - pre 276 meseci
Citat:
tOwk je napisao:
Citat:
Intel Software Developer's Manual 3: Instruction Set reference:

Opcode - Instruction - Description

E8 cw CALL rel16 Call near, relative, displacement relative to next instruction

E8 cd CALL rel32 Call near, relative, displacement relative to next instruction

FF /2 CALL r/m16 Call near, absolute indirect, address given in r/m16

FF /2 CALL r/m32 Call near, absolute indirect, address given in r/m32

9A cd CALL ptr16:16 Call far, absolute, address given in operand

9A cp CALL ptr16:32 Call far, absolute, address given in operand

FF /3 CALL m16:16 Call far, absolute indirect, address given in m16:16

FF /3 CALL m16:32 Call far, absolute indirect, address given in m16:32


Tabela bas i nije lepo poravnata, ali mislim da bi "FF /2 CALL r/m32 Call near, absolute indirect, address given in r/m32" bilo ono sto se trazi.

Prema tome, treba probati 0xff 0x10 0x10 0x10 0x10 da bi bio u pitanju call 0x10101010

Makar mislim, nisam ispitao ceo pricucnik.

A sto se optimizacije tice, predatorova tvrdnja stoji. Cak, zasto koristiti call kad se moze koristiti jmp. Call je sporiji i rizicniji (menja stack), pa bih predlozio jmp. Ali o tom, potom.

Toliko.


tOwk mozes da mi posaljes taj "Intel Software Developer's Manual" na [email protected], bio bi ti zahvalan...

poz.
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
*.verat.net



+1 Profil

icon Re: MessageBoxA in user32.dll03.08.2001. u 17:31 - pre 276 meseci
Citat:
kajla je napisao:

Nisam svatio sta je nemoguce: da se cita EIP sa mov ili je nemoguce da se cita EIP?
ovo drugo mora da je moguce jer kako debuger-i citaju CPU registre(izmedju ostalog i EIP)?


EIP ne mozes da diras sa movl instrukcije koje mogu da sacuvaju/promene eip su call,jmp,ret i srodne funkcije.
Za to kako radi debuger mozes da pogledas man ptrace,mada Intel ima debug registre koji su nama obicnim programerima nevidljivi...o njima znam malo mada u ovom Intel Developer Manualu mozes da nadjes opsirno o njima.
 
Odgovor na temu

tOwk
Danilo Šegan
Zemun/Beograd

Član broj: 94
Poruke: 2743
*.rcub.bg.ac.yu

ICQ: 9344053
Sajt: alas.matf.bg.ac.yu/~mm011..


+2 Profil

icon Re: MessageBoxA in user32.dll03.08.2001. u 23:15 - pre 276 meseci
Probao sam i vidim da si u pravu. Cak ni push ne moze da ga iscita, pa sam morao da pogledam Intelovu dokumentaciju, a ono tamo stvarno kaze da je jedini nacin da se iscita EIP pomocu call-a i onda citanja sa steka.

Sto se tice izmena EIP-a jasno mi je da se to ne moze direktno uraditi, ali sam mislio da postoji neka mogucnost kao sto je za CS (moze da se cita, ne moze da se menja sa mov), ali ocigledno da sam pogresio.

U svakom slucaju, hvala na prosvetljenju.

Toliko. (Gotovo)
Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
*.verat.net



+1 Profil

icon Re: MessageBoxA in user32.dll04.08.2001. u 11:12 - pre 276 meseci
lcall moze da odradi posao sto se tice CS ;o)
 
Odgovor na temu

kajla
Milorad Janković
Beograd

Član broj: 445
Poruke: 909
*.136.EUnet.yu



+2 Profil

icon Re: MessageBoxA in user32.dll04.08.2001. u 22:35 - pre 276 meseci
ZAnima me jos sledece:
int i=0xFF;

while (i)
{
clrscr();
--i;
}

sad ovo kad sam sa kompajlirao sa tcc -S dobio sa asm kod ali nigde loop
instrukcije, vec idu sa cmp pa onda sa kondicionim jump-om (jne) za nebi moglo to ovako:
Code:

push ebp
mov ebp,esp
push esi
mov esi,0xFF
lbl: call far ptr _clrscr
loop lbl


poz
 
Odgovor na temu

tOwk
Danilo Šegan
Zemun/Beograd

Član broj: 94
Poruke: 2743
*.rcub.bg.ac.yu

ICQ: 9344053
Sajt: alas.matf.bg.ac.yu/~mm011..


+2 Profil

icon Re: MessageBoxA in user32.dll05.08.2001. u 13:36 - pre 276 meseci
kajla>
uputstva na developer.intel.com/design/PentiumII/manuals/, ima nekih i za optimizaciju i jos ponesto.

predatore> CS moze da se menja sa POP zar ne? naravno i JMP i CALL u FAR varijantama to isto rade.

A sto se tice tog primera koji si dao kajla jednostavno je objasniti. Moraces da se postavis u poziciju onog koji pravi kompajler.

while (uslov) { rad(); } ciklus se implementira u tom kompajleru najverovatnije uvek na isti nacin.

Na primer, prvo cemo staviti label na pocetak (kompajler naravno ne stavlja label posto ide preko adresa :).
Zatim ide testiranje uslova, kakav god on bio: jednostavan kakav si ti naveo, ili mozda ((i>5) && (p || q)). Kada implementiras while ciklus, ti ne zelis da proveravas kakve sve mogucnosti postoje, pa da svaku pojedinacno obradjujes. Jasno je da taj kompajler (tc zar ne) ima losu optimizaciju, i zato to tako radi.

U boljem slucaju bi bilo uradjeno sa AND i JNE, a ne CMP i JNE, posto je ovde bitno samo da li je jednako nuli.

Svaki uslov treba da bude moguce istestirati na samom pocetku, pa pretpostavljam da tc generise ovakav kod.

Code:

MOV AX,i    ; ili mu je i vec u registru, ili mozda radi preko memorije
pocetak:
 CMP AX,AX ; ovde moze doci obrada bilo kakvog uslova
 JNE ciklus   ; i u zavisnosti od toga na kraju ukoliko ispunjava neki JMP na ciklus
 JMP kraj
ciklus:
 call rad  ; ili sta god da se radi ovde
kraj:
; nastavak


Mislim da je jasno da se na ovaj nacin moze implementirati bilo koji while ciklus, dok sa loop se retko koji moze (tvoj je jedan primer), pa se nadam da ti to objasnjava zasto je ko god je pravio tc izabrao taj nacin.

I samo da napomenem, vestacki sam se drzao "JNE" iako bi bilo bolje tu ubaciti "JE kraj" ili "JZ kraj", a onda sledeca JMP instrukcija ne bi bila potrebna. Naravno, sve ovo su samo pretpostavke, najverovatnije tc ne generise ovakav kod, ali ovako se dosta jednostavno implementira while(i) ciklus u asembleru (iako ne bas najbolje).

Toliko.
Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.
 
Odgovor na temu

tOwk
Danilo Šegan
Zemun/Beograd

Član broj: 94
Poruke: 2743
*.rcub.bg.ac.yu

ICQ: 9344053
Sajt: alas.matf.bg.ac.yu/~mm011..


+2 Profil

icon Re: MessageBoxA in user32.dll05.08.2001. u 13:44 - pre 276 meseci
E da, zaboravio sam da se promenljive nalaze na steku, pa treba ubaciti esp, i citati sa adrese koju on sadrzi. U svakom slucaju, ideja je uopstena.

A sto se tice tvog primera kajla, moguce da moze. Medjutim, zasto nije tako, pokusao sam da objasnim u prethodnom postu.

Ali tvoj kod mi nesto cudno izgleda. Zar loop komanda ne koristi CX ili ECX registar? Mislim da bi onda bilo potrebno da negde u njega smestis vrednost sa steka, tj. promenljive.

Ziveli.

[Ovu poruku je menjao tOwk dana 08-05-2001 u 01:48 PM GMT]
Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.
 
Odgovor na temu

kajla
Milorad Janković
Beograd

Član broj: 445
Poruke: 909
*.37.EUnet.yu



+2 Profil

icon Re: MessageBoxA in user32.dll05.08.2001. u 17:50 - pre 276 meseci
Citat:
tOwk je napisao:
E da, zaboravio sam da se promenljive nalaze na steku, pa treba ubaciti esp, i citati sa adrese koju on sadrzi. U svakom slucaju, ideja je uopstena.

A sto se tice tvog primera kajla, moguce da moze. Medjutim, zasto nije tako, pokusao sam da objasnim u prethodnom postu.

Ali tvoj kod mi nesto cudno izgleda. Zar loop komanda ne koristi CX ili ECX registar? Mislim da bi onda bilo potrebno da negde u njega smestis vrednost sa steka, tj. promenljive.

Ziveli.

[Ovu poruku je menjao tOwk dana 08-05-2001 u 01:48 PM GMT]


Jeste ja sam se zajebo...treba ecx a ne esi znaci ovako:
Code:

mov ecx,0xFF
lbl: call far ptr _clrscr
loop lbl


u stvari loop lbl se moze zameniti sa:
Code:

dec ecx
jne lbl


poz.
 
Odgovor na temu

kajla
Milorad Janković
Beograd

Član broj: 445
Poruke: 909
*.InfoSky.Net



+2 Profil

icon Re: MessageBoxA in user32.dll06.08.2001. u 14:28 - pre 276 meseci
Kad smo vec kod loop instrukcije, napravio sam program
koji vrti petlju 0xFFFFFFFF do 0x00, i pri svakom prolasku poziva
printf("%xn",index_petlje); , e problem je sada sto program lepo
stampa sve od 0xFFFFFFFF pa stane na 0xFFFF0280, i tu mi javi
stack overflow ili se win "blokira".
Evo kod-a sa komentarima:

Code:

int counter()
{
__asm{
mov ecx,0xFFFFFFFF
xor esi,esi
mov dword ptr[edx],0x0d0a7825 ;string "%xn"
mov dword ptr[edx+04h],esi
PrintLp:
push ebp
mov ebp,esp
push 0x78022a28 ;adresa printf() u kernel32.dll
push ecx
push edx
mov esi,edx
mov edi,ecx
call dword ptr[esp+08h] ;poziva printf(),ciju sam adresu stavio u stack
mov edx,esi
mov ecx,edi
loop PrintLp
}
}


poz.

PS. ovo isto pitanje je postovano i u C forumu pod nazivom LOOP
 
Odgovor na temu

[es] :: Security Coding :: MessageBoxA in user32.dll

Strane: 1 2 3

[ Pregleda: 9925 | Odgovora: 40 ] > FB > Twit

Postavi temu Odgovori

Srodne teme
14.04.2024. Re: Gde je Kejt? (samo pogrešni odgovori)
30.07.2001. vCard exploit
15.03.2002. Plug-inovi (Delphi/win32asm)
14.03.2002. Problem sa dll-ovima
18.04.2002. dll
01.08.2002. DLL
24.06.2003. dll missing
19.02.2011. pisanje .dll u VB-u?
Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.