Вопрос Manual Map Injecting -> Unmap

totalag

Новичок
Сообщения
8
Реакции
0
Здравствуйте.
Изучаю Manual Map Injecting, использую код от

Для просмотра скрытого содержимого вы должны авторизироваться или зарегистрироваться


В своем проекте есть необходимость делать deattach, FreeLibraryAndExitThread не подходит т.к. нет самого модуля.

пробовал этот метод
C++:
DECLSPEC_NORETURN void WINAPI ManualFreeLibraryAndExitThread(LPVOID imageBase, SIZE_T imageSize) {
    printf("Call erase... \n");
    void* exitThread = GetProcAddress(GetModuleHandle("Kernel32.dll"), "ExitThread");
    void* virtualFree = GetProcAddress(GetModuleHandle("Kernel32.dll"), "VirtualFree");

    __asm
    {
        mov esi, imageSize
        mov edi, imageBase
        push 0
        push exitThread
        push edi
        push esi
        push MEM_RELEASE
        push exitThread
        mov esi, virtualFree
        jmp esi
    }
}
но он не работает (проверял через

Для просмотра скрытого содержимого вы должны авторизироваться или зарегистрироваться

+ видно, что не освобождается память в процессе)
так же пробовал метод

C++:
__declspec(noreturn) void ExitDll(void* ImageBase, SIZE_T SizeOfImage)
{
    auto* pmemset = memset;
    auto* pVirtualFree = VirtualFree;
    auto* pExitThread = ExitThread;


    pmemset(ImageBase, 0, SizeOfImage);
    pVirtualFree(ImageBase, 0, MEM_RELEASE);
    pExitThread(0);
}


    auto* pExitDll = reinterpret_cast<decltype(ExitDll)*>(VirtualAlloc(nullptr, 0x100, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE));
    memcpy(pExitDll, ExitDll, 0x100);
    pExitDll(imageBase, imageSize);

но он крашит процесс.
ImageBase - адрес, куда мапится длл, SizeOfImage - размер dll
В чем может быть проблема?
 
Верх Низ