War3之MH

MH的原理就是找到关键的内存地址,然后利用WriteProcessMemory进行修改,修改之前需要一下提高权限。

这里实现的功能就是魔兽对战类RPG可以大地图现形,游戏平台为1.24E,局域网可用,对战平台无法使用。

具体步骤如下:

得到窗口句柄;打开与进程相关的访问令牌;提高权限;获得窗口进程id;打开进程对象;修改进程内存。

依次对应的API:FindWindowA、OpenProcessToken、AdjustTokenPrivileges、GetWindowThreadProcessId、OpenProcess、WriteProcessMemory。功能只能实现了对战类RPG地图的MH,并且对战平台无法使用,代码参考了网上一些公开的资料,就贴出来了。

环境为:win8 32位 VS2010。

vista以上系统以标准用户启动的话,AdjustTokenPrivileges会调用失败,返回一个没有完全调整的错误代码,需要以管理员权限运行。

 1 int Ctest_MHDlg::MapHack(void)
 2 {
 3     BOOL ok=false;
 4     HWND hWar3=FindWindowA(NULL,"Warcraft III");
 5     if(hWar3!=NULL)
 6     {
 7         HANDLE hToken;
 8         ok=OpenProcessToken(::GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken);//用来打开与进程相关联的访问令牌
 9         if(ok)
10         {
11             ok=EnablePrivilege(hToken,SE_DEBUG_NAME);//提高特权
12             if(ok)
13             {
14                 DWORD pId;
15                 GetWindowThreadProcessId(hWar3,&pId);//获得窗口进程ID
16                 HANDLE hOpen=OpenProcess(PROCESS_ALL_ACCESS,0,pId);//打开进程对象
17                 if(hOpen!=NULL)
18                 {
19                     UpdateData();
20                     BYTE buf1[4]={0x66,0xB9,0x01,0x00};
21                     BYTE buf2[4]={0x66,0x8B,0x0C,0x41};
22                     ok=WriteProcessMemory(hOpen, LPVOID(0x6F3a20a3), &buf1, 4, &ss);//大地图显形
23                     DWORD d=GetLastError();
24                     WriteProcessMemory(hOpen, LPVOID(0x6F3a20a3), &buf2, 4, &ss);//关闭
25                 }
26             }
27         }
28     }
29     return 0;
30 }
31
32
33 bool Ctest_MHDlg::EnablePrivilege(HANDLE hToken, LPCTSTR szPrivName)
34 {
35     bool ok=false;
36     TOKEN_PRIVILEGES tp;
37     tp.PrivilegeCount = 1;
38     ok=LookupPrivilegeValue(NULL,szPrivName,&tp.Privileges[0].Luid);
39     tp.Privileges[0].Attributes =SE_PRIVILEGE_ENABLED;
40     ok=AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(tp), (PTOKEN_PRIVILEGES) NULL,(PDWORD) NULL);//调整令牌特权
41     DWORD ErrorCode=GetLastError();
42     if(ErrorCode==0)
43         return true;
44     else
45         return false;
46 }

至于在什么地方做什么修改,这个也是参考了网上的公开资料。http://blog.csdn.net/breeze356/article/details/4814685这位前辈的博客中有介绍,

当然他也实现了过平台的功能。

上面代码就是将mov di,[ecx+eax*2]修改为mov di,1及改回来。

时间: 2024-12-10 19:13:26

War3之MH的相关文章

war3 巨魔精灵 minimap

弃坑LOL后,无聊的时候玩玩 war3的RPG地图,巨魔与精灵.  玩了一段时间精灵....然后玩魔结果总是找不到人.所以就有了这个想法. 代码纯粹靠搬运. 说下原理,网上有份代码,可以查看当前选中目标的信息和单位地址,  根据观察发现每个地址相隔固定长度. 那么选中玩家列表里面最上面的单位, 然后再遍历 根据偏移不断++ -- 判断名称为u000 的单位就是精灵 H000 就是巨魔.  最后获取到单位坐标X,Y 然后换算窗口大小 算出点的位置. 最终绘制在自己的窗口上.  然后把窗口做成穿透和

war3 兵种出生位置研究

最近玩war3 各种被卡英雄 卡兵,  郁闷死了,  很多时候设置了集结点,可是英雄还是被卡~~~ 不知道有没有同道中人~~~ 举几个证据: 这两个都是明明设置了集结点在外面,还是被卡到里面去了的例子~~ 于是我终于忍不住研究了一下,下面我来描述下war3兵种集结点的逻辑 1.根据上图所示,有4个黄色的方块,分别在1点钟.4点钟.7点钟.10点钟位置,这4个位置是兵种的出生可能点, 也就是说,如果你的集结点设置在其他任意位置,系统都会在这4个位置中选择和它最近的位置出生. 2.如果黄色区域被卡住

MCMC(三)MCMC采样和M-H采样

MCMC(一)蒙特卡罗方法 MCMC(二)马尔科夫链 MCMC(三)MCMC采样和M-H采样 MCMC(四)Gibbs采样(待填坑) 在MCMC(二)马尔科夫链中我们讲到给定一个概率平稳分布$\pi$, 很难直接找到对应的马尔科夫链状态转移矩阵$P$.而只要解决这个问题,我们就可以找到一种通用的概率分布采样方法,进而用于蒙特卡罗模拟.本篇我们就讨论解决这个问题的办法:MCMC采样和它的易用版M-H采样. 1. 马尔科夫链的细致平稳条件 在解决从平稳分布$\pi$, 找到对应的马尔科夫链状态转移矩

如何修改魔兽争霸war3 分辨率

如何修改魔兽争霸war3 分辨率 有时候发现老电脑从XP系统升级到WIN7之后,发现玩魔兽不能全屏了(2边会有一些黑屏的).最后检查发现是魔兽在安装注册表之后显示的分辨率跟电脑的实际分辨率不同导致的. 一.使用工具 下载地址:https://files-cdn.cnblogs.com/files/aiwuxia/%E9%AD%94%E5%85%BD%E5%88%86%E8%BE%A8%E7%8E%87%E5%BF%AB%E9%80%9F%E8%AE%BE%E7%BD%AE.zip 二.修改注册表

深度学习(五):M-H采样

一.引入 M-H采样用来解决MCMC采样效率低的问题,主要是更改了MCMC中接受率的具体定义,但是这个方法不适用于高维. 二.细致平稳条件 从$\pi(i)Q_{ij}\alpha (ij)= \pi(j)Q_{ji}\alpha (ji)$出发(1)式 移项$\alpha (ij)=\alpha (ji)\frac{\pi(j)Q_{ji}}{\pi(i)Q_{ij}}$,(2)式 并且令$\alpha (ji)=1$, 令$\alpha (ij)=min\left \{ \frac{\pi(

War3模型导出

https://en.wikipedia.org/wiki/.MDX http://www.manew.com/thread-25148-1-1.html http://world-editor-tutorials.thehelper.net/filestools.php https://www.turbosquid.com/gmax

常用的各种标准下载网站(HB GB GJB MH)

标准分享网 http://www.bzfxw.com/ 标准下载网 http://www.bzxz.net/ 搜标准网 http://www.biaozhunw.com/Index.html

MCMC采样和M-H采样

其中 %matplotlib inline 的解释见  https://www.cnblogs.com/emanlee/p/12358088.html import random import math from scipy.stats import norm import matplotlib.pyplot as plt %matplotlib inline def norm_dist_prob(theta): y = norm.pdf(theta, loc=3, scale=2) retur

06 Theory of Generalization

若H的断点为k,即k个数据点不能被H给shatter,那么k+1个数据点也不能被H给shatter,即k+1也是H的断点. 如果给定的样本数N是大于等于k的,易得mH(N)<2N,且随着N的增大,小得越来越多. 当断点为k时,记最大可能的成长函数mH(N)为bound函数,记为B(N,k).------只和N.k有关 注意比较,发现bound函数比起成长函数消除了H. 如果无断点,自然没有B(N,k)什么事: 如果断点为k, 那么mH(N)是给定H下,可能的最大假设类数: B(N,k)是不限H下