.386
.model flat,stdcall
option casemap:none
include windows.inc
include kernel32.inc
include user32.inc
includelib kernel32.lib
includelib user32.lib
ICO_MAIN equ 1000h
DLG_MAIN equ 1000
IDC_WIN equ 1001
IDC_ALT equ 1002
WH_KEYBOARD_LL equ 13
.data?
hInstance dd ?
_hWnd dd ?
hHook dd ?
KBDLLHOOKSTRUCT struct
vkCode DWORD ?
scanCode DWORD ?
flags DWORD ?
time DWORD ?
dwExtraInfo DWORD ?
KBDLLHOOKSTRUCT ends
.const
.code
LowLevelKeyboardProc proc nCode,wParam,lParam
ALT_DOWN equ <[ecx.flags] & 100000h>
.if nCode < 0 || nCode != HC_ACTION
invoke CallNextHookEx,hHook,nCode,wParam,lParam
.else
mov ecx,lParam
assume ecx: ptr KBDLLHOOKSTRUCT
.if (ecx.vkCode==VK_LWIN || ecx.vkCode==VK_RWIN) && wParam==WM_KEYUP
invoke IsDlgButtonChecked,_hWnd,IDC_WIN
.if eax==BST_CHECKED
mov eax,1
ret
.endif
.elseif ecx.vkCode==VK_TAB || ALT_DOWN
invoke IsDlgButtonChecked,_hWnd,IDC_ALT
.if eax==BST_CHECKED
mov eax,1
ret
.endif
.endif
.endif
ret
LowLevelKeyboardProc endp
_ProcDlgMain proc uses ebx esi edi hWnd,uMsg,wParam,lParam
mov eax,uMsg
push hWnd
pop _hWnd
.if eax==WM_CLOSE
invoke UnhookWindowsHookEx,hHook
invoke EndDialog,hWnd,NULL
.elseif eax==WM_INITDIALOG
invoke SetWindowsHookEx,WH_KEYBOARD_LL,offset LowLevelKeyboardProc,hInstance,0
mov hHook,eax
invoke LoadIcon,hInstance,ICO_MAIN
invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
_ProcDlgMain endp
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
invoke ExitProcess,NULL
end start
老出现未定义错误啊:
hook.asm(44) : error A2006: : vkCode
hook.asm(50) : error A2006: : vkCode
hook.asm(50) : error A2006: : flags
[课程]Android-CTF解题方法汇总!