У меня есть программа C, структурированная таким образом:
#include <Windows.h>
#include <stdio.h>
#include <stdint.h>
#pragma section(".code",execute, read, write)
#pragma comment(linker,"/SECTION:.code,ERW")
#pragma code_seg(".code")
//Code to decrypt
#pragma section(".stub", execute, read, write)
#pragma code_seg(".stub")
void decryptor(){
//Retrieve virtual address of the pointer to the .code section
//Retrieve the virtual size of the pointer to the .code section
for(int i = 0; i<size; i++){
//HERE THE PROGRAM STOPS
ptrCode[0] = //Reverse function of the encryptor
}
}
int main(){
decryptor();
mainFunctionDecrypted();
return 0;
}
По сути, у меня есть шифратор, который сначала шифрует сегмент .code в exe этой программы после компиляции. Затем, когда я запускаю модифицированный exe, я хочу иметь возможность сначала расшифровать его, а затем выполнить расшифрованную часть. Однако кажется, что я не могу писать в сегмент .code, загруженный в память (я думаю, потому что это часть памяти, предназначенная для выполнения кода).
Есть ли способ записи в исполняемую память?
Есть ли какой-нибудь обходной путь, который вы бы сделали?