能力值:
( LV2,RANK:10 )
|
-
-
2 楼
最好先用调试器在HookProc中设断点跟踪看看
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
谢谢楼上的提醒,在调试过程中:
0040111E |. 60 pushad
0040111F |. 837D 08 00 cmp dword ptr [ebp+8], 0 ; 是否 HC_ACTION?
00401123 |. 75 21 jnz short 00401146 ; 是则不跳转
00401125 |. 8B5D 10 mov ebx, [ebp+10] ; 将_lParam送入ebx
00401128 |. 813B 00010000 cmp dword ptr [ebx], 100 ; .if [ebx].message == WM_KEYDOWN
0040112E |. 75 16 jnz short 00401146
00401130 |. 837B 04 7B cmp dword ptr [ebx+4], 7B ; 是否F12键?
00401134 |. 75 10 jnz short 00401146
00401136 |. 6A 00 push 0 ; /Style = MB_OK|MB_APPLMODAL
00401138 |. 68 30204000 push 00402030 ; |Title = "test"
0040113D |. 6A 00 push 0 ; |Text = NULL
0040113F |. 6A 00 push 0 ; |hOwner = NULL
00401141 |. E8 22010000 call <jmp.&user32.MessageBoxA> ; \MessageBoxA
00401146 |> 61 popad
00401147 |. C9 leave
00401148 \. C2 0C00 retn 0C
在这里, dword ptr [ebx+4] 为什么是587B 呢?
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
我在源程序里把
.if [ebx].paramL == VK_F12
改成 .if [ebx].paramL == 587bh
后,按F12倒是可以弹出对话框来了,不过却要弹出21个来,点一下确定又来一个,一共要点21次确定。。不知道是怎么回事?
但是在用OD进行单步调试的时候却又只点一下确定就行了。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
郁闷,没人帮忙。。。
|
能力值:
( LV9,RANK:380 )
|
-
-
6 楼
最初由 无奈无赖 发布 我在源程序里把 .if [ebx].paramL == VK_F12 改成 .if [ebx].paramL == 587bh 后,按F12倒是可以弹出对话框来了,不过却要弹出21个来,点一下确定又来一个,一共要点21次确定。。不知道是怎么回事?
........
我也不知道怎么回事,不过有办法的,不一定要messagebox
invoke SendDlgItemMessage,hWinMain,IDC_TEXT,EM_REPLACESEL,0,addr szCaption
用SendDlgItemMessage替换MessageBox,然后给他定义一个RC文件
把拦截的F12输入到IDC_TEXT 偶测试通过..
|
能力值:
( LV9,RANK:380 )
|
-
-
7 楼
我测试了几天,终于找到弹一次的办法:
invoke MessageBox,NULL,offset szCaption,offset szCaption,MB_OK
.if eax != NULL
invoke ExitProcess,NULL
.endif
.......
呵呵,我想你应该明白,但是还是不够完美
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
非常感谢Winker
我都已经放弃这个问题了的,非常感谢你现在还能够给我回贴并给出解决办法.
不过我还是不知道是为什么出出来那么多消息框.
|
能力值:
( LV9,RANK:380 )
|
-
-
9 楼
偶也不知道,郁闷ing~~
摸索去了.....
|
|
|