首页
社区
课程
招聘
[讨论]为什么HOOK程序老出现未定义的情况啊?
发表于: 2007-11-16 20:26 4778

[讨论]为什么HOOK程序老出现未定义的情况啊?

2007-11-16 20:26
4778
.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解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
寄存器当作结构指针使用时要加上[],如:
[ecx].vkCode
2007-11-16 21:14
0
雪    币: 193
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢,我加上了,但是还是没有用啊,还报同样的错误!
2007-11-16 21:41
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
ALT_DOWN equ <[ecx].flags & 100000h>

.if ([ecx].vkCode==VK_LWIN || [ecx].vkCode==VK_RWIN) && wParam==WM_KEYUP
.elseif [ecx].vkCode==VK_TAB || ALT_DOWN

我已经试过了,编译没有错误
2007-11-16 21:48
0
雪    币: 193
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
不好意思,我想问一下大大用的什么编译器啊,MASM32吗,我用Radasm老出错啊!
2007-11-16 21:52
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我用的就是RadASM
2007-11-16 21:56
0
雪    币: 193
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
不知可否用我的源码生成个EXE文件传上来看下,我都快疯掉了,谢谢!
2007-11-16 22:04
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
用你的源码编译的,没有资源,所以不会显示对话框
上传的附件:
2007-11-16 22:24
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
这是在我的RadASM里编译通过的源码。
上传的附件:
2007-11-16 22:27
0
雪    币: 193
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
最后一个问题,我的版本是2.2.0.9,不知大大的版本是多少。就为这个错误我搞了一天查了N个资料啊,我彻底晕倒,有一种撞墙的冲动!再次感谢大大的无私帮助!谢谢!
2007-11-16 22:31
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
我的是2.2.1.1,但我觉得这和RadASM的版本没关系,编译是由ml.exe来实现的。你把我第二个附件中的源码再编译一下,看看是不是用什么地方打错了。
2007-11-16 22:35
0
雪    币: 193
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
晕,确实和版本没有关系,RP问题啊。程序的功能有问题,选择ALT+DOWN后会把其他键也屏蔽,win复选框没错。如何才能保证取消选择后,按键恢复正常。
2007-11-17 09:56
0
游客
登录 | 注册 方可回帖
返回
//