SetWindowsHookEx не внедряет DLL

0

Все, что я пытаюсь сделать, это загрузить мою DLL в некоторые другие программы (во время создания процесса) и заставить ее выполнить функцию DllMain. К сожалению, независимо от того, какой код я пытаюсь, он никогда не работает.

Например, у меня есть этот код: http://pastebin.com/P4NzLb3X В основном, это просто использование SetWindowsHookEx для установки клавиатуры. Однако проверка с помощью процесса Hacker показывает мне, что DLL никогда не вводится в какой-либо процесс. :(

Я искал уже целый день для решения. Как я могу это решить?

  • 1
    Ваш код пишет сообщения о состоянии. Какое сообщение вы видите?
  • 0
    @Logicrat Эти: ссылка (т.е. все успешно)
Показать ещё 9 комментариев
Теги:
dll
hook
inject

1 ответ

2
Лучший ответ

Я решил проблему с помощью этих двух ссылок:

http://www.gamedev.net/topic/568401-problem-with-loading-dll--setwindowshookex/

Глобальный Keyhook на 64-битной Windows

Должно быть исправлено 3 вещи:

  • Добавьте файл.def для DLL и используйте там экспорт, поскольку Visual Studio, очевидно, любит делать странное имя с помощью extern "C" __declspec(dllexport) int - это исправляет загрузку DLL в 32-битных процессах
  • Добавить атрибут CALLBACK в функцию (extern "C" int CALLBACK meconnect(...)) - это исправление сбоя, которое происходит при 32-битных процессах после исправления выше.
  • Добавьте цикл сообщения в хост-процесс (процесс, вызывающий функцию SetWindowsHookEx) следующим образом:

    MSG msg;
    while(1) {
        // Keep pumping...
        PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE);
        TranslateMessage(&msg);
        DispatchMessage(&msg);
        Sleep(10);
        SHORT v = GetKeyState(VK_RETURN);
        bool pressed = (v & 0x8000) != 0;
        if(pressed) 
            break;
    }
    

    это фиксирует замораживание в 64-битных процессах.

  • 0
    Обратите внимание, что первая проблема должна была быть обнаружена вашим кодом, так как он проверяет NULL возвращаемый GetProcAddress . Почему ты не упомянул это? Обратите внимание, что первые две проблемы не были в коде, который вы опубликовали.
  • 0
    Первая проблема не была обнаружена моим кодом. Я не могу объяснить, почему, поскольку я сам не знаю, я предполагаю, что это ошибка где-то в Visual Studio. Что касается исходного кода, я предоставил исходный код для DLL в комментариях к OP, так как не верил, что это связано с проблемой (поскольку в соответствии с различными мониторами процессов DLL никогда не открывались, я наивно полагал, что материал DLL никогда не исполнялся). Я просто пропустил, что может быть проблема с экспортом функций.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню