Запустите шеллкод в cpp

Я пытаюсь запустить шеллкод в 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();

может кто-нибудь объяснить мне, что я делаю не так?

2

Решение

Все, что вы написали, правильно. Исключение возникает только потому, что ваш шеллкод состоит только из 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"

И вы не будете выполнять неиспользуемые команды и успешно завершать работу.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]