天外来客 发表于 2011-11-8 08:32:09

[tc]魔兽3 内存修改器 v7

软件大小: 539KB
更新时间: 2011-11-7
软件语言: 中文
软件介绍
http://www.cr173.com/up/2011-11/2011117233339.jpg

魔兽3 内存修改器 v7 程序员手册
天驰 2008.11.5

一、从选中单位的列表获得单位ESI
0、也可以利用".?AUCUnitListNode@@",以下没有用这个方法
1、,参考sub_6F416AE0
2、[上面+58+4*a2],参考6f3a0564
其中a2=word ptr[上面+28],参考6F042B76
3、[上面+34]记为链表基地址,参考6f2cc0a8
这个地址还有一种获得方法,用.\CPlayerWar3.cpp所在的段+90,我不知道是否准确
4、这个基地址的结构:
[基地址+1F0]:表头
[基地址+1F4]:表尾
[基地址+1F8]:表长度
参考sub_6F415B70: 6f415b95 mov eax,
5、展开当前地址(假设一开始等于表头)。
即[表头],其结构为:
[节点+0]:下一个节点
[节点+4]:not 下一个节点(二者为not关系,不知道为什么要这样)
[节点+8]:单位ESI
参考:6F412504 mov eax, (eax为节点位置)
参考:6f412518 mov edi, (edi为选中的单位,梦寐以求的单位ESI)

二、重要说明
1、ESI的使用
● ESI记为ThisUnit
● 记为UnitAttributes
● 记为HeroAttributes
例: = 07B60424
= 05AA0094

2、重要的内存提取算法
算法0(6F03F180):从GameMemory取得数据,需要索引号Index1和一个参考数ReferenceNumber1。注意Index1最高位不得为1,不然不是这个算法。建议判一下正负。
(1)记为ThisGame
例: = 02AE00B8
(2)计为ThisGameMemory
例: = 0F060088
(3)计为Address1,返回之
(4)应当等于ReferenceNumber1,不相等游戏会异常(访问地址0),所以做修改器不用考虑这里

算法1(6F4634E0):也需要Index1
(1)用算法0
(2)Address1 + 0x78输出为地址

算法2(6F468A20):也需要Index1
(1),记为Address3
(2)为零的前提下返回的内容

三、单位的修改
1、HP float


2、HPMax float
(1)ThisUnit + 98 // 参考sub_6F28A760
例:08220320 + 98
(2)[上面 + 8] // 参考sub_6F467710
例: = 06BC
(3)用算法0解开上面
例:093E0AFC
(4)解开后内容在[上面 + 84] // 参考6F46752F: fcompp, EDX

3、MP float


4、MPMax float
(1)ThisUnit + 98 // 参考sub_6F28A760
例:08220320 + 98
(2)[上面 + 28] // 参考sub_6F467750
例:[^+28] = 06BD
(3)用算法0解开上面
(4)解开后内容在[上面 + 84] // 参考sub_6F467750

5、经验值: int
源代码:6F26DFF0
即:getHeroExp()

6、力量初值: int
源代码:3F353D06
即:int __thiscall DrawHeroProperty(int *GameContext, int **HeroAttributes, int *AttributeBias, unsigned int *GBuffer)

7、敏捷初值: int
源代码:同上

8、智力初值:int
源代码:6F0DA9D0
即:int __fastcall getHeroIntellect_NotSure(int pAttribute1)
记为Index1
记为ReferenceNumber1
用算法1得到地址

9、攻击频率: float
源代码:6F0C64E0
即:int __thiscall getHeroROF_NotSure(int *this, int a2, int a3, int a4)

10-13、攻击相关:int
参考(攻击频率/UnitAttributes) 0 1B0
攻击 - 基础 -110 A0
攻击 - 倍乘 -11C 94
攻击 - 骰子 -128 88
攻击 - 种类 -BC F4

14、移动速度:[参数 + 70h] float 单位的移动,或者[参数 + 78h] float 当前的移动速度
源代码:6F201190
即:void __thiscall sub_6F201190(int this, int a2, int a3)

参数的获得:sub_6F077550:从6F077693开始
参考1:6f2011a1: mov eax, ecx=07c50094
< sub_6F201190(a1+0x70)
< 6F077758(arg0 = 0012F874)
参考2:断点下在6F0776F6
> 记为MoveAbilityIndex
例:06CE
算法2(^)=07e23cd4记为I
例:=6F8BDBCC

Index依次等于:(This+1D8=)6CE 6CD 6C6、 6C5 6C4
对应算法2结果: 07E23CD4、05AA0094、05A90094、07B50424、07B50448、07C50094
Next :

while & != -1
{
if [ + 2D4] == 6F201190(如果是6F052080,这个是空的)
{
为移动速度,或者用
exit
}

I = 算法2() = 05AA0094、05A90094、...、07C50094
}

> 如果[+2D4] != 6F201190则
{
> [^ + 24]作为Index
06CD
> 解index
=084BEEC4
[^+54]= 05aa0094
}

15、防御: float
源代码:6F353250
6F3532A2: mov eax, dword ptr
即:void __thiscall sub_6F353250(int this, int a2, int a3, int a4)

16、防御类型: int

17、坐标X:
,参考:6F2776C4
[上面+8]作为index,[上面+C]作为Refrence,用算法0,参考:6F464685
[上面+78],参考:6F38A52C
[上面]为坐标X,参考:6f6de775

18、[坐标Y] = [坐标X的地址 + 4]

四、金钱的修改
参考:6F407220,看最后一段
即:signed int __thiscall sub_6F407220(int this, signed int a2, unsigned int a3, int a4, int a5, int a6)

1、上16位
(1)计为Address2
(2)Address2上16位,下16位见下一款

2、下16位
1P 0190
2P 1410
3P 26a0
4P 3920
5P 4bb0
6P 5e30
7P 70c0
8P 8350
9P 95d0
10P a860

3、对每个玩家
金钱 0 int x10
木头 + 80 int x10
最大人口 +180 int
当前人口 +200 int


迅雷下载:魔兽3 内存修改器 v7
本地下载:魔兽3 内存修改器 v7
页: [1]
查看完整版本: [tc]魔兽3 内存修改器 v7