Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Zasto ovaj asm blok ne radi??

[es] :: C/C++ programiranje :: Zasto ovaj asm blok ne radi??

[ Pregleda: 3206 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

opcode

Član broj: 101421
Poruke: 43
*.adsl.net.t-com.hr.



Profil

icon Zasto ovaj asm blok ne radi??18.07.2006. u 14:20 - pre 216 meseci
Code:

#include <iostream>

using namespace std;
int main(int argc, char* argv[])
{
        asm{    mov edi,0012E224H
                mov byte ptr[edi+01H],6FH  //o
                mov byte ptr[edi+02H],70H  //p
                mov byte ptr[edi+03H],65H  //e
                mov byte ptr[edi+04H],6EH  //n
                xor ah,ah
                mov byte ptr[edi+05H],ah   //00h

                mov byte ptr[edi+06H],68H  // h
                mov byte ptr[edi+07H],74H  // t
                mov byte ptr[edi+08H],74H  // t
                mov byte ptr[edi+09H],70H  // p
                mov byte ptr[edi+0AH],3AH  // :
                mov byte ptr[edi+0BH],2FH  // /
                mov byte ptr[edi+0CH],2FH  // /
                mov byte ptr[edi+0DH],77H  // w
                mov byte ptr[edi+0EH],77H  // w
                mov byte ptr[edi+0FH],77H  // w
                mov byte ptr[edi+10H],2EH  // .
                mov byte ptr[edi+11H],67H  // g
                mov byte ptr[edi+12H],6FH  // o
                mov byte ptr[edi+13H],6FH  // o
                mov byte ptr[edi+14H],67H  // g
                mov byte ptr[edi+15H],6CH  // l
                mov byte ptr[edi+16H],65H  // e
                mov byte ptr[edi+17H],2EH  // .
                mov byte ptr[edi+18H],63H  // c
                mov byte ptr[edi+19H],6FH  // o
                mov byte ptr[edi+1AH],6DH  // m
                xor ah,ah
                mov byte ptr[edi+1BH],ah  // 00h


                mov eax,1
                push eax
                xor eax,eax
                push eax
                push eax
                lea eax,[edi+06h]
                push eax
                lea eax,[edi+01H]
                push eax
                xor eax,eax
                push eax
                mov eax,0x7ca0fe44
                call eax
           }
        system("PAUSE");
        return 0;
}





To bi trebalo bit
ShellExecute(0, "open", "http://www.google.com",
NULL, NULL, SW_NORMAL);
 
Odgovor na temu

tosa
上海, 中国

Član broj: 1811
Poruke: 1342
222.67.153.*

ICQ: 14293955
Sajt: https://github.com/milost..


+48 Profil

icon Re: Zasto ovaj asm blok ne radi??18.07.2006. u 14:55 - pre 216 meseci
Code:
mov eax,0x7ca0fe44
call eax

Odakle ti ova adresa? ;)
Bio bi to zanimljiv feature...
...kada bi znali da Windows ima neke funkcije na fiksiranim adresama.
 
Odgovor na temu

opcode

Član broj: 101421
Poruke: 43
*.adsl.net.t-com.hr.



Profil

icon Re: Zasto ovaj asm blok ne radi??18.07.2006. u 15:03 - pre 216 meseci
To je adresa od ShellExecuteA iz shell32.dll -a , dobio sam ju preko GetProcAddress apija...



A ovaj dio
Code:

mov edi,0012E224H => mjesto na stacku gdje ima puno praznog mjesta..

 
Odgovor na temu

tupito
Vladan Milivojevic
Beograd

Član broj: 55195
Poruke: 54
*.internet.krstarica.net.



Profil

icon Re: Zasto ovaj asm blok ne radi??18.07.2006. u 17:57 - pre 216 meseci
uopste mi nije jasno sto si koristio fiksne adrese, one ti inace nista neznace???
sto jednostavno nisi pozvao funkciju preko imena:
Code:
call        ShellExecute
 
Odgovor na temu

opcode

Član broj: 101421
Poruke: 43
*.adsl.net.t-com.hr.



Profil

icon Re: Zasto ovaj asm blok ne radi??18.07.2006. u 18:21 - pre 216 meseci
Lol.. moram od toga napravit opcode )

Ne kuzim bre.. ako stavim call ShellExecuteA radi ok.. al moram nekako nac adresu da mogu napravit opcode .. shellcode ako ti sta vise znaci.. odnosno vadjenje hex instrukcija..
 
Odgovor na temu

Mikky

Član broj: 18
Poruke: 1563
..njuel-bg.customer.sbb.co.yu.

ICQ: 44582291


+58 Profil

