逍遥的男孩 发表于 2011-3-10 10:53:44

vb+HOOK,做外挂用到的消息钩子

Hook简介

Hook这个东西有时令人又爱又怕,Hook是用来拦截系统某些讯息之用,例如说,我们想让系统不管在什麽地方只要按个Ctl-B便执行NotePad,或许您会使用Form的KeyPreview,设定为True,但在其他Process中按Ctl-B呢?那就没有用,这是就得设一个Keyboard Hook来拦截所有Key in的键;再如:MouseMove的Event只在该Form或Control上有效,如果希望在Form的外面也能得知Mouse Move的讯息,那只好使用Mouse Hook来栏截Mouse的讯息。再如:您想记录方才使用者的所有键盘动作或Mosue动作,以便录巨集,那就使用JournalRecordHook,如果想停止所有Mosue键盘的动作,而放(执行)巨集,那就使用JournalPlayBack Hook;Hook呢,可以是整个系统为范围(Remote Hook),即其他Process的动作您也可以拦截,也可以是LocalHook,它的拦截范围只有Process本身。Remote Hook的Hook Function要在.Dll之中,Local Hook则在.Bas中。在VB如何设定Hook呢?使用SetWindowsHookEx()

**** Hidden Message *****

一阵狂风 发表于 2011-3-10 11:13:17

恩,学习一下。。

zhuxqstyle 发表于 2011-10-5 20:30:50

好好学习,天天上网。

holacc 发表于 2012-1-5 05:23:39

ddddddddddd啊需要

liuyh7788 发表于 2012-10-21 13:29:17

内容看帖是学习,回帖更是礼貌!!!

gn02378876 发表于 2012-12-8 14:33:43

恩,学习一下。。

黑夜圣主 发表于 2013-2-6 16:37:17

口袋西游按键call分析教程
分析步骤:

1、打开口袋西游,登入账号后用OD附加
如果一开始就附加,输入账号那里老提示密码错误,不能登陆游戏的!

