| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1606 人关注过本帖
标题:钩子,屏蔽win键,其它的可以依例子屏蔽,顺求屏ctrl+alt+delete的方法
只看楼主 加入收藏
onepc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:223
专家分:569
注 册:2009-8-27
结帖率:54.55%
收藏
已结贴  问题点数:20 回复次数:8 
钩子,屏蔽win键,其它的可以依例子屏蔽,顺求屏ctrl+alt+delete的方法
程序代码:
;钩子练习
;by onepc 153785587
;参考:百度
; ml /c /coff hook.asm
; Link  /subsystem:windows /section:.bss,S /Def:hook.def /Dll hook.obj
.386
.model flat,stdcall
option casemap:none

include windows.inc
include user32.inc
include kernel32.inc

includelib user32.lib
includelib kernel32.lib

.data
hDInstance dd ?   ;dll模块句柄

.data?
hHook dd ?   ;钩子句柄







.code

DLLEntry proc _hInstance,_dwReson,_dwRelease  ;_hInstance这个是模块句柄
push _hInstance
pop hDInstance
mov eax,TRUE
ret
DLLEntry endp


_CALLBACKHOOK proc  _dwCode,_wParam,_lParam ;钩子过程  这里的参数是随你命名的只要是dword型就OK
           
      .if _dwCode==HC_ACTION   ;有键盘消息时处理
         .if (_wParam==VK_LWIN) || (_wParam==VK_RWIN)  ;屏蔽win键
          mov eax,TRUE
          ret
          .endif
      .else  
        invoke CallNextHookEx,hHook,_dwCode,_wParam,_lParam
      .endif


;invoke  CallNextHookEx,hHook,_dwCode,_wParam,_lParam
ret
_CALLBACKHOOK endp



_INSTALLHOOK proc     ;安装钩子
invoke SetWindowsHookEx,WH_KEYBOARD_LL,addr _CALLBACKHOOK,hDInstance,NULL  ;全局钩子
mov hHook,eax   ;保存钩子
ret
_INSTALLHOOK endp


_UNINSTALLHOOK proc   ;卸载钩子
invoke UnhookWindowsHookEx,hHook  ;卸载钩子
ret
_UNINSTALLHOOK endp

End DLLEntry

hook.def

EXPORTS 
        _INSTALLHOOK
        _UNINSTALLHOOK

hook.inc

_INSTALLHOOK proto
_UNINSTALLHOOK proto



主程序
程序代码:
.386
.model flat,stdcall
option casemap:none

include windows.inc
include user32.inc
include kernel32.inc

includelib user32.lib
includelib kernel32.lib

include hook.inc
includelib hook.lib

IDD_TOP_DIALOG     equ             102
IDR_MAINFRAME      equ             128
IDC_BUTTON1        equ             1000
IDC_BUTTON2        equ            1001

.data
hInstance dd ?
hMain dd ?      ;对话框句柄

.code

;;对话框回调过程
_DlgProc proc uses esi edi ebx hDlg,uMsg,wParam,lParam
.if uMsg==WM_INITDIALOG   ;对话框初始化
    push hDlg
    pop hMain
    ;invoke LoadIcon,hInstance,IDR_MAINFRAME
    ;invoke    SendMessage,hDlg,WM_SETICON,ICON_BIG,eax

    
.elseif uMsg==WM_COMMAND
    mov eax,wParam
    .if ax==IDC_BUTTON1
        invoke _INSTALLHOOK
        ;invoke EndDialog,hDlg,TRUE
    .endif
    
    .if ax==IDC_BUTTON2
       invoke _UNINSTALLHOOK
    .endif
.elseif uMsg==WM_CLOSE
    invoke EndDialog,hDlg,FALSE
.else
    mov eax,FALSE
    ret
.endif
mov eax,TRUE
ret
_DlgProc endp
;;对话框回调过程

start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,IDD_TOP_DIALOG,NULL,addr _DlgProc,NULL
invoke ExitProcess,NULL

end start


资源
程序代码:
#include "resource.h"

#define IDD_TOP_DIALOG                  102
#define IDR_MAINFRAME                   128
#define IDC_BUTTON1                     1000
#define IDC_BUTTON2                     1001

IDR_MAINFRAME           ICON    DISCARDABLE     "hook.ico"


