keylogger service

Тема в разделе "WASM.WIN32", создана пользователем kasper, 19 июл 2005.

  1. kasper

    kasper New Member

    Публикаций:
    0
    Регистрация:
    27 сен 2004
    Сообщения:
    8
    Адрес:
    Russia
    Пытаюсь написать сервис для перехвата нажатия клавиш. Когда простое приложение всё работает отлично, а когда сервис то не вызываеться KeyboardHook функция из моей библиотеки при нажатии клавиш. Вот пример:

    void WINAPI MyServiceStart (DWORD argc, LPTSTR *argv)

    {

    ......

    hWS = OpenWindowStation("Winsta0", FALSE, GENERIC_ALL);

    SetProcessWindowStation(hWS);

    hDT = OpenDesktop("default", 0, FALSE, GENERIC_ALL);

    SetThreadDesktop(hDT);

    HMODULE Logger = LoadLibraryA("Logger.dll");

    SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)GetProcAddress(Logger,"Keyboard Hook"),Logger,0);

    MessageBox(0,"OK","OK",0);

    ......

    };





    API Ф-и ошибок не выдают, всё успешно.

    MessageBox выводиться.

    А Ф-я KeyboardHook из Logger.dll при нажатии клавиш не вызываеться.

    Может кто встречался с такой проблеммой, или знает какой-нить кейлоггер который сделан в виде сервиса.

    Заранее Спасибо!
     
  2. Zerro Crash

    Zerro Crash New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2005
    Сообщения:
    29
    >> "Keyboard Hook"

    с пробелом?!



    библиотека (logger.dll), как я понял успешно загружается, да?
     
  3. kasper

    kasper New Member

    Публикаций:
    0
    Регистрация:
    27 сен 2004
    Сообщения:
    8
    Адрес:
    Russia
    без пробела! :)

    Как я уже говорил Api выполняються без ошибок, LoadLibraryA("Logger.dll"); выполняеться успешно

    и GetProcAddress(Logger,"KeyboardHook") возвращает правильный адрес.

    Библиотека Logger.dll должна подгружаться к другим процессам (либо при запуске либо при нажатии клавиши, по моему это зависит от того что выбрать WH_KEYBOARD или WH_KEYBOARD_LL) но этого не происходит, когда программа установлена как сервис.

    Интересное наблюдение: Есть программа nncron она может запускать процессы от имени другого пользователя и как сервис, и от имени залогиневшегося пользователя. Так вот если с помощью него запустить программу как сервис, то KeyboardHook не вызываеться, а если от имени любого или залогиневшегося пользователя с загрузкой профиля, то всё работает. Как это можно объяснить?

    И как вообще можно запустить процесс от имени залогиневшегося пользователя?
     
  4. kasper

    kasper New Member

    Публикаций:
    0
    Регистрация:
    27 сен 2004
    Сообщения:
    8
    Адрес:
    Russia
    P.S. сама программа nncron устанавливаеться как сервис
     
  5. n0p

    n0p 10010000b

    Публикаций:
    0
    Регистрация:
    7 май 2003
    Сообщения:
    256
    Адрес:
    Новосиbeerск
    Есть мнение, что если охота сервис писать, то лучше уж тогда драйвер-фильтр наваять, ибо логить клаву хуками - это не модно :)

    Про сервисы и фильтры можно почитать у Four-F (цикл статей на этом сайте есть).
     
  6. kasper

    kasper New Member

    Публикаций:
    0
    Регистрация:
    27 сен 2004
    Сообщения:
    8
    Адрес:
    Russia
    А как в случае с драйвером фильтром узнать раскладку клавиатуры? Или может кто даст ссылочку на что-нить похожее с раскладкой. Я совсем не много знаю о программировании драйверов!
     
  7. kasper

    kasper New Member

    Публикаций:
    0
    Регистрация:
    27 сен 2004
    Сообщения:
    8
    Адрес:
    Russia
    Ещё одно интересное наблюдение, создаю сервис, этот сервис при старте запускает программу которая устанавливает hook и всё работает.

    Мой сервис просто CreateProcess(myprogrammpath, "", 0, 0, 0, 0, 0, 0, &si, &pi).

    Почему же не работает установка хука в самом сервисе?

    Все варианты испробовал, не знаю что делать.