Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Выгрузка длл


Автор: 0x00 20.4.2008, 07:08
как выгрузить длл из чужого процесса?
примеру буду только рад))

Автор: W4FhLF 20.4.2008, 09:31
Инжект шеллкода(OpenProcess + WriteProcessMemory) и его выполнение(CreateRemoteThread). Пример есть только на ассемблере)

Автор: 586 20.4.2008, 10:31
Можно проще... Вызывать FreeLibrary в другом процессе напрямую, а базовый адрес модуля узнавать с помощью CreateToolhelpSnapshot TH32CS_SNAPMODULE.
Код
CreateRemoteThread(..., GetProcAddress(GetModuleHandle("kernel32.dll"), "FreeLibrary"), module_base, ...)

Автор: 0x00 21.4.2008, 07:42
ок. вроде сделал.. просто в контексте чужого процесса FreeLibrary делать и все.....

Код

BOOL InjectCode(DWORD dwPid, LPTHREAD_START_ROUTINE lpStartProc, LPVOID lpParam){

    HMODULE                    hModule;
    LPVOID                    hNewModule;
    DWORD                    dwSize;
    HANDLE                    hProcess;
    IMAGE_DOS_HEADER        ImageDosHeader;
    IMAGE_OPTIONAL_HEADER32    ImageOptionalHeader;

    hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid);
    if(hProcess == NULL){
        // MessageBox(0, "Process opening ERROR.", "System ERROR", 0);
        return FALSE;
    }
    hModule = GetModuleHandle(NULL);
    CopyMemory(&ImageDosHeader, hModule, sizeof(ImageDosHeader));
    CopyMemory(&ImageOptionalHeader, ((BYTE *)hModule + sizeof(DWORD) + ImageDosHeader.e_lfanew + sizeof(IMAGE_FILE_HEADER)), sizeof(ImageOptionalHeader));
    dwSize = ImageOptionalHeader.SizeOfImage;
    VirtualProtectEx(hProcess, hModule, dwSize, PAGE_EXECUTE_READWRITE, NULL);

    #pragma check_stack(off)
    hNewModule = VirtualAllocEx(hProcess, hModule, dwSize, MEM_RESERVE|MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    if(hNewModule == NULL){
        MessageBox(0, "Memory allocation ERROR.", "System ERROR", 0); // <- ! AHTUNG !
        return FALSE;
    }
    WriteProcessMemory(hProcess, hNewModule, hModule, dwSize, NULL);
    CreateRemoteThread(hProcess, NULL, 0x1000, lpStartProc, NULL, 0, NULL);
    #pragma check_stack(on)

return TRUE;
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)