注册 | 登录

游侠NETSHOW论坛





查看: 25093|回复: 66
打印 上一主题 下一主题

[原创] P4内存修改篇(舰队、船只、提督、货物、造船订单 etc.) [复制链接]

帖子
267
精华
0
积分
204
金钱
1465
荣誉
7
人气
1
评议
0
跳转到指定楼层
楼主
发表于 2010-9-20 22:19:55 |只看该作者 |倒序浏览
首先,注意几乎所有数据都有2份,修改时要两边改了才行。
其次,感兴趣的地址段每次Load游戏都是动态分配的,而P4假死无响应崩溃的可能性比较高,可以说修改的人力成本相当高。
如果你是铁杆改派的话推荐使用CE,可以扫描指针得到对一次游戏人生固定的指针地址(新开游戏多半又变了),免得每次Load都得重新搜索一次。
最后,这篇文章的内容主要是简单陈述内存数据的存储方式,不会有很详细的修改过程的讲解。相信明白数据的排列方式后,怎么修改应该已经不是问题才对。

第一次修改的时候搜索金钱变化,最后会有2个结果,偏移-3C字节处就是玩家人物段的起始地址。记下这2个地址,以用于定位舰队、船只、提督等数据。

人物地址段:

+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
C4449F006C00??00????????$10000
$2$3$4
#
$5

$1: 2字节,具有唯一性,猜测是ID,每次新开游戏时随机决定并且保持不变,记下这个ID。
第一行这16字节(结合ID)可以作为特征字串用于搜索定位。比如某次游戏玩家人物ID为 65 07,可以在内存修改工具中搜索字节数组
C4 44 9F 00 6C 00 ?? 00 ?? ?? ?? ?? 65 07 00 00
来准确定位,以后不再需要反复搜索金钱变化。还可以通过搜索字节数组
C4 44 9F 00 6C 00 ?? 00 ?? ?? ?? ?? ?? ?? 00 00
定位所有AI商人,来查看/修改他们的舰队/现金。
$2: 4字节,指向舰队指针数组的指针
$3: 4字节,舰队总数
$4: 4字节,当前分配的舰队指针数组的大小
对指针和内存分配有一定理解的通过修改$2 $3 $4可以把AI商人的舰队据为己有,还没有学习这些知识的同学请不要动这3个数据,一个不慎就是游戏崩溃的结局,莫谓言之不预也。
$5: 4字节,流动资金。要怎么处理悉听尊便啦
注:填充 # 处无特殊意义,只是为了避免表格被缩减掉1行

读取$2舰队指针数组中的地址定位舰队

[ 本帖最后由 ajun0251 于 2010-9-20 22:27 编辑 ]
已有 1 人评分金钱 荣誉 收起 理由
小小旅行家 + 40 + 3 + 4 原创内容,值得鼓励!

总评分: 金钱 + 40  荣誉 + 3  + 4   查看全部评分

使用道具 举报

帖子
267
精华
0
积分
204
金钱
1465
荣誉
7
人气
1
评议
0
沙发
发表于 2010-9-20 22:20:25 |只看该作者
舰队:
+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
BC439F00AC00??00????????$10000
$2$3$4$5
$6$7$8
#

$1: 2字节,ID,同上
$2: 4字节,指向属主(人物地址)
$3: 4字节,指向位置(城市地址)。因为是城市地址而不是ID,修改太麻烦,不做个全面的修改器出来的话没法像P3那样随心所欲的瞬移了。
$4: 4字节,指向提督
$5: 4字节,指向舰队中船只的指针数组
$6: 4字节,舰队中船只数量
$7: 4字节,已分配的船只指针数组的大小
$8: 4字节,指向船舱地址(货物)

读取舰队字段的指针可以定位人物、提督、船只、船舱等地址

[ 本帖最后由 ajun0251 于 2010-9-20 22:47 编辑 ]

使用道具 举报

帖子
267
精华
0
积分
204
金钱
1465
荣誉
7
人气
1
评议
0
板凳
发表于 2010-9-20 22:21:11 |只看该作者
提督:
+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
74B29D003C00??00????????$10000
$2$3
$4$5$6
$7

$1: 2字节,ID,同上
$2: 4字节,指向所属舰队
$3: 4字节,指向属主(人物地址)
$4: 4字节,经验值 battle
$5: 4字节,经验值 navigation
$6: 4字节,经验值 trade
$7: 4字节,经验值 repairs

读取提督字段的指针可以定位人物、舰队等地址


提督4围技能的修改:
刚创建舰队生成的提督,显示的初始值和实际存储的数值参照:
0: 00 00 00 00        1: 00 00 80 3F
2: 00 00 00 40        3: 00 00 40 40
4: 00 00 80 40        5: 00 00 A0 40
到5满级封顶时,会固定为 00 00 A0 40 不再增加
如果还没到5,比如导航1的提督出海航行,每航行1天获得一定数量的导航经验,等到从 00 00 80 3F 累积满 00 00 00 40 则导航技能升级为2。
另外要注意的是直接修改这里的数值不能真正起作用,比如把导航从0直接修改为5,出海航行舰队速度还是按0计算。
注意到提督的2组数据中,一组在得到任何经验的时候都会更新,而另一组只有在升级的时候才会更新。
把前一组经验值填充为 00 00 A0 40 FA FF 9F 40 00 00 A0 40 00 00 A0 40,然后出海航行,过一会获得经验——通常是航行一天,如果是新提督则刚出海就有经验拿——就会得到4围全5的提督了。

[ 本帖最后由 ajun0251 于 2010-9-20 22:46 编辑 ]

使用道具 举报

帖子
267
精华
0
积分
204
金钱
1465
荣誉
7
人气
1
评议
0
地板
发表于 2010-9-20 22:21:42 |只看该作者
船只:
+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
CC439F004000??00????????$10000
$2$3$4
$5????$6$7
????????$8$9$A$B$C$D$E

$1: 2字节,ID,同上,可用于搜索定位所有船只
$2: 4字节,指向属主(人物地址)
$3: 4字节,指向所属舰队地址
$4: 2字节,速度 修改这个数据能影响大地图舰队速度,不影响海战船只速度。
$5: 2字节,船舱容量
$6: 4字节,Hp =显示数值*1000
$7: 4字节,Hp MAX =显示数值*1000
$8: 4字节,水手数量 =显示数值*1000
$9: 2字节,水手数量MAX
$A: 1字节,船只类型(见附图)
$B: 1字节,武装等级( upgrade level ) 0-2,研究的3种船只不能升级武装只能为0
$C: 1字节,大炮数量 海战时发射的炮弹数量跟船只模型有关,改这里的数值只影响显示不影响实际战斗力,所以不要修改了。
$D: 1字节,吃水深度 00表示大型船只,02表示可以进内河。有兴趣的话可以改这里让 Hulk 和 Caravel 进河港,彻底抛弃 Crayer & River cog
$E: 1字节,Warship 标识

读取船只字段的指针可以定位人物、舰队等地址

[ 本帖最后由 ajun0251 于 2010-9-20 23:16 编辑 ]
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

使用道具 举报

帖子
267
精华
0
积分
204
金钱
1465
荣誉
7
人气
1
评议
0
5#
发表于 2010-9-20 22:21:58 |只看该作者
舰队船舱:
+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
EC439F00C000??00????????$10000
$2$3$4$
$$$$
$$$$
$$$$
$$$$
$$$5$
$$$$
$$$$
$$$$
$$$$
$$$6

$1: 2字节,ID,同上。提督->舰队->船舱,ID依次加1
$2: 4字节,舰队最大载重量
$3: 4字节,当前货物重量
$4: 4字节/商品,20种商品的数量,总共80字节。顺序跟交易界面显示的相同,没有装载的置0。
$5: 4字节/商品,浮点数,每种商品的买入价格
$6: 4字节,舰队面板显示的载重量

[ 本帖最后由 ajun0251 于 2010-9-20 23:29 编辑 ]

使用道具 举报

帖子
267
精华
0
积分
204
金钱
1465
荣誉
7
人气
1
评议
0
6#
发表于 2010-9-20 22:22:26 |只看该作者
造船厂(造船订单):
+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
B4449F006000????????????$10000
$2
$3$4$5$6

$1: 2字节,ID
$2: 4字节,指向所属城市地质
$3: 4字节,指向订单指针数组
$4: 4字节,订单数量 可以通过增减造船订单搜索数量变化定位本地址段
$5: 4字节,已分配的订单指针数组大小
$6: 4字节,第一艘船的下水时间
游戏时间表示类似 time_t 格式,不过不是3600*24s/天,而是256s/天。于是最低字节走完0x00-0xFF过一天,其它3字节代表从公元0年1月1日到当前日期的总天数。
修改这个数值可以让船只提前下水,不过好像每个造船厂最多1天1艘,与之相关的限制时间还没有发现存储位置。

读取指向订单的指针获得具体每个订单的地址。

[ 本帖最后由 ajun0251 于 2010-9-24 21:29 编辑 ]

使用道具 举报

帖子
267
精华
0
积分
204
金钱
1465
荣誉
7
人气
1
评议
0
7#
发表于 2010-9-20 22:22:49 |只看该作者
造船订单(船只):
+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
$1$2????????$3??????

$1: 4字节,指向属主(人物地址)
$2: 4字节,下水时间 修改时注意第一张订单的下水时间应该等于船厂地址段的下水时间
$3: 1字节,船只类型 0-6总共7种,见前面附图

把AI商人的订单据为己有,不用研究造Caravel,花Snaikka的钱造Caravel,天天都有船只下水……想想还真是YD啊,嘿嘿

写累了,总结什么的就说一句:对改派来说研究游戏数据和游戏本身是同等价值的乐趣,赞成的请举手~

[ 本帖最后由 ajun0251 于 2010-9-21 00:13 编辑 ]

使用道具 举报

帖子
425
精华
0
积分
213
金钱
1225
荣誉
0
人气
3
评议
0
8#
发表于 2010-9-20 23:32:51 |只看该作者
占完了吧??都不敢回帖....钱,提督什么的不想改,改了就没意思了,本希望能改出个超强CARAVEL或HULK,看来是没戏了,伤心`````现在就想知道.fuk这类文件怎么解压出来,然后修改港口特产,打造超级贸易圈`````

使用道具 举报

Fashion&man@(*$)%萌
游侠元老版主
游侠剑阁工作组【评测】
海魂☆飞翔的荷兰人
★★★★★★★

元老版主勋章版主勋章资深版主勋章大头像勋章

帖子
7126
精华
6
积分
6080
金钱
46712
荣誉
130
人气
172
评议
5

9#
发表于 2010-9-21 15:10:20 |只看该作者
好帖要支持 !

使用道具 举报

帖子
368
精华
0
积分
184
金钱
1302
荣誉
0
人气
0
评议
0
10#
发表于 2010-9-21 19:26:16 |只看该作者
的确是好贴,可惜我看不懂~~~~

使用道具 举报

帖子
562
精华
0
积分
331
金钱
2870
荣誉
5
人气
1
评议
0
11#
发表于 2010-9-21 21:04:47 |只看该作者
希望楼主能解释一下。。。。。。不知所云。。。。。
2010.8.15-------------------2012.6.8
The Age of NO Game.

使用道具 举报

帖子
267
精华
0
积分
204
金钱
1465
荣誉
7
人气
1
评议
0
12#
发表于 2010-9-21 23:25:27 |只看该作者
本来只是想介绍下内存数据的存储方式,针对的是有编程基础或者内存修改的老手,现在稍微举例说明下修改的方法。

以往见到的内存修改文,通常是贴GM或者金山游侠或者FPE的截图,图片上会有描红画蓝,说明这块数据是船体耐久或者是水手数量等。我这里主体还是一样的东东,只是没有截图而是用表格代替,跟内存修改工具显示的一样是每行16格。最大的区别是大量使用了指针跳转来定位,人物->舰队、舰队->船只、舰队->货物、舰队->提督,搜索一次获得人物地址后就可以通过读取指针定位上述所有内容。以往熟悉的工具GM、金山、FPE都不能体现这些指针的好处,推荐使用Cheat Engine来配合修改。

比如说我要修改我的所有船只,如果使用FPE来修改,我可以搜索字节数组 CC 43 9F 00 40 00 ?? 00 ?? ?? ?? ?? ?? ?? 00 00 获得全部的船只地址,但是游戏一开始就有数百艘船只,怎么在这中间找出自己的船是个问题。为了缩小范围可以搜索 8C 00 ?? ?? ?? ?? ?? ?? F8 24 01 00 ?? ?? ?? ?? ?? ?? ?? 00 46 00 01 02 0E 得到所有的2级Crayer,大概有五六十个结果,还需要通过比如招募/解雇水手最后得到2个结果,终于搞定一艘船。问题是如果想要修改数十上百艘船只这样的方法需要反反复复搜索,费时费力相信谁的不想这么干。

如果换成用指针定位就完全不同了。以某次游戏为例,人物地址是041C87A0,那么第一舰队第二艘船的地址就是:
Base AddressOffset 0Offset 1Offset 2Offset 3
14+041C87A001C424
Pointer Address0516FE80041C805C053049B403E9F844
Point to041C8040053049B003E9F820
人物地址041C87A0偏移20字节(+0x14)是舰队指针数组的地址,所以Base Address为14+041C87A0,该位置读取到的舰队指针数组的起始地址是0516FE80;
跳转到0516FE80,第1舰队偏移0所以在0516FE80读取到第1舰队的起始地址041C8040;
跳转到041C8040,偏移0x1C到041C805C处读取舰队中船只的指针数组的起始地址053049B0;
跳转到053049B0,第2艘船偏移4字节,在053049B4处读取到第2艘船的起始地址03E9F820;
跳转到03E9F820,船只段偏移24字节处的2字节存储的数据即船只的船舱容量。
文字描述起来比较复杂,实际上只需要关注上表第二行的5个数字。
在CE中添加一个附图所示的4级指针地址,类型为2字节,该记录指向第1舰队第2艘船的船舱容量大小。

关键在于这条记录修改的对象是“坐在”第一舰队第二艘船这个“座位”上的船只的船舱容量,如果锁定为60000,那么只需要把要修改的船只挨个挪到第1舰队第2个位置走一遍,它们的船舱容量就都变成60000了。添加几条类似的记录,分别锁定船耐久、水手数甚至船只类型等数据,造船厂出来的新船挨个到第一舰队第二位置报个到就全部修改好了。和传统的GM、FPE的修改方式相比优越性不言而喻了吧。

类似的还可以添加条记录,Base Address是某特定船只地址,通过“所属舰队”再到“舰队提督”,最后指向该船只所在舰队的提督的4围技能的地址,然后只需要把这艘船挨个移动到所有舰队中间走一遍,就可以把提督的4围全改了。

[ 本帖最后由 ajun0251 于 2010-9-21 23:26 编辑 ]
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

使用道具 举报

帖子
263
精华
0
积分
132
金钱
1183
荣誉
0
人气
0
评议
0
13#
发表于 2010-9-21 23:50:21 |只看该作者
好贴啊 看的晕忽忽的。。。
中国战略网已经不是当年的中国战略网了,以前的中国战略网还有人写些比较有见解的原创文章,现在基本上都是转帖,要不就是转新闻,原来的中国战略网能够冷静分析问题的人还挺多的,如今却完全被一些喷子,网特汉奸和别有用心唯恐天下不乱的SB占满。

使用道具 举报

帖子
48538
精华
0
积分
24494
金钱
45992
荣誉
22
人气
46
评议
0
14#
发表于 2010-9-22 03:56:18 |只看该作者
这个帖子很实用啊~

使用道具 举报

帖子
509
精华
0
积分
285
金钱
5151
荣誉
3
人气
0
评议
0
15#
发表于 2010-9-23 13:39:01 |只看该作者
好贴,这种贴就应该顶

使用道具 举报

帖子
595
精华
0
积分
298
金钱
1533
荣誉
0
人气
0
评议
0
16#
发表于 2010-9-23 17:55:20 |只看该作者
好帖子 谢谢!!!
处理器:规格 Core(TM)2 Duo CPU E6550
主板 P35-DS4
内存:Apacer DDR2 800 2G x 2  667 1G x 2
显卡:NVIDIA GeForce 8800 GT
显示器:冠捷TFT1780
电源:牛魔王
本子:asus G73

使用道具 举报

帖子
22
精华
0
积分
11
金钱
280
荣誉
0
人气
0
评议
0
17#
发表于 2010-9-23 22:09:22 |只看该作者
我想问一个小问题 mov edx,[ebp-14] 和 mov [ebp-14],edx 的区别

使用道具 举报

帖子
22
精华
0
积分
11
金钱
280
荣誉
0
人气
0
评议
0
18#
发表于 2010-9-23 22:51:55 |只看该作者
还有个问题 修改值以后能显示 有变化 无法锁定是怎么回事

使用道具 举报

帖子
267
精华
0
积分
204
金钱
1465
荣誉
7
人气
1
评议
0
19#
发表于 2010-9-24 04:38:45 |只看该作者
TO zxlbest:
mov指令把第二个操作数赋值给前一个操作数,所以两者正相反。

如果是CE的锁定,记得在第一列勾选锁定复选框。

使用道具 举报

帖子
53
精华
0
积分
27
金钱
137
荣誉
0
人气
0
评议
0
20#
发表于 2010-9-24 19:57:42 |只看该作者
问题就是如何收缩啊,例如修改我的船的订单,时间太长了,郁闷

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

手机版|Archiver|游侠NETSHOW论坛 ( 苏ICP备2023007791号 )

GMT+8, 2025-11-16 15:08 , Processed in 0.379763 second(s), 13 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

分享到