首页
社区
课程
招聘
[旧帖] 救命啊,DLL中创建对话框问题闷头折磨了我一个星期了,大侠帮帮忙救命!救命!救命!救命! 0.00雪花
发表于: 2013-2-18 12:01 6159

[旧帖] 救命啊,DLL中创建对话框问题闷头折磨了我一个星期了,大侠帮帮忙救命!救命!救命!救命! 0.00雪花

2013-2-18 12:01
6159
我写了一个程序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

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (14)
雪    币: 350
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
你对话框的资源在dll里,所以你的hInstance应该是dll的
2013-2-18 12:09
0
雪    币: 28
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
           invoke GetModuleHandle,addr szDllName
           mov hGameWnd,eax
           invoke CreateDialogParam,hInstance,IDD_DIALOG_TEST,hGameWnd,addr DllWndProc,NULL

谢谢你,只是依然不行
2013-2-18 12:15
0
雪    币: 350
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
你参数是不是填错了。。。

HWND WINAPI CreateDialogParam(
  _In_opt_  HINSTANCE hInstance,
  _In_      LPCTSTR lpTemplateName,
  _In_opt_  HWND hWndParent,
  _In_opt_  DLGPROC lpDialogFunc,
  _In_      LPARAM dwInitParam
);
2013-2-18 13:38
0
雪    币: 28
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
参数貌似没错啊,这到底是怎么弄的呢?
2013-2-18 21:12
0
雪    币: 28
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
不能创建对话框,那么请问要怎样让DLL自动调用注入程序的代码呢?
2013-2-18 21:13
0
雪    币: 350
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
module handle当hwnd使,还没错
2013-2-18 22:20
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
学会软件调试是楼主想在你的领域深入走下去的必由之路
学习了楼主的代码,如果楼主InstallKeyboardHook proc没有错误的话,问题就出新在VK_F12按下后的代码逻辑上啦
GetModuleHandle(NULL)返回的是游戏主模块的句柄值,其实就是.exe被加载的起始地址,而你后面的代码就有点问题了
/////////////////////////////////////////////////
mov hGameWnd,eax
           invoke CreateDialogParam,hInstance,IDD_DIALOG_TEST,hGameWnd,addr DllWndProc,NULL
楼主你似乎把HModule当HWnd用了
2013-2-19 13:02
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
[QUOTE=;]...[/QUOTE]
invoke InitCommonControls
调用之前没有加这个函数的缘故罢!~
2013-2-19 16:51
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
hInstance 是全局变量 在dllman 已经被赋值了,这里是对的
2013-2-21 04:07
0
雪    币: 5
活跃值: (229)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
Setwindowhookex的第二个参数前是不是该加addr
2013-2-21 05:29
0
雪    币: 1392
活跃值: (5142)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
12
游戏外挂的呼出?看郁金香老师VC的教程,关于热血江#的那一章,有教DLL怎么弹出的
2013-2-21 08:22
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
invoke GetModuleHandle,NULL
           mov hGameWnd,eax
           invoke CreateDialogParam,hInstance,IDD_DIALOG_TEST,hGameWnd,addr DllWndProc,NULL

请你仔细看看这代码 ::CreateDialogParam的第三个参数要求是HWND hWndParent ,而楼主传进来的是GetModuleHandle(NULL),  楼主把一个模块起始地址当窗口句柄用了
2013-2-21 11:10
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
额 对俄。 你说的很对。。呵呵
2013-2-21 13:40
0
雪    币: 41
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
我想问下我Setwindowshookex进了系统自带的计算器,键盘hook能把DLLhook进去,也启动了窗口,可是窗口里的edit控件输入都会输入到计算器中,有谁知道咋回事?
2013-4-2 22:04
0
游客
登录 | 注册 方可回帖
返回
//