诛仙之老婆不挂

女朋友玩诛仙游戏,老是不注意看血,给她买了大红,每天总要挂那么几次。于是DIY了个程序,专门监视血量,自动补血。

考虑一共要用到
1、找到游戏窗体;
2、读取内存;
3、键盘消息

这些.NET实现起来没VC++方便,所以用VC++开发了。不过一直搞ASP.NET开发,对VC不是很在行,开发起来还是很费力气的。

首先,用CE搞出了诛仙血量的一级基址(008F77D4,注:2007年6月16号), 偏移量 28 和 254。

然后要定时检测。在OnOK() 事件写入
  KillTimer(1);    
  SetTimer(
1,500,NULL);
  UpdateData(FALSE);
意思是如果重复点击了按钮事件,先去除计时器,然后再设置。时间间隔半秒。
接下来注册OnTimer事件
 1 void CMyDlg::OnTimer(UINT nIDEvent) 
 2 {
 3     // TODO: Add your message handler code here and/or call default
 4     
 5     int value = GetValue();
 6     if(value == -2)
 7     {
 8         KillTimer(1);
 9         AfxMessageBox("请先运行游戏!");
10         return;
11     }
12     if(value < 350)
13     {
14       INPUT input[2];
15       input[0].type = input[1].type =  INPUT_KEYBOARD; 
16       input[0].ki.wVk = input[1].ki.wVk = VK_F7;       
17       input[0].ki.dwFlags = 0;
18       input[1].ki.dwFlags = KEYEVENTF_KEYUP;  
19       Sleep(2000);
20       BYTE b = SendInput(2, input, sizeof(INPUT));
21     }
22 }
直接锁定了血量要大于350,否则发送F7按键。使用到INPUT结构,不能不引用#include   <winable.h>了。
这里用到的GetValue();函数是取内存血量的
 1 int CMyDlg::GetValue()
 2 {
 3   DWORD pid;
 4   hWnd=::FindWindow(NULL,TEXT("Element Client"));
 5   if(!hWnd)
 6   {
 7        return -2;
 8   }
 9   GetWindowThreadProcessId(hWnd,&pid);
10   HANDLE hProcess=::OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);
11 
12   LPVOID lpBaseAddress=(LPVOID)0x8F77D4;
13   DWORD dwValue;
14   
15   DWORD dwValue3;
16   
17   DWORD dwValue5;
18 
19   
20   if(!::ReadProcessMemory(hProcess,lpBaseAddress,&dwValue,sizeof(DWORD),0)) return -1;
21   LPVOID dwValue2=(LPVOID)(dwValue+40);
22   
23   if(!::ReadProcessMemory(hProcess,dwValue2,&dwValue3,sizeof(DWORD),0)) return -1;
24   LPVOID dwValue4=(LPVOID)(dwValue3+596);
25 
26   if(!::ReadProcessMemory(hProcess,dwValue4,&dwValue5,sizeof(DWORD),0)) return -1;
27   
28   return (int)dwValue5;
29 }
用FindWindow(NULL,TEXT("Element Client"));获得诛仙的句柄,加入获取不到返回-2,这也就是为什么OnTimer中得到-2会提示要启动游戏了。用到了基址0x8F77D4,偏移量要转换成10进制用来加减,28 = 40,254 = 596;
OK,这就读取到内存中诛仙的血量了。

OK,这样就搞定了,量身定制的不死外挂,除非被秒,哈哈。

2007年6月16日
posted @ 2007-06-16 05:00  Birdshover  阅读(1076)  评论(3编辑  收藏  举报