2、bp send下断,游戏里按F1,OD断下,按CTRL+F9七次,找到如下地址:
[00569297    E8 34C2F2FF    CALL elementc.004954D0
0056929C    85C0            TEST EAX,EAX
0056929E    74 07          JE SHORT elementc.005692A7
005692A0    8B10            MOV EDX,DWORD PTR DS
005692A2    8BC8            MOV ECX,EAX
005692A4    FF52 08      CALL DWORD PTR DS            
005692A7    5F            POP EDI
005692A8    5E            POP ESI
005692A9    5D            POP EBP
005692AA    B0 01          MOV AL,1
005692AC    5B            POP EBX
005692AD    59            POP ECX
005692AE    C2 0C00      RETN 0C

断在蓝色那行,CALL DWORD PTR DS便是我们要找的call

3、分析CALL与紧邻的上2行
005692A0    8B10            MOV EDX,DWORD PTR DS
005692A2    8BC8            MOV ECX,EAX
005692A4    FF52 08      CALL DWORD PTR DS

得知:
EDX=
ECX=EAX
CALL [+8]

好我们找EAX

4、继续向上找EAX
00569297    E8 34C2F2FF    CALL elementc.004954D0

好我们CTRL+G定位到地址004954D0

004954D0    8B4424 04      MOV EAX,DWORD PTR SS
004954D4    85C0            TEST EAX,EAX
004954D6    7C 1E          JL SHORT elementc.004954F6
004954D8    3B41 10      CMP EAX,DWORD PTR DS
004954DB    7D 19          JGE SHORT elementc.004954F6
004954DD    8B49 0C      MOV ECX,DWORD PTR DS
004954E0    8A5424 08      MOV DL,BYTE PTR SS
004954E4    84D2            TEST DL,DL
004954E6    8D0C81          LEA ECX,DWORD PTR DS
004954E9    8B01            MOV EAX,DWORD PTR DS
004954EB    74 0B          JE SHORT elementc.004954F8
004954ED    C701 00000000MOV DWORD PTR DS,0
004954F3    C2 0800      RETN 8
004954F6    33C0            XOR EAX,EAX
004954F8    C2 0800      RETN 8

结合:主要是找
005692C7    83C7 90      ADD EDI,-70
005692CC    57            PUSH EDI

得知:
EAX=    按键-70
ECX=
ECX=
EAX=

公式1:EAX=+(F1:0-F8:7)4
EAX=+(按键-$70)4

5、回到主线程,继续向上找EAX
005692CD    8B8483 E8090000 MOV EAX,DWORD PTR DS
005692D4    8BC8            MOV ECX,EAX

得知:
EAX=
ECX=EAX

公式1:EAX=[+C]+(F1:0-F8:7)4
EAX=[+C]+(按键-$70)4

6、继续线上找EAX
CALL elementc.0051D620
DEC EAX 之前这一行代码没看到,导致分析造成误差,切忌马虎啊~~

0051D620    A1 886B9200    MOV EAX,DWORD PTR DS
0051D625    C3            RETN

得知:
公式1:EAX=[+C]+(F1:0-F8:7)4
EAX=[+C]+(按键-$70)4

7、向上找EBX了
00569171    8B5C24 10      MOV EBX,DWORD PTR SS

00569090    51            PUSH ECX
00569091    A1 5CFC9600    MOV EAX,DWORD PTR DS
00569096    53            PUSH EBX
00569097    55            PUSH EBP
00569098    56            PUSH ESI
00569099    8BF1            MOV ESI,ECX
0056909B    8B48 1C      MOV ECX,DWORD PTR DS
0056909E    57            PUSH EDI
0056909F    8B41 28      MOV EAX,DWORD PTR DS
005690A2    894424 10      MOV DWORD PTR SS,EAX

EAX=
ECX=
EAX=
=EAX

=[[+1C]+28] 是PUSH进栈的,然后被修改了数值


8、大功告成,由此分析所得:

公式2:

EAX=[[[[+1C]+28]+04+9E8]+C]+(F1:0-F8:7)4
EAX=[[[[+1C]+28]+04+9E8]+C]+(按键-$70)4

EDX=
ECX=EAX
CALL [+8]


9、写出代码(delphi)
asm
    pushad

    delhi代码
    MOV EAX, DWORD PTR
    MOV EAX, DWORD PTR
    MOV EAX, DWORD PTR
    MOV EAX, DWORD PTR       按键1-7:9F4 按键F1-F89E8
    MOV EAX, DWORD PTR
    MOV EAX, DWORD PTR 按键序号X(从1开始)-1

    MOV ECX,EAX
    MOV EDX,DWORD PTR
    CALL DWORD PTR
    popad
end;

当然了,清楚了整个脉络,用OD原型代码一样OK
asm
    pushad
    原始OD指令顺序
    MOV EAX,DWORD PTR DS[$96FC5C]
    MOV ECX,DWORD PTR DS
    MOV EAX,DWORD PTR DS

    MOV EBX,EAX

    MOV EAX,DWORD PTR DS[$926B88]
    DEC EAX

    MOV EAX,DWORD PTR DS
    MOV ECX,EAX

    MOV EAX,$40
    MOV ECX,DWORD PTR DS
    LEA ECX,DWORD PTR DS
    MOV EAX,DWORD PTR DS

    MOV EDX,DWORD PTR DS
    MOV ECX,EAX
    CALL DWORD PTR DS
    popad
end;
   
公式整理如下,按键1-7的一样分析即可,想学的可以自己练习下:
按键F1-F7:
EAX=[[[[+1C]+28]+04+9E8]+C]+(F1:0-F8:7)4
EAX=[[[[+1C]+28]+04+9E8]+C]+(按键-$70)4


EDX=
ECX=EAX
CALL [+8]

按键1-7:
EAX=[[[[+1C]+28]+04+9F4]+C]+(1:0-7:6)4
EAX=[[[[+1C]+28]+04+9F4]+C]+(按键-$31)4

EDX=
ECX=EAX
CALL [+8]

结合按键位置的公式,CALL这个按键前加入保护,就不会导致崩溃拉!

快捷键 1~9
[[[[[+$28]+$9F4]+$C]+4n]+$10]
F1~F8
[[[[[+$28]+$9E8]+$C]+4n]+$10]

daniel 发表于 2013-2-7 21:59:30

..........................

33994232 发表于 2013-2-9 13:05:02

谢谢哦,好东西。

tuige 发表于 2013-3-17 06:02:51

dfgffffdfgffff
页: [1] 2 3
查看完整版本: vb+HOOK,做外挂用到的消息钩子