Я пытаюсь запустить шеллкод в cpp (шеллкод приходит от пользователя, поэтому программа должна быть динамичной)
Когда я пытаюсь запустить свою программу, у меня возникает исключение, которое, как мне кажется, говорит мне, что я не могу запустить код из раздела данных.
после этого я попытался создать новый неисчислимый раздел и поместить туда свои данные, но это не сработало
#pragma section(".shell",read,execute)
__declspec(allocate(".shell"))
unsigned char code[] =
"\xB8\x04\x00\x00\x00";
// Function pointer points to the address of function.
int(*shell)(); //Function pointer
// Initializing a function pointer with the address of a shellcode
shell = ((int(*)())&code);
// Execute shellcode
int a = shell();
может кто-нибудь объяснить мне, что я делаю не так?
Все, что вы написали, правильно. Исключение возникает только потому, что ваш шеллкод состоит только из mov eax, 4
, Распределитель Windows выравнивает ваш раздел по размеру страницы и заполняет его нулями, но 0x00
это код операции для add byte ptr [rax], al
, Теперь у вас есть не только mov eax, 4
в вашем шеллкоде, но:
mov eax, 4
add byte ptr [rax],al
add byte ptr [rax],al
....
После вашего mov
Вы пытаетесь получить значение в eax
Адресная 0x00000004
, где были размещены Windows page guard.
И теперь у вас есть 0xC0000005: Access violation on write "0x0000000000000004"
,
добавлять ret
на ваш шеллкод:
unsigned char code[] = ""\xB8\x04\x00\x00\x00\xC3"
И вы не будете выполнять неиспользуемые команды и успешно завершать работу.
Других решений пока нет …