war3 Game
转载请注明来源:https://www.cnblogs.com/hookjc/
//位置结构。x,y不多说,unknown是3F800000。浮点数1.0??
struct Pos
{
DWORD x,y,unknow;
}; //由于但是是写成shellcode的,所以封装了函数 //storm.dll的地址
DWORD _declspec(noinline) GetStromAddr()
{
return 0x15000000;
}
//game.dll的地址
DWORD _declspec(noinline)GetGameAddr()
{
return 0x6f000000;
} //只要在某些地方HOOK,调用这个函数就可以小地图上画出英雄单位
void AllDraw()
{
DWORD HeroPoint,HeroNext;
HeroPoint=GetHeroAddrPFunc();//获取英雄单位链表。(我称他为链表~~:p:)
if (HeroPoint==0)
{
return ;
}
HeroNext=*(DWORD*)HeroPoint;//取出第一个单位的地址
while (HeroNext!=0)
{ BYTE Dead=0;
Dead=*(BYTE*)(HeroNext+0x20);//死了自然不用画
if(Dead==0x46)
{
//没死就画
MainDraw(HeroNext);
} HeroPoint+=0x18;//链表自增
HeroNext=*(DWORD*)HeroPoint;//取出下一个单位地址。直到为0表示没有了
}
} //大地图坐标转小地图坐标的call 本来是有参数的。这里naked就不写了
void _declspec(naked) FloatCall()
{
_asm
{
push ebp
mov ebp,esp
pushad
pushfd
mov edx,[ebp+0xc]
mov ecx,[ebp+0x10]
push DWORD PTR SS:[ebp+8]
push eax
PUSH ESI
MOV ESI,DWORD PTR SS:[ESP+0x8]
FLD DWORD PTR DS:[ESI+0xC]
MOV EAX,ECX
FMUL DWORD PTR DS:[EDX+4]
FLD DWORD PTR DS:[EDX]
FMUL DWORD PTR DS:[ESI]
FADDP ST(1),ST
FLD DWORD PTR DS:[ESI+0x18]
FMUL DWORD PTR DS:[EDX+0x8]
FADDP ST(1),ST
FSTP DWORD PTR DS:[EAX]
FLD DWORD PTR DS:[ESI+0x4]
FMUL DWORD PTR DS:[EDX]
FLD DWORD PTR DS:[ESI+0x10]
FMUL DWORD PTR DS:[EDX+4]
FADDP ST(1),ST
FLD DWORD PTR DS:[ESI+0x1C]
FMUL DWORD PTR DS:[EDX+8]
FADDP ST(1),ST
FSTP DWORD PTR DS:[EAX+4]
FLD DWORD PTR DS:[ESI+8]
FMUL DWORD PTR DS:[EDX]
FLD DWORD PTR DS:[ESI+0x14]
FMUL DWORD PTR DS:[EDX+4]
FADDP ST(1),ST
FLD DWORD PTR DS:[ESI+0x20]
POP ESI
FMUL DWORD PTR DS:[EDX+8]
FADDP ST(1),ST
FSTP DWORD PTR DS:[EAX+8]
pop eax
add esp,4
popfd
popad
mov esp,ebp
pop ebp
retn
}
}; //这个确实不记得了
DWORD GetHeroLC(DWORD HeroAddr)
{
return *(DWORD*)(HeroAddr+0x58);
} //获取坐标地址。填充需要的结构
void GetHeroLocData(DWORD HeroAddr,Pos * p)
{ p->x=*(DWORD*)(HeroAddr+0x284);
p->y=*(DWORD*)(HeroAddr+0x288);
p->unknow=0x3f800000;//浮点1.0
} void MainDraw(DWORD HeroAddr)
{
Pos pReal;
Pos pChange;
DWORD lc=GetHeroLC(HeroAddr); //获取大地图坐标
GetHeroLocData(HeroAddr,&pReal); DWORD Gaddr=GetGameAddr(); //把大地图 转到 小地图结构
DWORD MiniVal=*(DWORD*)(Gaddr+0xACD06C);
LPVOID p1=&pChange;
LPVOID p2=&pReal;
DWORD p3=MiniVal+0x750;
_asm mov esp,esp
_asm
{
pushad
push p1
push p2
push p3
call FloatCall
add esp,0xc
popad
} /*这里记得了,上面的GetHeroLC是用于计算玩家楼层。有一个标记。
所有的英雄单位还有一个数组,1表示要画图,0表示不要画图。*/ //想起来了,LC=楼层。 //FloatCall(MiniVal+0x750,&pReal,&pChange);
DWORD StartAddr=*(DWORD*)(MiniVal+0x2e4); //StartAddr就是这个数组的地址 DWORD TempCount=*(DWORD*)(StartAddr+lc*4);
if (TempCount!=0)//如果数组里面显示要画了,那我们没必要多此一举
{
return ;
} DWORD Judge=*(DWORD*)(MiniVal+0x2f0);
Judge=*(DWORD*)(lc*4+Judge);
if (Judge==0)//这里还有个判断,不记得是干嘛的了。
{
return ;
} //把数组里面的值标记为1,表示要画出来
*(DWORD*)(StartAddr+lc*4)=TempCount+1; //把这个结构放到一个位置,让魔兽画出来。
lc=lc<<4;
DWORD CopyAddr=*(DWORD*)(lc+MiniVal+0x2fc);
DWORD Offset=TempCount*3;
CopyAddr+=Offset*4;
((Pos*)CopyAddr)->x=pChange.x;
((Pos*)CopyAddr)->y=pChange.y;
((Pos*)CopyAddr)->unknow=pChange.unknow;
} //获取英雄表头
DWORD GetHeroAddrPFunc()
{
DWORD HeroAddrPoint=0;
DWORD Addr=0x55514+GetStromAddr();
memcpy(&HeroAddrPoint,(LPCVOID)(Addr),4); if(*(DWORD*)(HeroAddrPoint+0x88)!=0x18)
return 0; HeroAddrPoint=HeroAddrPoint+0x98;
//特别注意,这里返回值可能为0;
return HeroAddrPoint;
}
暂存:
原地址:http://www.ipahoo.com/2014/software_0807/1487.html
来源:python脚本自动迁移
war3 Game的更多相关文章
- C# war3 巨魔精灵 minimap
弃坑LOL后,无聊的时候玩玩 war3的RPG地图,巨魔与精灵. 玩了一段时间精灵....然后玩魔结果总是找不到人.所以就有了这个想法. 代码纯粹靠搬运. 说下原理,网上有份代码,可以查看当前选中目 ...
- 【原创】C# war3 巨魔精灵 minimap
弃坑LOL后,无聊的时候玩玩 war3的RPG地图,巨魔与精灵. 玩了一段时间精灵....然后玩魔结果总是找不到人.所以就有了这个想法. 代码纯粹靠搬运. 说下原理,网上有份代码,可以查看当前选中目 ...
- War3编辑器
[War3编辑器] 1.英雄在商店买东西叫“任意单位 出售物品”,英雄卖东西给商店叫“抵押物品”. 2.触发器中的一级窗口包含: 1)设置事件窗口. 2)设置条件窗口. 3)设置动作窗口. 3.二级设 ...
- 如何修改魔兽争霸war3分辨率
如何修改魔兽争霸war3 分辨率 有时候发现老电脑从XP系统升级到WIN7之后,发现玩魔兽不能全屏了(2边会有一些黑屏的).最后检查发现是魔兽在安装注册表之后显示的分辨率跟电脑的实际分辨率不同导致的. ...
- 魔兽争霸war3心得体会(一):UD的冰甲蜘蛛流
玩war3好几年了,之前都是打打电脑,随便玩玩的.刚刚在浩方等平台上和人玩的时候,各种被虐,很难赢一局.从去年开始,才认真玩.思考下各种战术. 最初,使用的是兽族orc,后来觉得兽族不够厉害,玩到对战 ...
- 魔兽争霸war3心得体会(二):狗转蜘蛛,DK光环+游侠二发
最近几周,勤奋地在QQ对战平台上,练习war3对战. 10年玩到14年初, 也玩了很多,主要是抱着"随便玩玩"的心态,结果也很显然,可以轻松打赢中等电脑,以及AI不够高的发狂的Hu ...
- 对战平台虚拟War3局域网的原理对战平台虚拟War3局域网的原理
转载请注明来源:https://www.cnblogs.com/hookjc/ 以War3为例,启动魔兽后,首先是如何看见主机的问题:魔兽是通过TCP/UDP协议进行数据发送的,那如何实现看到对方?我 ...
- 关于hook d3d在war3上绘图的几点疑问
学到了. 你得记住,com接口全是stdcall调用方式,不是thiscall,不要搞错了,不信,你看接口定义 因为com调用得兼容c调用,而c没有thiscall调用方式stdcall时,this指 ...
- 魔兽争霸war3心得体会(四):不死族vs人族1本火魔塔
QQ对战平台上玩随机的人特别多,为了应对对方的"出其不意",我最近一直用小狗去探路,小狗在家采集30个木头-摆放商店,就可以去探路了.主要有几个好处:知道对方的种族-出生点位-开局 ...
- 魔兽争霸war3心得体会(三):UD内战
最近,经常匹配到UD内战.有输有赢,有的时候,自己双矿经济,人口优势巨大,却很遗憾地输掉比赛. 本文,简要分析下 对战过程. 前期狗流开局, 5只狗,一只出去骚扰,攻击商店,防止对方科技蜘蛛骚扰我.二 ...
随机推荐
- 编写Java程序,在子类老虎中重写父类动物的吃食方法
返回本章节 返回作业目录 需求说明: 在子类老虎中重写父类动物的吃食方法 实现思路: 在子类老虎中重写父类动物的吃食方法的实现思路如下: 创建各种动物的父类Animal类,在该类中定义eat()方法. ...
- 【跨域】SpringBoot跨域,拦截器中,第一次获取的请求头为NULL,发送两次请求的处理方式
背景: 在做前后端分离时,牵扯到跨域,但是已经设置了跨域 前端设置了允许携带Cookie axios.defaults.withCredentials = true; 后端也配置了跨域 浏览器端查看发 ...
- Clover支持目录多标签页
1.简介 Clover是Windows Explorer资源管理器的一个扩展, 为其增加类似谷歌 Chrome 浏览器的多标签页功能. 2.推荐用法 下面是我使用的Clover的截图: 可以看到同时打 ...
- MongoDB 变更流(Change Stream)介绍
1. 什么是Change Stream Change Stream 是MongoDB用于实现变更追踪的解决方案,类似于关系数据库的触发器,但原理不完全相同: | | Change Stream | 触 ...
- Selenium_获取浏览器名称和版本(5)
from selenium import webdriver driver = webdriver.Chrome() driver.maximize_window() driver.get(" ...
- 第10组 Alpha冲刺 (4/6)(组长)
1.1基本情况 ·队名:今晚不睡觉 ·组长博客:https://www.cnblogs.com/cpandbb/p/13982696.html ·作业博客:https://edu.cnblogs.co ...
- Centos安装与配置
一.安装 默认安装 二.配置 配置网卡 BOOTPROTO=none ONBOOT=yes IPADDR=xxx.xxx.x.xx PREFIX=24 GATEWAY=xxx.xxx.x.x DNS1 ...
- 如何向内核提交补丁?——FirstKernelPatch
参考 https://kernelnewbies.org/FirstKernelPatch
- v4l2数据获取流程
V4L2数据获取流程 整个过程相关的数据结构有如下几个: struct v4l2_capability m_cap; /* 驱动能力 */ struct v4l2_format m_fmt; /* 数 ...
- Vulnhub系列:Os-hackNos
0x01环境搭建 靶机链接: https://www.vulnhub.com/entry/hacknos-os-hacknos,401/发布日期: 2019.11.27靶机描述: 描述 难度:容易中级 ...