您的位置:首页 > 其它

游戏外挂制作

2009-03-04 17:14 393 查看

游戏外挂制作

玩了那么久的游戏,今天心血来潮写点东西,探讨一下游戏外挂的制作。
简单的游戏外挂无非就是将你从重复的按键中解脱出来,模拟按键,实现自动的吃药。
这个外挂适用于对按键消息没有屏蔽的游戏,如热血江湖。
主要用
keybd_event函数实现模拟按键的功能。
keybd_event函数原型:
VOID keybd_event(
BYTE bVk, // 定义一个虚据拟键码
BYTE bScan, // 定义该键的硬件扫描码
DWORD dwFlags, // 定义函数操作的名个方面的一个标志位集
DWORD dwExtraInfo // 通常不用的一个值。api函数GetMessageExtraInfo可取得这个值。允许使用的值取决于特定的驱动程序
);
SetTimer函数实现计时的功能。
SetTimer函数原型:
UINT_PTR SetTimer(
HWND hWnd, // 窗口句柄
UINT_PTR nIDEvent, // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器
UINT uElapse, // 时间间隔,单位为毫秒
TIMERPROC lpTimerFunc // 回调函数
);
回调函数:
void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime);

这个程序用热血江湖V20010进行测试通过.实现自动吃药
以下是部分代码:
首先制作一个系统钩子,用它截获并处理送给游戏程序的消息(如键盘,鼠标消息等)。
具体可以参考http://dev.csdn.net/article/3/3912.shtm
再用MFC做个界面程序,将钩子和游戏程序关联起来
CHook m_hook;
HWND hWnd;
hWnd=::FindWindow(NULL,"YB_OnlineClient");//获得窗口句柄
m_hook.StartHook(hWnd);//加载钩子

BOOL CHook::StartHook(HWND hWnd)
{
SetTimer(NULL,0,1000,(TIMERPROC)TimerProc);
}
void CALLBACK TimerProc(HWND hwnd,UINT uMsg,UINT_PTR idEvent,DWORD dwTime)
{
DWORD hProcId;
GetWindowThreadProcessId(CY_hwnd,&hProcId); //获取进程ID
HANDLE ghd = OpenProcess(PROCESS_ALL_ACCESS,FALSE,hProcId); //访问进程
if(ghd)
{
DWORD dHP,dMP,bytes;
WORD d_red = 100; //HP底限
WORD buff;

dHP=0x045421A0 ; //血的内存地址(热血江湖V20010版)
//内存地址可以通过内存分析软件得出,如FPE2001

//读内存
BOOL ok = ReadProcessMemory(ghd , (void *)dHP , (void *)&buff , 2 , &bytes);//读内存血值到缓冲
if(ok)
{
if(buff_red < d_red) //判断内存HP是否小于底限
{
keybd_event( VK_F1 , MapVirtualKey(VK_F1,0) , 0 , 0); //按下键
Sleep( 100 ); //延迟
keybd_event( VK_F1 , MapVirtualKey(VK_F1,0) , KEYEVENTF_KEYUP , 0); //松开键
}
}
}
}
呵呵,程序基本结束,自动补蓝,自动群医连续技能和这大同小异。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: