⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tstdll.asm

📁 masm32环境下一个键盘钩子的汇编代码例子
💻 ASM
字号:
; #########################################################################
;
;	Build this DLL from the batch file called BuildDll.bat
;	Remote KeyBoard Event Hook Dll
;	Send Local KeyBoard Event to remote Mochine
;
; #########################################################################

    .386
    .model flat, stdcall
    option casemap :none   ; case sensitive

; #########################################################################

    include \masm32\include\windows.inc
    include \masm32\include\user32.inc
    include \masm32\include\kernel32.inc
    include \masm32\include\gdi32.inc

    includelib \masm32\lib\user32.lib
    includelib \masm32\lib\kernel32.lib
    includelib \masm32\lib\gdi32.lib

; #########################################################################

InstallKeyboardHook PROTO :DWORD,:DWORD
UninstallKeyboardHook PROTO
   
SendData struct
	 wParam DWORD ?
	 lParam DWORD ?
SendData ends


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Low level hook flags
;define LLKHF_EXTENDED       00000001H
;define LLKHF_INJECTED       00000010H
;define LLKHF_ALTDOWN        00000020H
;define LLKHF_UP             00000080H
;define LLMHF_INJECTED       00000001H

KBDLLHOOKSTRUCT struct
	vkCode DWORD ?
	scanCode DWORD ?
	flags DWORD ?
	time DWORD ?
	dwExtraInfo DWORD ?	
KBDLLHOOKSTRUCT ends

.const

HOTKEY equ 91
;HOTKEY equ 19  ;hot key is Pause/Break
;HOTKEY equ 123	;hot key is F12

.DATA
  szName db "Remote Keyboard Hook DLL",0
  
  szOkMsg1 db "init ok",0
  
  szErrorMsg1 db "Init winsocket error",0
  szErrorMsg2 db "Get ModuleHandle error",0
  szErrorMsg3 db "socket error",0
  szErrorMsg4 db "inet_addr error",0
  szErrorMsg5 db "SetWindowHook error",0
  
  szMsg1 db "process attach",0
  szMsg2 db "process dead",0
  szMsg3 db "thread attach",0
  szMsg4 db "thread dead",0
  
  msgfmt db "nCode=%xH wParam=%xH lParam=%xH lasterr=%d hsocket=%xH,bEnable=%d",0
  msgbuf db 128 dup (0)
	
.data?
  hMod dd ?
  
  HKeyboardHook dd ?
  HMouseHook dd ?
  
  bEnable dd ?	; check this flag ,this app send the key to remote or not
  
.code

; ##########################################################################

LibMain proc hInstDLL:DWORD, reason:DWORD, unused:DWORD

	.if reason == DLL_PROCESS_ATTACH
		
        	mov eax,hInstDLL
        	mov hMod,eax    	
        ;invoke MessageBox,0,addr szMsg1,addr szName,0
        
		mov bEnable, 0FFFFFFFFH	;default is enable send key
        	
        .elseif reason == DLL_PROCESS_DETACH
        ;invoke MessageBox,0,addr szMsg2,addr szName,0
        
            
        .elseif reason == DLL_THREAD_ATTACH
        ;invoke MessageBox,0,addr szMsg3,addr szName,0
         
        .elseif reason == DLL_THREAD_DETACH
        ;invoke MessageBox,0,addr szMsg4,addr szName,0
         
        .endif

	mov eax,TRUE
        ret

LibMain Endp

; ##########################################################################

MouseHook PROC nCode:DWORD,wParam:WPARAM,lParam:LPARAM

    invoke CallNextHookEx,HMouseHook,nCode,wParam,lParam
    
          .IF wParam == WM_MBUTTONDOWN
             mov edx,lParam
             assume edx:PTR MOUSEHOOKSTRUCT
             mov ebx,[edx].hwnd
	     invoke PostMessage,ebx,WM_KEYDOWN,0,0
	     assume edx:nothing
          .ENDIF
          xor eax,eax
          ret
MouseHook ENDP

KeyboardHook proc nCode:DWORD, wParam:WPARAM, lParam:LPARAM
	local cc:DWORD

	mov bEnable,1
	mov eax,lParam
	assume eax: PTR KBDLLHOOKSTRUCT
	
	mov ebx,[eax].vkCode
	mov cc,ebx
;	.IF [eax].vkCode == HOTKEY 
;		mov eax,[eax].flags
;		and eax,LLKHF_UP
;		.if eax == 0
;			mov bEnable,0
;			mov eax,0
;			ret
;		.endif
;	.ENDIF
	assume eax:nothing
	
	.IF nCode == HC_ACTION	
		; Check the Key
		.if cc==91 ||  cc==92
			mov bEnable,0
		.endif
		.IF bEnable==0
		mov eax,1
		ret
		.ENDIF
	.ENDIF
		invoke CallNextHookEx,HKeyboardHook,nCode,wParam,lParam
		mov eax,0
	ret
KeyboardHook endp

; ##########################################################################
; if func sucessful , return 0; if error return error code
InstallKeyboardHook PROC  wParam:WPARAM,lParam:LPARAM
	
	.IF HKeyboardHook != 0
		invoke UnhookWindowsHookEx,HKeyboardHook
	.ENDIF
	
	invoke SetWindowsHookEx ,WH_KEYBOARD_LL ,addr KeyboardHook,hMod,0
	.if eax == NULL
		mov eax,5
		ret
	.else
		mov HKeyboardHook,eax
	.endif

	mov eax,0
	ret
InstallKeyboardHook ENDP

; ##########################################################################
UninstallKeyboardHook proc

	.if HKeyboardHook != 0
		invoke UnhookWindowsHookEx,HKeyboardHook
		mov HKeyboardHook,0
	.endif

	ret
UninstallKeyboardHook endp
   
End LibMain

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -