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只狗,一只出去骚扰,攻击商店,防止对方科技蜘蛛骚扰我.二 ...
随机推荐
- CS5213设计HDMI转VGA带音频信号输出|CS5213方案|CS5213设计电路
CS5213是一款用于设计HDMI转VGA音视频信号转换器方案,CS5213设计HDMI转VGA转换器或者转接线产品特点: 将完整的HDMI信号转换为VGA输出支持数字信号到模似信号的转换支持 HDC ...
- 如何使用NiFi等构建IIoT系统
您认为构建一个先进的工业物联网原型需要多长时间: 从传感器收集数据到每个工厂的网关 将传感器数据从一个或多个工厂移至云或数据中心 自动热部署新配置到所有边缘设备 支持大规模数据量和端到端安全性 使用正 ...
- Hive安装Version2.1.0
Hive安装,基于版本2.1.0, 使用apache-hive-2.1.0-bin.tar.gz安装包. 1.安装规划 角色规划 IP/机器名 安装软件 运行进程 hive zdh-9 hive Ru ...
- 《手把手教你》系列技巧篇(五十四)-java+ selenium自动化测试-上传文件-中篇(详细教程)
1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等.所以宏哥打算按上传文件的分类对其进行一下讲解和分享. 2.为什么selenium没有提供 ...
- centos6.5-svn搭建文档
下载相关软件 wget http://subversion.tigris.org/downloads/subversion-1.6.6.tar.gz wget http://subversion.ti ...
- hisql 新一代无实体ORM使用第一步 hisql安装使用
安装 github hisql 最新源码下载 也可以通过nuget安装 注意:HiSql仅支持.net5或以上环境 选择您需要支持的数据库对应的支持包进行安装 本例使用sqlserver进行演示,请安 ...
- 初识python: 斐波拉契数(生成器获取)
使用 生成器(yield) 获取斐波拉契数. 代码如下: def fun(n): a,b,c = 0,0,1 while a < n: yield b # b, c = c, b + c 以下 ...
- scp 文件传输
1.推送 scp -r imageAPP/ root@ip:/data/soft/ 本地当前文件下的 imageAPP文件 推送到ip服务器 /data/soft/ 目录下 2.拉取 scp -r r ...
- NOSQL数据库之MongoDB
一.NoSQL概述 如今,大多数的计算机系统(包括服务器.PC.移动设备等)都会产生庞大的数据量.其实,早在2012年的时候,全世界每天产生的数据量就达到了2.5EB(艾字节,).这些数据有很大一部 ...
- echarts-gl初体验:使用echarts-gl实现3D地球
首先我们要下载引入echarts.js和echarts-gl.js 有需要的自己拿资源哈 链接:https://pan.baidu.com/s/1J7U79ey-2ZN4pjb7RTarjg 提取码: ...