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只狗,一只出去骚扰,攻击商店,防止对方科技蜘蛛骚扰我.二 ...
随机推荐
- Linux磁盘分区与挂载
原理介绍 在Linux世界中,一切皆目录,每一块硬盘分区对应Linux的一个目录,所以我们可以通过管理目录来管理硬盘分区,而将硬盘分区与文件目录关联的操作就成为"挂载"[mount ...
- HTML网页设计基础笔记 • 【第1章 HTML5基础】
全部章节 >>>> 本章目录 1.1 HTML介绍及开发工具 1.1.1 HTML 的基本概念 1.1.2 网页 1.1.3 Web 标准 1.1.4 HTML5 与移动互 ...
- 【MySQL作业】分组查询 group by 子句——美和易思分组查询应用习题
点击打开所使用到的数据库>>> 1.按照商品类型分组统计商品数量和平均单价,并按平均单价升序显示. -- 按照商品类型分组统计商品数量和平均单价,并按平均单价升序显示: select ...
- Log4j2进阶使用(Pattern Layout详细设置)
1.进阶说明 通过配置Layout打印格式化的日志, Log4j2支持很多的Layouts: CSV GELF HTML JSON Pattern Serialized Syslog XML YAML ...
- Centos下查看cpu核数
1.概念物理CPU:实际Server中插槽上的CPU个数.物理cpu数量:可以数不重复的 physical id 有几个. 2.逻辑CPULinux用户对 /proc/cpuinfo 这个文件肯定不陌 ...
- Python_getattr+__import__ 实现动态加载模块、类对象或函数
__import__() 语法 __import__(name[, globals[, locals[, fromlist[, level]]]]) 参数 name -- 字符串,模块的导入路径 说明 ...
- VMware 创建的虚拟机,Xshell无法进行连接
使用场景: 在VMware 创建了Centos7后,Xshell一直连接不上,如果排查以下问题还是不行.就可以用这种方法了 1.配置了静态地址 2.VMware配置了NAT映射,划分了网段后 3.检查 ...
- Spark-2.0.2源码编译
注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6813925210731840013/ Spark官网下载地址: http://spark.apache.org/d ...
- Source Insight 4安装图文教程(附链接)
Source Insight 4安装图文教程,附激活文件直链 下载链接:http://naturalporters.vicp.io/uploads/si4_kgen_unis.zip 直链没了,就用下 ...
- MySQL提权之mof提权
mof提权原理 关于 mof 提权的原理其实很简单,就是利用了 c:/windows/system32/wbem/mof/ 目录下的 nullevt.mof 文件,每分钟都会在一个特定的时间去执行一次 ...