| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 374 人关注过本帖
标题:罗云彬win32汇编书里的日志记录钩子WH_JOURNALRECORD
只看楼主 加入收藏
S0RCERER
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2023-11-13
收藏
 问题点数:0 回复次数:1 
罗云彬win32汇编书里的日志记录钩子WH_JOURNALRECORD
用了罗云彬书里的例子,生成的EXE运行之后没有任何反应
查了一下微软官方文档,里面说从 Windows 11 开始,日记挂钩 API WH_JOURNALRECORD不受支持,将在将来的版本中删除。但是win10的系统也无效了吗?
以下是源代码:
.386
.model flat,stdcall
option casemap:none

include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib

ICO_MAIN equ 1000
DLG_MAIN equ 1000
IDC_TEXT equ 1001

.data?

hInstance dd ?
hWinMain dd ?
hHook dd ?
szAscii db 32 dup (?)

.code

HookProc proc _dwCode,_wParam,_lParam
    local @szKeyState[256]:byte

    invoke CallNextHookEx,hHook,_dwCode,_wParam,_lParam
    pushad
    .if _dwCode==HC_ACTION
        mov ebx,_lParam
        assume ebx:ptr EVENTMSG
        .if [ebx].message==WM_KEYDOWN
            invoke GetKeyboardState,addr @szKeyState
            invoke GetKeyState,VK_SHIFT
            mov @szKeyState+VK_SHIFT,al
            mov ecx,[ebx].paramH
            shr ecx,16
            invoke ToAscii,[ebx].paramL,ecx,addr @szKeyState,addr szAscii,0
            mov byte ptr szAscii [eax],0
            .if szAscii==0dh
            mov word ptr szAscii+1,0ah
            .endif
            invoke SendDlgItemMessage,hWinMain,IDC_TEXT,EM_REPLACESEL,0,addr szAscii
        .endif
    assume ebx:nothing
    .endif
    popad
    ret

HookProc endp

_ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam

        mov eax,wMsg
        .if eax==WM_CLOSE
            invoke UnhookWindowsHookEx,hHook
            invoke EndDialog,hWnd,NULL
        .elseif eax==WM_INITDIALOG
            push hWnd
            pop hWinMain
            invoke SetWindowsHookEx,WH_JOURNALRECORD,addr HookProc,hInstance,NULL
                .if eax
                    mov hHook,eax
                .else
                    invoke EndDialog,hWnd,NULL
                .endif
        .else
            mov eax,FALSE
            ret
        .endif
        mov eax,TRUE
        ret

_ProcDlgMain endp

start:

    invoke GetModuleHandle,NULL
    mov hInstance,eax
    invoke DialogBoxParam,eax,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
    invoke ExitProcess,NULL

end start
搜索更多相关主题的帖子: NULL invoke if addr mov 
2023-11-13 23:38
Valenciax
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:11
帖 子:340
专家分:2482
注 册:2016-5-15
收藏
得分:0 
可以用windows的debugger追蹤一下,看看哪里出错,比如:WinDbg或者 ollydbg
2023-12-15 03:26
快速回复:罗云彬win32汇编书里的日志记录钩子WH_JOURNALRECORD
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022134 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved