我写了一个程序HOOK另一个程序
然后按下F12就在dll中创建一个对话框
HOOK成功可是按下F12就是不创建对话框并且像是进入了一个死机状态似得
我通过各方面修改一直没成功
闷头自己捣鼓了快一个星期了,真心想死的心都有了
大侠救命救救我好吗?
下面是代码和资源文件
.486
.model flat,stdcall
option casemap:none
include windows.inc
include kernel32.inc
include user32.inc
includelib kernel32.lib
includelib user32.lib
IDD_DIALOG_TEST equ 2000
IDC_BTN_TEST equ 2001
KeyboardProc proto Code:UINT,wParam:WPARAM,lParam:LPARAM
InstallKeyboardHook proto
DllWndProc proto hwnd:HWND,message:UINT,wParam:WPARAM,lParam:LPARAM
.data
szGameName db "YB_OnlineClient",0
szDllName db "Auxiliarydll.dll",0
.data?
hInstance dd ? ;Dll's module handle
.code
;*************************************************************
;作者:東兎
;功能:用于加载DLL的主函数
;日期:201302060804
;参数:三个参数都由系统传回
;*************************************************************
DllStart proc _hInstance:DWORD, _reason:DWORD, _reserved:DWORD
mov eax, _hInstance
mov hInstance, eax
mov eax, TRUE
ret
DllStart Endp
;*************************************************************
;作者:東兎
;功能:用于安装键盘钩子
;日期:201302060804
;参数:无参数
;*************************************************************
InstallKeyboardHook proc
LOCAL hGame:DWORD
LOCAL dwGameId:DWORD
LOCAL hAuxiliarydll:DWORD
invoke FindWindow,NULL,addr szGameName
mov hGame,eax
invoke GetWindowThreadProcessId,hGame,NULL
mov dwGameId,eax
invoke GetModuleHandle,addr szDllName
mov hAuxiliarydll,eax
invoke SetWindowsHookEx,WH_KEYBOARD,KeyboardProc,hAuxiliarydll,dwGameId
invoke CloseHandle,hGame
invoke CloseHandle,hAuxiliarydll
ret
InstallKeyboardHook endp
;*************************************************************
;作者:東兎
;功能:用于键盘钩子的回调函数
;日期:201302060804
;参数:参数由系统传回
;*************************************************************
KeyboardProc proc Code:UINT,wParam:WPARAM,lParam:LPARAM
LOCAL hGameWnd:DWORD
LOCAL hWnd:DWORD
LOCAL Messages:MSG
.if wParam==VK_F12
mov ebx,lParam
and ebx,40000000h
.if ebx == 40000000h
invoke GetModuleHandle,NULL
mov hGameWnd,eax
invoke CreateDialogParam,hInstance,IDD_DIALOG_TEST,hGameWnd,addr DllWndProc,NULL
mov hWnd,eax
invoke ShowWindow,hWnd,SW_SHOWNORMAL
invoke UpdateWindow,hWnd
$Message_loop$:
invoke GetMessage,addr Messages,NULL,0,0
cmp eax,0
je $OVER$
invoke TranslateMessage,addr Messages
invoke DispatchMessage,addr Messages
jmp $Message_loop$
$OVER$:
mov eax,Messages.wParam
ret
.endif ;.if ebx == 40000000h
.endif ;.if wParam==VK_F12
invoke CallNextHookEx,0,Code,wParam,lParam
ret
KeyboardProc endp
;*************************************************************
;作者:東兎
;功能:消息回调函数
;日期:201302060804
;参数:由分发函数分发
;*************************************************************
DllWndProc proc hwnd:HWND,message:UINT,wParam:WPARAM,lParam:LPARAM
mov eax,message
cmp eax,WM_INITDIALOG ;对话框收到的第一条消息
je $WM_INITDIALOG$
cmp eax,WM_COMMAND ;控件消息
je $WM_COMMAND$
cmp eax,WM_CLOSE ;右上角关闭消息
je $WM_CLOSE$
cmp eax,WM_DESTROY ;直接销毁
je $WM_DESTROY$
invoke DefWindowProc,hwnd,message,wParam,lParam
ret
$WM_INITDIALOG$:
jmp $EXIT$
$WM_COMMAND$:
mov eax,wParam
and eax,0FFFFh
cmp eax,IDC_BTN_TEST
je $IDC_BTN_TEST$
jmp $EXIT$
$IDC_BTN_TEST$:
invoke MessageBox,NULL,NULL,NULL,MB_OK
jmp $EXIT$
$WM_CLOSE$:
invoke DestroyWindow,hwnd
jmp $EXIT$
$WM_DESTROY$:
invoke PostQuitMessage,NULL
jmp $EXIT$
$EXIT$:
xor eax,eax
ret
DllWndProc endp
End DllStart
/////////////////////////////////////////////////////////////////////////////////////////////
//资源文件
#include <RESOURCE.H>
#define IDD_DIALOG_TEST 2000
#define IDC_BTN_TEST 2001
IDD_DIALOG_TEST DIALOGEX 6,6,326,169
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "東兎DLL"
FONT 8,"MS Sans Serif",0,0
CLASS "DLGCLASS"
EXSTYLE 0x00000000
BEGIN
CONTROL "测试(TEST)",IDC_BTN_TEST,"Button",WS_CHILD|WS_VISIBLE|WS_TABSTOP,108,60,112,32
END
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!