为winhlp32增加支持鼠标滚轮功能
主要工具是OllyDbg9.0中文版
查看OllyDbg的帮助文件,可以知道对消息下断点的方法
1. 选择“查看”\“窗口”,弹出“窗口”界面。
如果此时你的窗口中为空的,则请先F9,运行程序,然后右击窗口,选“实行”即可。
2。双击你需要下断点的窗口,在弹出的对话框中,在“信息”框中选择你所要拦截的消息。
在这里我下的断点是 20A WM_MOUSEWHEEL
3. 回到程序,随意滚动一下滚轮,OD便会中断在此:(是不是很方便哦^_^)
(上面还有一点代码,省略了)
。。。。。。
00429889 |> 81F9 11010000 CMP ECX,111 Switch (cases 100..706D)
0042988F |. 77 47 JA SHORT WINHLP32.004298D8
00429891 |. 0F84 62090000 JE WINHLP32.0042A1F9
00429897 |. 81F9 00010000 CMP ECX,100
0042989D |. 0F84 E9060000 JE WINHLP32.00429F8C ;处理 WM_KEYDOWN 的程序
004298A3 |. 81F9 01010000 CMP ECX,101
004298A9 |. 0F84 DE100000 JE WINHLP32.0042A98D
004298AF |. 81F9 04010000 CMP ECX,104
004298B5 |. 0F84 67080000 JE WINHLP32.0042A122
004298BB |. 81F9 05010000 CMP ECX,105
004298C1 |. 0F84 C3080000 JE WINHLP32.0042A18A
004298C7 |. 81F9 06010000 CMP ECX,106
004298CD |. 0F84 05090000 JE WINHLP32.0042A1D8
004298D3 |. E9 1E120000 JMP WINHLP32.0042AAF6
004298D8 |> 81F9 16010000 CMP ECX,116
004298DE |. 77 17 JA SHORT WINHLP32.004298F7
004298E0 |. 0F84 49090000 JE WINHLP32.0042A22F
004298E6 |. 81F9 13010000 CMP ECX,113
004298EC |. 0F84 1A090000 JE WINHLP32.0042A20C
004298F2 |. E9 FF110000 JMP WINHLP32.0042AAF6
004298F7 |> 81F9 0F030000 CMP ECX,30F
004298FD |. 77 17 JA SHORT WINHLP32.00429916
004298FF |. 0F84 2D100000 JE WINHLP32.0042A932
00429905 |. 81F9 17010000 CMP ECX,117
0042990B |. 0F84 D3090000 JE WINHLP32.0042A2E4
00429911 |. E9 E0110000 JMP WINHLP32.0042AAF6 ==> jmp 437C40
跳转到自己添加的代码,用来增加判断是否是 20A
00429916 |> 81F9 02040000 CMP ECX,402
0042991C |. 77 17 JA SHORT WINHLP32.00429935
0042991E |. 0F84 1D0A0000 JE WINHLP32.0042A341
一看就知道这是消息比较(很明显的,呵呵)
我添加的代码如下:
00437C40 > 81FE 0A020000 CMP ESI,20A ;比较是否是20A
00437C46 .^0F85 AA2EFFFF JNZ WINHLP32.0042AAF6 ;如果不是,则返回程序原来代码
00437C4C . BE 00010000 MOV ESI,100 ;100为WM_KEYDOWN=》ESI
;我把滚轮消息转化为程序原有的KEYDOWN消息
00437C51 . 8B45 10 MOV EAX,DWORD PTR SS:[EBP+10] ;WM_MOUSEWHEEL消息的参数,可查win32手册, ;这个参数是判断向上滚,还是向下的
00437C54 . 3D 00007800 CMP EAX,780000 ;如果EAX=780000,则向上滚轮
00437C59 74 0C JE SHORT WINHLP32.00437C67
00437C5B . C745 10 280000>MOV DWORD PTR SS:[EBP+10],28 ;28为WM_KEYDOWN的参数,表示方向键的“下”
00437C62 >^E9 2523FFFF JMP WINHLP32.00429F8C ;转去程序处理WM_KEYDOWN的程序
00437C67 . C745 10 260000>MOV DWORD PTR SS:[EBP+10],26 ;26为WM_KEYDOWN的参数,表示方向键的“上”
00437C6E .^E9 1923FFFF JMP WINHLP32.00429F8C ;转去程序处理WM_KEYDOWN键的程序
就这样完成了,是不是很简单!
利用 WM_KEYDOWN 参数,我们还可以定义自己的“快捷键”,这样如果在你的游戏中设这样一个键,那么在“弹尽粮绝”的时候,按一下自己的快捷键,就“复活”了(不用修改器的“原版+修改版”)。呵呵,这样是不是很爽!
OllyDbg的功能确实非常的强大,还有很多功能等待我们去发现,有很多问题在OD的帮助文件中都有说明,大家遇到问题应该先去看看帮助,会有收获的!
参考pll261的文章,在此表示感谢!
文中涉及的API知识,请大家自己查找手册!
收工!
今天成为 OCN 的一员,好高兴的,^_^。。。。。。。