QQ游戏外挂mouse_event不起作用的原因,及我的对对碰外挂程序.
2005-05-17 19:53
246 查看
/////////////////////////////////////////////////////////////////////
// 作者 : 阿东
// 主页 : http://adong2008.512j.com
// 邮箱 : dongfa@yeah.net
// MSN : codelive@hotmail.com
// 日期 : 2005.02.06
/////////////////////////////////////////////////////////////////////
关于QQ游戏外挂mouse_event不起作用的原因,及我的对对碰外挂程序.
相信很多朋友都使用过QQ游戏的外挂和自己也开发过.
但可能你会发现,mouse_event不起作用了.这是为什么呢?
我写对对碰外挂的时候也碰到了.下面就把实现和解决过程说明如下.
关于如何判断对对碰中是否可以消除的代码略过(大家应该都是通过颜色来判断的),因为这部分不是难点.
写好外挂后,反复测试发现,只有第一次运行结果正确,之后就不起作用了,然后动一下鼠标或者点一下鼠标键就又起作用了.想到可能是QQ游戏起作用判断,它能分辨模拟鼠标运作的硬件鼠标动作.(觉得QQ游戏写的很牛,佩服呀~~~)
经过查看目录,发现在游戏目录下面一般都会有这个文件kmsinput.sys,使用ida pro打开分析发一下,发现这是nt下的鼠标的驱动,将作为过滤器filter加到的挂接到鼠标驱动中的,这基本上就证实了我的想法,肯定是通过这个驱动程序来分辨模拟鼠标运作还是硬件鼠标动作的.
然后就设想:当点击鼠标时,QQ程序应该是通过这个驱动程序来检测是否为硬件鼠标的动作,我们的硬件鼠标是能够检测到的,如果你调用了mouse_event则视为非硬件鼠标动作.就不处理鼠标动作,也就是认为你是模拟鼠标,表示你使用的外挂程序.
没办法只能反汇编跟踪调试了,先用ida pro反汇编了一下,发现有很大一部分区域没办法反汇编出来,想到肯定是有加密了.于是我就使用windbg运行来分析了,通过跟踪鼠标点击消息,发现在这个地方会跳转
00408519 8b11 mov edx,[ecx]
0040851b 6a01 push 0x1
0040851d ff5208 call dword ptr [edx+0x8]
00408520 3dc9d56601 cmp eax,0x166d5c9 //这是比较
00408525 0f85a0000000 jne twin!CxImage::`copy constructor closure'+0x6a7b(004085cb) // 这是这里,如果是硬件鼠标动作不跳,如果是模拟就跳转了
找到了这个地方,就容易多了,很简单把 cmp eac,0x166d5c9改为cmp eax,eax
剩下的三个字节改为90 90 90.
再运行程序和外挂测试通过.大功告成了!哈哈...
另个,又研究发现,对对碰的速度是通过Sleep控制的,写了一个api hook,hook到Sleep,将参数
VOID WINAPI CTwinHookFunc::MySleep(DWORD dwMilliseconds)
{
...
dwMilliseconds = dwMilliseconds/5; // 变为1/5
...
p_Sleep(dwMilliseconds); // 调用真正的sleep函数
}
再次测试,哇靠,好快呀~~~
通过实战,挂了半天,发现可以同时对付几个人而且也不会输.胜率为90%,2000多分了.
对对碰外挂程序下载:
http://adong2008.512j.com/downloads/DDPHelp.rar
好久不玩QQ游戏了,上面的外挂是针对对对碰版本0.10.1.12的.
有任何问题欢迎交流.
/////////////////////////////////////////////////////////////////////////////
附关键代码:
我使用DLL注入技术,就是写一个DLL,然后把它注入到 对对碰进程(Twin.exe).
你可以写一个DLL,然后加入以下代码:
// 以下代码做的工作是
// 动态的将对对碰游戏中通过驱动判断鼠标的地方,改为不管是硬件还是模拟都让它起作用.
// 老的汇编代码:
// 00408520 3dc9d56601 cmp eax,0x166d5c9 //
// 00408525 0f85a0000000 jne 004085cb // 是模拟鼠标就跳转了,我们不能这它跳
// 新的汇编代码:
// 00408520 39c0 cmp eax,eax
// 00408522 90 nop
// 00408523 90 nop
// 00408524 90 nop
// 00408525 0f85a0000000 jne 004085cb // 这回肯定不会跳转了
//
//..........................................................................
BYTE chOld[5];
DWORD dwRead = 5;
void *pCrackAddr = (void *)0x00408520; // 这是通过反汇编得到的地址
if(ReadProcessMemory(GetCurrentProcess(), pCrackAddr, chOld, 5, &dwRead))
{
// Old:00408520 3d c9 d5 66 01
if( (chOld[0] == 0x3d) &&
(chOld[1] == 0xc9) &&
(chOld[2] == 0xd5) &&
(chOld[3] == 0x66) &&
(chOld[4] == 0x01))
{
// New:00408520 39 c0 90 90 90
BYTE chCrack[5];
chCrack[0] = 0x39;
chCrack[1] = 0xc0;
chCrack[2] = 0x90;
chCrack[3] = 0x90;
chCrack[4] = 0x90;
DWORD dwWrite = 5;
WriteProcessMemory(GetCurrentProcess(), pCrackAddr, chCrack, 5, &dwWrite);
}
}
//..........................................................................
在
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
UNREFERENCED_PARAMETER(lpReserved);
if (dwReason == DLL_PROCESS_ATTACH)
{
//在这里执行以上代码
}
…
}
这样就可以了.
或者可这样,我的DDPHelp.exe执行后,会在同目录下产生一个TWin.dat文件,将这个文件注入到Twin.exe进程就可以了.
注入进程的方法我就不介绍了,网上应该很多的.
// 作者 : 阿东
// 主页 : http://adong2008.512j.com
// 邮箱 : dongfa@yeah.net
// MSN : codelive@hotmail.com
// 日期 : 2005.02.06
/////////////////////////////////////////////////////////////////////
关于QQ游戏外挂mouse_event不起作用的原因,及我的对对碰外挂程序.
相信很多朋友都使用过QQ游戏的外挂和自己也开发过.
但可能你会发现,mouse_event不起作用了.这是为什么呢?
我写对对碰外挂的时候也碰到了.下面就把实现和解决过程说明如下.
关于如何判断对对碰中是否可以消除的代码略过(大家应该都是通过颜色来判断的),因为这部分不是难点.
写好外挂后,反复测试发现,只有第一次运行结果正确,之后就不起作用了,然后动一下鼠标或者点一下鼠标键就又起作用了.想到可能是QQ游戏起作用判断,它能分辨模拟鼠标运作的硬件鼠标动作.(觉得QQ游戏写的很牛,佩服呀~~~)
经过查看目录,发现在游戏目录下面一般都会有这个文件kmsinput.sys,使用ida pro打开分析发一下,发现这是nt下的鼠标的驱动,将作为过滤器filter加到的挂接到鼠标驱动中的,这基本上就证实了我的想法,肯定是通过这个驱动程序来分辨模拟鼠标运作还是硬件鼠标动作的.
然后就设想:当点击鼠标时,QQ程序应该是通过这个驱动程序来检测是否为硬件鼠标的动作,我们的硬件鼠标是能够检测到的,如果你调用了mouse_event则视为非硬件鼠标动作.就不处理鼠标动作,也就是认为你是模拟鼠标,表示你使用的外挂程序.
没办法只能反汇编跟踪调试了,先用ida pro反汇编了一下,发现有很大一部分区域没办法反汇编出来,想到肯定是有加密了.于是我就使用windbg运行来分析了,通过跟踪鼠标点击消息,发现在这个地方会跳转
00408519 8b11 mov edx,[ecx]
0040851b 6a01 push 0x1
0040851d ff5208 call dword ptr [edx+0x8]
00408520 3dc9d56601 cmp eax,0x166d5c9 //这是比较
00408525 0f85a0000000 jne twin!CxImage::`copy constructor closure'+0x6a7b(004085cb) // 这是这里,如果是硬件鼠标动作不跳,如果是模拟就跳转了
找到了这个地方,就容易多了,很简单把 cmp eac,0x166d5c9改为cmp eax,eax
剩下的三个字节改为90 90 90.
再运行程序和外挂测试通过.大功告成了!哈哈...
另个,又研究发现,对对碰的速度是通过Sleep控制的,写了一个api hook,hook到Sleep,将参数
VOID WINAPI CTwinHookFunc::MySleep(DWORD dwMilliseconds)
{
...
dwMilliseconds = dwMilliseconds/5; // 变为1/5
...
p_Sleep(dwMilliseconds); // 调用真正的sleep函数
}
再次测试,哇靠,好快呀~~~
通过实战,挂了半天,发现可以同时对付几个人而且也不会输.胜率为90%,2000多分了.
对对碰外挂程序下载:
http://adong2008.512j.com/downloads/DDPHelp.rar
好久不玩QQ游戏了,上面的外挂是针对对对碰版本0.10.1.12的.
有任何问题欢迎交流.
/////////////////////////////////////////////////////////////////////////////
附关键代码:
我使用DLL注入技术,就是写一个DLL,然后把它注入到 对对碰进程(Twin.exe).
你可以写一个DLL,然后加入以下代码:
// 以下代码做的工作是
// 动态的将对对碰游戏中通过驱动判断鼠标的地方,改为不管是硬件还是模拟都让它起作用.
// 老的汇编代码:
// 00408520 3dc9d56601 cmp eax,0x166d5c9 //
// 00408525 0f85a0000000 jne 004085cb // 是模拟鼠标就跳转了,我们不能这它跳
// 新的汇编代码:
// 00408520 39c0 cmp eax,eax
// 00408522 90 nop
// 00408523 90 nop
// 00408524 90 nop
// 00408525 0f85a0000000 jne 004085cb // 这回肯定不会跳转了
//
//..........................................................................
BYTE chOld[5];
DWORD dwRead = 5;
void *pCrackAddr = (void *)0x00408520; // 这是通过反汇编得到的地址
if(ReadProcessMemory(GetCurrentProcess(), pCrackAddr, chOld, 5, &dwRead))
{
// Old:00408520 3d c9 d5 66 01
if( (chOld[0] == 0x3d) &&
(chOld[1] == 0xc9) &&
(chOld[2] == 0xd5) &&
(chOld[3] == 0x66) &&
(chOld[4] == 0x01))
{
// New:00408520 39 c0 90 90 90
BYTE chCrack[5];
chCrack[0] = 0x39;
chCrack[1] = 0xc0;
chCrack[2] = 0x90;
chCrack[3] = 0x90;
chCrack[4] = 0x90;
DWORD dwWrite = 5;
WriteProcessMemory(GetCurrentProcess(), pCrackAddr, chCrack, 5, &dwWrite);
}
}
//..........................................................................
在
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
UNREFERENCED_PARAMETER(lpReserved);
if (dwReason == DLL_PROCESS_ATTACH)
{
//在这里执行以上代码
}
…
}
这样就可以了.
或者可这样,我的DDPHelp.exe执行后,会在同目录下产生一个TWin.dat文件,将这个文件注入到Twin.exe进程就可以了.
注入进程的方法我就不介绍了,网上应该很多的.
相关文章推荐
- [转载]关于QQ游戏外挂mouse_event不起作用的原因,及我的对对碰外挂程序.
- qt界面程序中相应鼠标QMouseEvent的pos()和gloabalPos()的含义
- QQ游戏外挂制作教程 (对对碰)
- Flex中双击事件MouseEvent.DOUBLE_CLICK不起作用的解决办法
- QQ游戏外挂制作教程 (对对碰)
- C# API Keybd_event + mouse_event 利用API程序控制按下某键
- Qt简单程序1 QMousePressEvent
- 使用mouse_event模拟鼠标事件时,程序窗口失去焦点就失效
- Qt学习: QPaintEvent和QMouseEvent的简单程序示例
- Unity3D 中鼠标按下时OnMouseDown()、Input.GetMouseButtonDown()和EventType.MouseDown的响应验证
- [原创]QQ农场外挂辅助程序-小萝莉偷菜机器人,提供下载。
- Linux程序运行时找不到动态链接库的原因
- web程序莫名弹出错误提示框(dwr),处理方法。产生原因有待思考
- 6大原因导致「最安全的程序」也会出现隐患!
- iOS 懒加载不起作用的原因
- 程序是怎么跑起来的(3)---计算机进行小数运算时出错的原因
- 监控Hbase是否可用的外挂程序
- [程序]出现bad interpreter:No such file or directory的原因
- Unity用程序给Animator控制的某一个动画(AnimationClip)加一个动画事件(AnimationEvent)
- Flex 中双击事件MouseEvent.DOUBLE_CLICK