icon Re: Zasto ovaj asm blok ne radi??18.07.2006. u 19:09 - pre 216 meseci
Mislim da ti je greska ovde:
Code:

                lea eax,[edi+01H]
                push eax

Ovo ce ti gurnuti na stack adresu stringa "pen" a ne "open". Za "open" uradi samo:
Code:

                push edi


Jos par stvari:
MS ne garantuje da se ShellExecute kao i svaka druga API funkcija nalaze na fiksnim adresama (mada je to obicno tako), a pogotovo ne na razlitim verzijama Windows-a. U prevodu ovo ce raditi samo na svim XP sistemima ako si na njemu testirao i to samo mozda. Dakle nemoj da se oslanjas na fiksne adrese vec ih nekako dobavi dinamicki.

Zasto umesto ovog:
Code:

xor ah,ah
mov byte ptr[edi+05H],ah   //00h


nestavis ovo:
Code:

mov byte ptr[edi+05H],0   //00h


Ili mozda ovako:
Code:

// adresa "http://www.stagod.com" ide na stack pomocu call instrukcije
// (umesto ovog db mozda ide nesto drugo, nisam koristio c++ inline asm)
call L1:                                
db "http://www.stagod.com",0
L1: // slicno radis i za druge stringove



-I know UNIX, PASCAL, C, FORTRAN,
COBOL, and nineteen other high-tech
words.
 
Odgovor na temu

opcode

Član broj: 101421
Poruke: 43
*.adsl.net.t-com.hr.



Profil

icon Re: Zasto ovaj asm blok ne radi??18.07.2006. u 19:18 - pre 216 meseci
"Zasto umesto ovog:

Code:

xor ah,ah
mov byte ptr[edi+05H],ah //00h

nestavis ovo:

Code:

mov byte ptr[edi+05H],0 //00h"

Zato jer u shellcodeu ne smije bit 00 bajt, jer se sa 00 bajtom u C/C++ string prekida.. tako da se to mora zaobic..

\xBF\x04\xE0\x12\x00\xC6\x47\x01\x6F\xC6\x47\x02\x70\xC6\x47\x03\x65\xC6\x47\x04\x6E\x32\xE4\x88\x67\x05\xC6\x47\x06\x68\xC6\x47\x07\x74\xC6\x47\x08\x74\xC6\x47\x09\x70\xC6\x47\x0A\x3A\xC6\x47\x0B\x2F\xC6\x47\x0C\x2F\xC6\x47\x0D\x77\xC6\x47\x0E\x77\xC6\x47\x0F\x77\xC6\x47\x10\x2E\xC6\x47\x11\x67\xC6\x47\x12\x6F\xC6\x47\x13\x6F\xC6\x47\x14\x67\xC6\x47\x15\x6C\xC6\x47\x16\x65\xC6\x47\x17\x2E\xC6\x47\x18\x63\xC6\x47\x19\x6F\xC6\x47\x1A\x6D\x32\xE4\x88\x67\x1B\xB8\x01\x00\x00\x50\x31\xC0\x50\x50\x8D\x47\x06\x50\x8D\x47\x01\x50\x31\xC0\x50\xB8\xFE\xA0x7C\xFF\xD0
 
Odgovor na temu

opcode

Član broj: 101421
Poruke: 43
*.adsl.net.t-com.hr.



Profil

icon Re: Zasto ovaj asm blok ne radi??18.07.2006. u 19:20 - pre 216 meseci
Zelite da kazete da nema nacina da odredim fiksalnu adresu od ShellExecuteA apija.. ja sam probao i tako nece nikako da radi.. jedino onda da ga pozivam dinamicki preko LoadLibrary pa preko GetProcAddress da saznam adresu.. mada kolki ce onda bit shellcode?!
 
Odgovor na temu

opcode

Član broj: 101421
Poruke: 43
*.adsl.net.t-com.hr.



Profil

icon Re: Zasto ovaj asm blok ne radi??18.07.2006. u 21:07 - pre 216 meseci
Evo kako bi to onda izgledalo.. mada opet ne radi jer ni od te 2 fje nisu fiksalne adrese.. jexem ti gnjidovze

Code:

#include <iostream>
#include <windows.h>

