Есть ли способ изменить размер модуля внутри процесса или расширить его, чтобы он был длиннее в памяти? - PullRequest
0 голосов
/ 22 февраля 2020

Мне любопытно узнать, можно ли расширить модуль процесса, например, DLL, чтобы он был больше.

Например, я вставляю test.dll в test.exe, я делаю test. dll + 0x1000 байт больше, эти новые байты теперь имеют привилегии PAGE_EXECUTE, и я могу изменять их, как мне нравится.

Я хочу иметь возможность делать это только после введения dll, а не путем добавления поддельного кода в dll перезаписать, так как я, вероятно, не буду иметь никакого контроля над выполнением фактического объекта испытаний.

Я уже пытался использовать VirtualAllo c в конце секций DLL, чтобы увеличить его размер, но это не не работает, я обычно получаю ERROR_BAD_ADDRESS, я убедился, что у процесса достаточно места после dll для выделения и принятия.

uint64_t module_contents = (uint64_t)GetModuleHandleA(NULL);

IMAGE_DOS_HEADER* dos_header = (IMAGE_DOS_HEADER*)module_contents;
IMAGE_NT_HEADERS64* nt_header = (IMAGE_NT_HEADERS*)(module_contents + dos_header->e_lfanew);
IMAGE_SECTION_HEADER* section = (IMAGE_SECTION_HEADER*)(nt_header + 1);

for (unsigned short i = 0; i < nt_header->FileHeader.NumberOfSections; i++) {
    if (!section->SizeOfRawData && section->Characteristics & IMAGE_SCN_MEM_EXECUTE) {
        char name[8];
        memcpy(name, section->Name, sizeof(name));

        if (std::string(name).find("text") == std::string::npos) {
            //std::cout << name << std::endl;
            break;
        }
    }

    section++;
}

std::cout << VirtualAlloc((void*)(module_contents + section->VirtualAddress + section->Misc.PhysicalAddress), 0x1000, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE) << std::endl;

Ожидаемый результат - заполнение и подтверждение пустое пространство после разделов модуля, которое, как я проверяю, не было зафиксировано ни cout, ни Cheat Engine для проверки области памяти. В результате я получаю сообщение об ошибке 0x1E7 или ERROR_INVALID_ADDRESS. Я получил другие сообщения об ошибках, например ERROR_INVALID_PARAMETER, при использовании меньшего размера, например 0x1.

Любая помощь с этим приветствуется!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...