- 注册时间
- 2012-4-11
- 最后登录
- 1970-1-1
该用户从未签到
|
发表于 2012-4-24 23:50:42
|
显示全部楼层
问道也并非说是屏蔽了按键和鼠标消息。他主要是做了一些处理
比如鼠标来说吧。
005FD283 55 push ebp
005FD284 FF15 1C088C00 call dword ptr [<&USER32.DefWindowProcA>] ; USER32.DefWindowProcA <-窗口过程
005FD28A 5D pop ebp
005FD28B 5F pop edi
005FD28C 5B pop ebx
005FD28D 5E pop esi
005FD28E C2 1000 retn 10
005FD291 8BC8 mov ecx, eax
005FD293 E8 38EBFFFF call 005FBDD0 <-这个call是对窗口的消息做了一些处理,进去里面就可以看到很多比较和jmp.等于程序中的switch,case组合。对每个需要处理的消息做了自己的判断
其中有鼠标按下弹起,一些组合按键的
005FBE25 83C4 04 add esp, 4
005FBE28 83FE 05 cmp esi, 5
005FBE2B 0F84 4C010000 je 005FBF7D
005FBE31 83FE 03 cmp esi, 3
005FBE34 0F84 43010000 je 005FBF7D
005FBE3A 81FE 01020000 cmp esi, 201
005FBE40 0F84 37010000 je 005FBF7D
005FBE46 81FE 02020000 cmp esi, 202
005FBE4C 0F84 2B010000 je 005FBF7D
005FBE52 81FE 03020000 cmp esi, 203
005FBE58 0F84 1F010000 je 005FBF7D
005FBE5E 81FE 04020000 cmp esi, 204
005FBE64 0F84 13010000 je 005FBF7D
005FBE6A 81FE 05020000 cmp esi, 205
005FBE70 0F84 07010000 je 005FBF7D
005FBE76 81FE 06020000 cmp esi, 206
005FBE7C 0F84 FB000000 je 005FBF7D
005FBE82 81FE 04010000 cmp esi, 104
005FBE88 0F84 EF000000 je 005FBF7D
005FBE8E 81FE 05010000 cmp esi, 105
005FBE94 0F84 E3000000 je 005FBF7D
005FBE9A 81FE 00010000 cmp esi, 100
005FBEA0 0F84 D7000000 je 005FBF7D
005FBEA6 81FE 01010000 cmp esi, 101
005FBEAC 0F84 CB000000 je 005FBF7D
005FBEB2 81FE 02010000 cmp esi, 102
005FBEB8 0F84 BF000000 je 005FBF7D
005FBEBE 81FE 00020000 cmp esi, 200
005FBEC4 0F85 D8000000 jnz 005FBFA2
如果判断是201或者是202表示鼠标左键按下弹起。
之后就会通过系统的 GetCursorPos和ScreenToClinet函数把窗口坐标转换成全局的系统坐标存入到[a389c4][a389c8]
通过坐标计算后得到鼠标是否在游戏窗口,或者游戏窗口有没有被遮挡住。
如果是点击的游戏窗口,再去通过0xa34a2c 遍历出到底是哪个子窗口。每个不同类型的子窗口都有不同的响应方式
比如是按钮
mov ecx,xxxxxxx <-子窗口句柄
mov esi,[ecx]
push 24c <-y坐标
push 1ed <-x坐标
push 1
mov edx,[esi+74]
call edx
mov ecx,xxxxxx <-子窗口句柄
mov esi,[ecx]
push 24c <-y坐标
push 1ed <-x坐标
push 1
mov edx,[esi+78]
call edx
如果是那种文字的或者是对话内容的
push 1a7 <-y坐标
push 127 <-x坐标
push 1
mov ecx,xxxxxx <-子窗口句柄
mov eax,[ecx]
mov eax,[eax+74]
call eax
push 1a7 <-y坐标
push 127 <-x坐标
push 1
mov ecx,xxxxxx <-子窗口句柄
mov eax,[ecx]
mov eax,[eax+7c]
call eax
主要是2个转换过程,
先是把窗口消息传过来的坐标转换成全局系统坐标,然后去判断这个坐标是否有效。
再通过窗口坐标去找到应该响应哪个子窗口。
如果想直接发sendmessage需要hook系统几个函数GetCursorPos和ScreenToClinet,GetCursorPos....还有好多个就不一一写出来也能实现。
不过他还有一个apex的防智辅系统hook会被检测
目前还是只停留在需要点击哪个按钮或者窗口。就用上面的call直接调用。不过发现他做了一些来源方面的判断。估计也是反智辅的吧以后作为封号凭据的。
文笔不好不太会表达意思。希望大大们不要笑话。 |
|