using namespace std;
int main(int argc, char* argv[])
{
        asm{    mov edi,0012E224H
                mov byte ptr[edi+01H],6FH  //o
                mov byte ptr[edi+02H],70H  //p
                mov byte ptr[edi+03H],65H  //e
                mov byte ptr[edi+04H],6EH  //n
                xor ah,ah
                mov byte ptr[edi+05H],ah   //00h

                mov byte ptr[edi+06H],68H  // h
                mov byte ptr[edi+07H],74H  // t
                mov byte ptr[edi+08H],74H  // t
                mov byte ptr[edi+09H],70H  // p
                mov byte ptr[edi+0AH],3AH  // :
                mov byte ptr[edi+0BH],2FH  // /
                mov byte ptr[edi+0CH],2FH  // /
                mov byte ptr[edi+0DH],77H  // w
                mov byte ptr[edi+0EH],77H  // w
                mov byte ptr[edi+0FH],77H  // w
                mov byte ptr[edi+10H],2EH  // .
                mov byte ptr[edi+11H],67H  // g
                mov byte ptr[edi+12H],6FH  // o
                mov byte ptr[edi+13H],6FH  // o
                mov byte ptr[edi+14H],67H  // g
                mov byte ptr[edi+15H],6CH  // l
                mov byte ptr[edi+16H],65H  // e
                mov byte ptr[edi+17H],2EH  // .
                mov byte ptr[edi+18H],63H  // c
                mov byte ptr[edi+19H],6FH  // o
                mov byte ptr[edi+1AH],6DH  // m
                xor ah,ah
                mov byte ptr[edi+1BH],ah  // 00h

              //___________________________________
              mov esi,0012E274H
              mov byte ptr[esi+01h],73h //s
              mov byte ptr[esi+02h],68h //h
              mov byte ptr[esi+03h],65h //e
              mov byte ptr[esi+04h],6Ch //l
              mov byte ptr[esi+05h],6Ch //l
              mov byte ptr[esi+06h],33h //3
              mov byte ptr[esi+07h],32h //2
              mov byte ptr[esi+08h],2Eh //.
              mov byte ptr[esi+09h],64h //d
              mov byte ptr[esi+0ah],6Ch //l
              mov byte ptr[esi+0bh],6Ch //l
              xor ah,ah
              mov byte ptr[esi+0ch],ah  //00h

              mov byte ptr[esi+0dh],53h //S
              mov byte ptr[esi+0eh],68h //h
              mov byte ptr[esi+0fh],65h //e
              mov byte ptr[esi+10h],6Ch //l
              mov byte ptr[esi+11h],6Ch //l
              mov byte ptr[esi+12h],45h //E
              mov byte ptr[esi+13h],78h //x
              mov byte ptr[esi+14h],65h //e
              mov byte ptr[esi+15h],63h //c
              mov byte ptr[esi+16h],75h //u
              mov byte ptr[esi+17h],74h //t
              mov byte ptr[esi+18h],65h //e
              mov byte ptr[esi+19h],41h //A
              xor ah,ah
              mov byte ptr[esi+1ah],ah  //00h

              lea eax,[esi+01h]
              push eax
              mov eax,0x7c801d77
              call eax            //LoadLibrary
              mov ebx,eax

              lea eax,[esi+0dh]
              push eax
              push ebx
              mov eax,0x7c80ac28
              call eax            //GetProcAddress
              mov ebx,eax
              //_____________________________________

                mov eax,1
                push eax
                xor eax,eax
                push eax
                push eax
                lea eax,[edi+06h]
                push eax
                lea eax,[edi+01H]
                push eax
                xor eax,eax
                push eax
                mov eax,ebx
                call eax          //ShellExecuteA
           }
        system("PAUSE");
        return 0;
}

 
Odgovor na temu

Mikky

Član broj: 18
Poruke: 1563
..njuel-bg.customer.sbb.co.yu.

ICQ: 44582291


+58 Profil

icon Re: Zasto ovaj asm blok ne radi??19.07.2006. u 08:29 - pre 216 meseci
[quote]Mikky: Mislim da ti je greska ovde:
Code:

                lea eax,[edi+01H]
                push eax

Ovo ce ti gurnuti na stack adresu stringa "pen" a ne "open". Za "open" uradi samo:
Code:

                push edi


-I know UNIX, PASCAL, C, FORTRAN,
COBOL, and nineteen other high-tech
words.
 
Odgovor na temu

opcode

Član broj: 101421
Poruke: 43
*.adsl.net.t-com.hr.



Profil

icon Re: Zasto ovaj asm blok ne radi??19.07.2006. u 10:41 - pre 216 meseci
Nije u tome, taj dio je u redu.. gledam ja iz debagera sta se desava.. uzima on "open".. problem je kod GetProcAddress mislim.. jer LoadLibrary odradi posao i u EAX je HModule, a nakon GetProcAddress-a u EAX-u je 0.. mislim da je problem sto stack svaki put pocne i zavrsi od druge adrese tako da je ovaj dio problematican:
mov edi,0012E224H... Preko EBP-a ne smijem stavljat jer ce EBP bit prepisan poslije..
 
Odgovor na temu

[es] :: C/C++ programiranje :: Zasto ovaj asm blok ne radi??

[ Pregleda: 3206 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.