IDD_TOP_DIALOG DIALOGEX 0, 0, 135, 103
STYLE DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | 
    WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "ASM + API"
FONT 9, "宋体"
BEGIN
    PUSHBUTTON      "INSTALL",IDC_BUTTON1,39,33,46,15
    PUSHBUTTON      "UNINSTALL",IDC_BUTTON2,38,59,48,15
END




搜索更多相关主题的帖子: alt 例子 delete 钩子 win 
2009-10-07 11:55
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:6 
ctrl+alt+delete

屏蔽方法很多罢 有一种是注入到winlogon.exe中接管那个热键处理
2009-10-07 12:09
onepc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:223
专家分:569
注 册:2009-8-27
收藏
得分:0 
上面的嗯。好像有错。再看下钩子方面的。
2009-10-07 13:42
onepc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:223
专家分:569
注 册:2009-8-27
收藏
得分:0 
前面加个结构

程序代码:
KBDLLHOOKSTRUCT STRUCT 
vKcode DWORD ?? 
scanCode DWORD ?? 
flags DWORD ?? 
time DWORD ?? 
dwExtraInfo DWORD ?? 
KBDLLHOOKSTRUCT ENDS


上面的处理换成下面的

程序代码:
      .if _dwCode==HC_ACTION   ;有键盘/鼠标消息时处理 
      .IF (_wParam == WM_KEYDOWN) 
            mov edx,_lParam 
            assume edx:PTR KBDLLHOOKSTRUCT 
            .IF ([edx].vKcode == VK_LWIN) || ([edx].vKcode==VK_RWIN) 
                mov eax,TRUE 
                ret 
            .endif 
        .endif 
    .endif 
    invoke CallNextHookEx,hHook,_dwCode,_wParam,_lParam 
    ret
2009-10-07 15:37
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:6 
这个没有研究过,不过感觉在应用层上用键盘钩子恐怕有点够呛。如果不想在驱动层上做的话,可以考虑在

winlogon.exe中(用HOOK API)hook键盘处理函数试试。

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2009-10-08 20:51
onepc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:223
专家分:569
注 册:2009-8-27
收藏
得分:0 
上面的处理换成下面的就行了。我用低级键盘钩子{—LL的这个}。但是第一楼的参数却用了键盘钩子的。所以钩不住。

嗯。hook api这个正在看。我想hook copyfile 这个是否能把复制文件钩住?
2009-10-09 08:58
sll0807
Rank: 3Rank: 3
等 级:论坛游侠
威 望:5
帖 子:69
专家分:123
注 册:2009-3-2
收藏
得分:6 
dll 注入  winlogon.exe

hook msgina.dll 的WlxLoggedOnSAS 函数

检测dwSasType 如果是 WLX_SAS_TYPE_CTRL_ALT_DEL

返回 WLX_SAS_ACTION_NONE
2009-10-09 10:24
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:0 
回复 7楼 sll0807
不错,学习了。不过感觉直接代码注入更方便一些,呵呵。

[ 本帖最后由 东海一鱼 于 2009-10-9 11:21 编辑 ]

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2009-10-09 11:20
sll0807
Rank: 3Rank: 3
等 级:论坛游侠
威 望:5
帖 子:69
专家分:123
注 册:2009-3-2
收藏
得分:0 
补充下 下午写了个测试发现问题了

如果 使用欢迎界面方式登陆 Hook WlxLoggedOnSAS 是不起作用的

因为 登陆界面方式 CTRL+ALT+DEL 会调用任务管理器

通过查看 msgina.dll 说明发现  

WlxStartApplication 在使用“欢迎界面”的时候 会接受启动 任务管理器的任务

所以 XP下 真正 HOOKAPI来屏蔽CTRL+ALT+DEL 的话 就需要HOOK

msgina.dll 的 WlxLoggedOnSAS 和 WlxStartApplication

WlxLoggedOnSAS 检测 dwSasType 是否是 WLX_SAS_TYPE_CTRL_ALT_DEL
如果是 返回 WLX_SAS_ACTION_NONE

WlxStartApplication 检测 pszCmdLine 是否是 taskmgr.exe
如果是 返回 FALSE
2009-10-09 20:32
快速回复:钩子,屏蔽win键,其它的可以依例子屏蔽,顺求屏ctrl+alt+delete的方法
数据加载中...
 
   



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

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