Проблема при написании shellcode
Здравствуйте, помогите, пожалуйста, разобраться (выполняю учебное задание). Для начала хочу написать шеллкод, который бы запускал командную строку в Windows. Для этого пишу сначала ассемблер:
push 20646D63h
mov eax, esp
push 1
push eax
mov eax, 753D27ECh
call eax
Он запускается и работает. (Значит адреса были вычислены верно, как я понимаю.)
Теперь открываю и беру опткодовую реализацию этого ассемблера:
push 20646D63h
00401009 68 63 6D 64 20 push 20646D63h
mov eax, esp
0040100E 8B C4 mov eax,esp
push 1
00401010 6A 01 push 1
push eax
00401012 50 push eax
mov eax, 753D27ECh
00401013 B8 EC 27 3D 75 mov eax,753D27ECh
call eax
00401018 FF D0 call eax
То есть, собрав байты вместе, получаю код:
"\x68\x63\x6D\x64\x20"
"\x8B\xC4"
"\x6A\x01"
"\x50"
"\xB8\xEC\x27\x3D\x75"
"\xFF\xD0"
Нашла на одном из сайтов способ протестировать работоспособность шеллкода, пытаюсь сделать это:
char shellcode[] = "\x68\x63\x6d\x64\x20\x8b\xc4\x6a\x01\x50\xb8\xec\x27\x3d\x75\xff\xd0";
_asm
{
lea eax, shellcode
jmp eax
}
Однако программа вылетает по ошибке. Сообщение об ошибке похоже на переполнение буфера. Помогите, пожалуйста, разобраться, почему мой шеллкод не работает?
Источник: Stack Overflow на русском