Причинение преднамеренной ошибки DEP

Короче говоря, я хочу вызвать ошибку предотвращения выполнения данных (DEP) по своему усмотрению.

Это специально на машинах с XP SP3. Мне бы хотелось, чтобы при запуске скрипта или небольшой программы возникало сообщение об ошибке XP DEP.

Буду ли я прав, думая, что самый простой способ сделать это с помощью какого-либо сценария или программы? Я знаю, что DEP используется для предотвращения атак переполнения буфера, но я бы не стал рисковать использованием любого вредоносного кода.

Кто-нибудь может предложить что-нибудь, чтобы вывести меня на правильные линии?

1 ответ

Самый простой способ - выделить память без исполняемого атрибута и перейти к выделенному адресу. Это можно сделать с помощью следующего кода.

void Code(){
    return;
}

void GenerateDepError(){

    // Allocate data area
    PVOID pMem = VirtualAlloc( NULL, 0x100, 
                               MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE );

    // Copy a function into data area
    for( DWORD i = 0; i < 0x100; i++ ){
        ((char*)pMem)[i] = ((char*)Code)[i]; 
    }

    // Consider the memory area as a function. 
    void (*dep_trigger)() = (void (*)())pMem; 

    // Invoke the function. This should cause DEP error if DEP is ON.
    dep_trigger(); 

    // If it returns without error this message will be displayed.
    printf("No error on dep_trigger()\n"); 
}

int main( int argc, char** argv ){
    GenerateDepError();
    return 0;
}
Другие вопросы по тегам