铁血联盟2 v1.13内存修改不完全研究——物品篇 - 次元门 | 多元位面碎片集散地

访客需注册方可查看全部版块内容 请您花费一分钟时间完成注册过程 ( 登录 | 注册 )

 
Reply to this topicStart new topic
> 铁血联盟2 v1.13内存修改不完全研究——物品篇, 动态修改附件,动态锁定物品完好度、弹药量,机器人变坦克
会飞的猪
post 2017.01.07, 13:18
楼层 #1
编号: 42,910
帖数: 51
美刀: 192
组别: 列兵 R_18正式成员
注册: 2010.12.14, 11:36
物品: 查看

人物属性修改请看这篇:铁血联盟2 v1.13内存修改不完全研究——人物属性篇

先要碎碎念一下,唐僧附体中……时隔五六年之后终于有时间玩一下1.13了(以前出于怀旧就玩了一下1.12),作为修改狂不修改怎么行,XML文件修改太麻烦,改过的地方不想用了还得改回去,改得多了自己都忘了改了些什么地方,备份恢复法只能一次性恢复到备份状态,总不能还搞个SVN来保存修改节点吧!就算改了BR卖所有物品,加入一个NPC就要跑回去拿,所以很多时候内存修改就方便多喽。以前修改1.12的物品很容易,地址都是固定的,这次修改1.13发现弹药量地址居然会变,开什么玩笑,我用的可是Cheat Engine(为方便以后简称CE),必须得收掉这动态妖孽啊!废话到此为止,下面是正题。

具体的数据扫描分析过程就不说了,直接上分析结果:
注:图床不靠谱,又不是什么万年公司,说不定什么时候关了大家就看不到了,就不截图了,尽量用文字型的。

先上啰嗦版,虽然省掉分析过程,但还是要讲解一下数据特征,方便爱修改的朋友知道规律,以后版本如果有什么变化,由于程序的数据结构应该不会再做大改动,所以规律应该也是一样的。后面有简化版,不想看规律的朋友直接啪啪啪照抄就完了。

物品代码以及数量地址特征:
AA BB CC 00 00 00 00 00 EE FF GG HH CC 00 00 00

解读:
AA BB为物品代码,比如 6F 04 为“特工虫胶头盔”,CC为数量,大家注意到倒数第4个我也标记为CC,因为这两个数据是同步的,都是代表数量,但后面那个千万别改,一改就会黑屏跳出,EE FF GG HH即为指向物品完好度等动态地址的指针。

如何使用CE修改:
注:对CE使用非常熟悉的可以跳过a直接看b.物品完好度、弹药量等动态地址的锁定c.附件修改d.叠加类多物品的完好度等锁定

a.凭空产物无限拿取。
后面附加说明标清了对应格子,直接修改即可,不管该格子能不能放物品,可以凭空改出来,但只能修改出一个,物品重叠数量修改未研究出来,改CC位没用,一拿起来就没了,好在能直接锁定格子物品,改出一个后直接锁定,就能无限拿起来,——无限扔燃烧弹,燃烧吧火鸟!

修改步骤:
1、任意选定一个格子,搜数量或直接换物品搜代码随意即可(搜索方法不赘述,CE教程满天飞),建议用换物品的方法,后面添加物品地址的时候排序好看。
2、找到后右键点击搜索结果选“浏览相关内存区域”就会弹出内存数据窗口(如果只想锁定这一个格子,双击搜索结果即可)。
3、在内存数据窗口中右键点击 AA 位置的数字,选“将此地址加入到列表中”,弹出窗口什么都不用改,直接确定,后面可以批量修改改类型。只要你想的话,可以按附加说明里的位置顺序,将55个物品地址全加进列表。
4、关掉内存数据窗口就能在主界面下面列表中看到添加的物品地址了,Ctrl+A可以全选,再右键点击选择“更改记录”→“类型”,弹出类型选择下拉表,选择“Array of Bytes”,长度为3即可,确定。再右键点击所有记录,选择“显示为十六进制”。
注:这步操作的作用是方便以后随时修改想要的物品,不用每次都要弹内存数据窗口看一大版数据。
5、前面步骤做完后,想修改一个物品,只要双击列表中任意一条记录的“数值”网格(CE列表不显示网格线,所以要对准喽),在弹出的“更改数值”框输入相应物品代码及数量即可,可以连续输入比如“6F0401”,也可空格隔开“6F 04 01”就能改出一个特工虫胶头盔。
附:默认添加的记录描述位置都是No description,双击该描述网格即可修改文字,比如改成“右手物品”,以后就知道这条记录对应修改的是右手物品啦。

附加说明:
1、物品代码和数量位置是固定的——这句话要修正一下:物品代码地址原本一直都没变过,这两天折腾的时候发现物品地址奇怪的改变了,经过一番分析后还是找到了真正的基址,就是人物的“假属性”地址的人物名称的第一个字母再往前数两个(即第一个字母地址减2)的地址作为起始地址,再往后偏移+5A4的地方即存放着指向该人物第1个物品的地址,而人物的“假属性”地址指针也是依次连续存放在一个地址中的,如何查找“假地址”就省略了(看我另一篇人物属性修改的贴子即知),简单说下怎么查找指向人物的指针:找到假地址后查看一下人物名称的第一个字母地址减2的地址,用CE的4字节16进制功能搜索即可找到,数量不多,看一下就知道是哪个了。该地址内每4个为指向一个人物的指针,连续按进队顺序存放,但没进队(或不能进队)的也会存在后面。

2、物品代码一行16个字节为一个物品的完整代码,一个人物共连续55行,对应人物的55个物品格。在战略布署界面上看,从上到下依次为(为方便阅读分类分段隔开,但顺序没变而且是连续的,实在看不明白的最后补的有图,趁图床没挂自己保存一下吧):

人物装备:
头盔、护甲、裤子、头戴1、头戴2、右手持、左手持、背心、右腿袋(人物面向自己)、左腿袋、战斗包、大背包、枪绳武器、枪绳刀(就是枪绳武器旁边那个位置)

大格物品:
战斗包大格1、战斗包大格2、战斗包大格3、大背包大格1、大背包大格2、大背包大格3、大背包大格4、背心大格A、背心大格B、右腿大格、左腿大格

小格物品:
背心小格1(上排)、背心小格2、背心小格3、背心小格4、背心小格5、背心小格6(下排)、背心小格7、背心小格8、背心小格9、背心小格10、右腿1(从左到右从上到下顺序,后同)、右腿2、右腿3、右腿4、左腿1、左腿2、左腿3、左腿4、战斗包1、战斗包2、战斗包3、战斗包4、大背包1(从上到下从左到右顺序)、大背包2、大背包3、大背包4、大背包5、大背包6、大背包7、大背包8


b.物品完好度、弹药量等动态地址的锁定(重头戏):
注意前面物品代码特征中“EE FF GG HH”,这个值的地址指向该物品的相关数据,先说怎么改,再说得到结果后的代码特征。

首先,要使用指针,得先得到基址,EE FF GG HH的值就是基址地址,不过是倒过来的,那么方法一:手动倒过来变成HHGGFFEE去输入;方法二:可以利用前面搜索到的物品代码地址直接跳转指向得到该值。推荐方法二,可以跟前面的物品地址保持统一,也方便制作修改器。这里两种方法都说一遍。

举例说明:
以下是我右手物品在列表中的显示
锁定 描述 地址 类型 数值
右手物品 0016E140 Array of byte 13 03 01

右键点击该记录浏览内存对应的数据
13 03 01 00 00 00 00 00 28 0C 17 00 01 00 00 00

修改步骤:
点击CE主界面中间位置最右边的“手动加入地址”,弹出Add address窗口,地址框别动,说明框随意比如“右手物品指针”,因为完好度就100,所以“类型”选“Byte”即可,然后勾上“指针”,会增加显示如下:
< 0 > (1级偏移)
┌───────┐
│ 基址 │
└───────┘

方法一:28 0C 17 00为基址地址,那么倒过来在基址处输入00170C28,上面的0(1级偏移)改为10(为什么是10后面解释),形式如下:
< 10 > (1级偏移)
┌───────┐
│ 00170C28 │
└───────┘
确定后主界面列表栏就会多一条记录,该记录的数值即为 13 03 物品的完好度。

方法二:前面右手物品在列表中显示的地址是0016E140,而28 0C 17 00这串值的位置在0016E148,所以在物品地址值基础上+8作为基址即可,即:在基址处输入0016E148,1级偏移保持0,点击“Add Offset”按钮,在2级偏移处输入10,形式如下(注意1级偏移、2级偏移是从下往上倒着的,后同):
< 10 > (2级偏移)
< 0 > (1级偏移)
┌───────┐
│ 0016E148 │
└───────┘
确定后同样能得到 13 03 物品的完好度的动态记录。

重点解释:
为什么偏移是10,先来看一下如果不改为10而是保持0,确定后浏览内存的结果:

28 0C 17 00 28 0C 17 00 B8 0C 17 00 07 00 00 00
64 00 02 00 0F 00 65 00 64 00 01 00 00 00 HH 00

第二行第一个64就是物品的完好度了,也就是说完好度与偏移为0的地址相差16,换算成16进制就是10,以此类推,要锁定弹药量的话,就再手动添加地址,偏移改为14即可。如果想同时锁定该枪的所有相关数据又懒得一条条加,就在完好度那里使用Array of Bytes类型,长度包括所有想锁定的数据就行了。

注意:第一行即为28 0C 17 00,且重复1次(为什么重复1次这个很重要,叠加多物品的完好度锁定就靠分析这个数据),然后是B8 0C 17 00 07 00 00 00(这个也很重要,物品附件修改就是分析这个数据得出结果)。

附注:02是弹药类型,当前使用的穿甲弹,0F 00表示弹药量当前为15发,65 00为当前使用的弹药物品代码(即7.62X51mm,20发穿甲弹匣),下一个64未知,改了没发现什么效果。接着的01表示当前是否需要装弹,值为00的话就会显示要装弹,锁定该位置狙击步枪就不用打一枪上一下子弹啦!HH位我特别标出来,一般枪是00,火箭枪是C8,作用应该都懂的。

顺便一提:这里有个很有意思的修改,其实65 00即当前装的什么弹药代码完全没什么用处,射出去什么子弹是由02位置的代码决定的,比如改成04你会发现打出去就变成霰弹了,而改成06打出去居然是烟雾弹,最大为1E,超过会提示“那是不可能射中的”!不过,你可以把65 00改成其它物品,弹药量改成63(即99),再回到游戏退出枪里的子弹看看效果:)。

c、附件修改:
b的修改中贴上的那段内存数据,第一行的B8 0C 17 00即为物品附件的指针的指针,而后面的07表示该物品能安装多少附件,比如我当前安装的是握把,换成榴弹发射器后这个07就会变成08,即能安装8个附件了。根据前面的方法,这里不难推出如何添加指向附件的动态地址。

修改步骤:
1、手动添加地址,基址处仍填0016E148,1级偏移为0。
2、点击“Add Offset”按钮,在2级偏移处输入8,再点击“Add Offset”按钮,在3级偏移入输入4,这样完成后得到的只是物品附件的直接指针,所以接着来。
3、再次点击“Add Offset”按钮,4级偏移处输入8,这就是附件物品代码的位置啦,形式如下:
< 8 > (4级偏移)
< 4 > (3级偏移)
< 8 > (2级偏移)
< 0 > (1级偏移)
┌───────┐
│ 0016E148 │
└───────┘
接下来类型选“Array of Bytes”,长度3即可,然后就跟改物品一样,改个附件代码试试吧,比如“860301”。

顺带说一下,既然是物品,这里物品的代码规律基本就跟前面主物品代码地址处的规律差不多,即物品后第9-12个字节存放该附件物品的完好度等信息,仅举一例说明第一个附件的完好怎么改(其它附件完好度以此类推),形式如下:
< 10 > (6级偏移)
< 0 > (5级偏移)
< 10 > (4级偏移)
< 4 > (3级偏移)
< 8 > (2级偏移)
< 0 > (1级偏移)
┌───────┐
│ 0016E148 │
└───────┘
啰嗦一句,可能有人会想在主物品格改出来后安装上去就行,何必还要这么麻烦。——对于一般物品附件来说确实如此,但消耗类的比如电池就很有用了,拿上电击枪,锁定电池持久只管揍,不用操心电池的事啦!

注意,这只是第1个附件,分析数据可以得出,其它附件以链表形式存放,也就是下一个附件是以当前附件一个位置上的记录为指针(有兴趣的朋友自己右键点列表记录浏览内存往前看)。那么再列举两个附件地址,注意规律,以此类推即可得出所有附件地址。
第2个附件:
< 8 > (5级偏移)
< 4 > (4级偏移)
< 4 > (3级偏移)
< 8 > (2级偏移)
< 0 > (1级偏移)
┌───────┐
│ 0016E148 │
└───────┘
第3个附件(规律就是第几个附件中间就有几个4):
< 8 > (6级偏移)
< 4 > (5级偏移)
< 4 > (4级偏移)
< 4 > (3级偏移)
< 8 > (2级偏移)
< 0 > (1级偏移)
┌───────┐
│ 0016E148 │
└───────┘
附加说明——按以上规律添加完附件地址后,对应附件格顺序如下:

枪械类
1、榴弹(如果有榴弹器)
2、握把[榴弹器](如果没有榴弹器,则该处为第1,安装上榴弹器后顺序后推)
3、背带
4、内部附件
5、枪托
6、倍瞄镜
7、反射镜
8、激光镜
9、消声器

四格附件类
1、第4格[右下]
2、第2格[右上]
3、第3格[左下]
4、第1格[左上]

附注:同一格物品由枪械类换成4格附件类时,例如右手开始拿长枪,然后换电击枪,不需要修改地址,观察地址列表地址即可发现原来的123456789变成1234A1234循环,所以只要改前面的1234即可,那个A我特别标记是因为这里变成了附件指针的后4位值,减4即为附件指针,没兴趣的朋友就不用管了。

d、叠加类多物品的完好度等锁定:
叠加类物品的直接修改暂时还没研究出来,由于可以锁定物品格,所以没多大动力研究叠加问题,数据大致分析推测还是一个链表,这里只简单说一下如果有叠加物品,怎么锁定完好度的方法。

假定当前格物品的列表记录如下:
锁定 描述 地址 类型 数值
右手物品 0016E280 Array of byte 18 02 03

那么第1个物品完好度修改跟单个物品是一样的,手动加入地址,形式如下:
< 10 > (2级偏移)
< 0 > (1级偏移)
┌───────┐
│ 0016E288 │(注意物品地址要+8)
└───────┘
由于是叠加物品,如果浏览内存会发现代码有点不一样,比如前面的28 0C 17 00会重复1次,这个物品按单个的话是80 F0 16 00且重复一次,叠加后就只有后一个是80 F0 16 00,分析后得出结论:前面那个就是指向下一个物品的完好度地址。于是第2个物品完好度形式如下:
< 10 > (3级偏移)
< 0 > (2级偏移)
< 0 > (1级偏移)
┌───────┐
│ 0016E288 │(注意物品地址要+8)
└───────┘
第3个物品完好度形式如下(规律就是第几个就有几个0):
< 10 > (4级偏移)
< 0 > (3级偏移)
< 0 > (2级偏移)
< 0 > (1级偏移)
┌───────┐
│ 0016E288 │(注意物品地址要+8)
└───────┘
以此类推。


简化版(不用思考直接啪啪啪照抄):
1、锁定物品完好度等值:搜索到物品代码后,点“手动加入地址”,类型选“Byte”,勾上指针,假设物品代码地址为0016E140,则基址输入0016E148(即+8),偏移保持0,点“Add Offset”,偏移输入10确定即可得到当前物品的完好度地址
注:如果扫描时搜索依据是物品数量,则在找到的地址上减2即为物品代码地址

2、附件修改:搜索到物品代码后,点“手动加入地址”,类型选“Array of Bytes”,长度为3,勾上指针,假设物品代码地址为0016E140,则基址输入0016E148(即+8),1级偏移为0,点击“Add Offset”按钮,在2级偏移处输入8,再点击“Add Offset”按钮,在3级偏移入输入4,再次点击“Add Offset”按钮,4级偏移处输入8,这就是附件物品代码的位置啦,多个附件的话,偏移规律是——第1个:0、8、4、8(从下往上看);第2个:0、8、4、4、8;第3个:0、8、4、4、4、8……以此类推。

********************************分割线********************************

机器人的物品修改——机器人能变化的只有武器弹药,有了前面的结论,从这点入手逆推即可。

修改步骤:
1、随便给把枪,扫描弹药量,得到地址后右键浏览内存,根据前面的弹药量那段的地址特征,找到重复形式的那个指针值即类似28 0C 17 00这种(往前数16个即是),我这里是E0 35 19 00,复制这段,然后关闭内存窗口。
2、点“新的扫描”,类型选“byte数组”,勾上输入扫描值框前面的“十六进制”,粘贴或手输E0 35 19 00,回车扫描即可
3、一般来说会有3个结果,第一个就是机器人的物品地址啦,特点就是跟另外两个地址相差比较远,另两个相差为4(其实就是你前面搜索弹药量的地址段)。
4、右键点击结果浏览内存,往前数第8个就是物品代码地址,右键点击加入到地址列表,以后就能随意改啦,比如改个3C 00 01,一辆迷你小坦克就诞生啦!坦克炮弹代码是98 00,不过前面说了只要弹药量有数据,是不用上什么子弹的,所以随意就好,而且坦克炮的弹药量自动无限,也就是不用上弹就能无限轰。

注:根据前面的物品顺序,可以发现机器人装备的是Spectra加硬头盔、Spectra加硬护甲、Kevlar加硬裤,有兴趣就随意改吧,还能加上头戴装备,左手物品都没问题,使用前面修改附件的方法还能给枪加上附件,很灵活的啦。

最后补上人物物品格与内存对应关系图示:


本主题由 会飞的猪 于 2017.01.15, 22:23 修改




Go to the top of the page
 
+Quote Post
niuweixin514
post 2017.01.07, 23:37
楼层 #2
编号: 60,516
帖数: 8
美刀: 26
组别: 列兵 R_18正式成员
注册: 2017.01.03, 16:03
物品: 查看

访客需注册方可查看全部版块内容 请您花费一分钟时间完成注册过程 [注册|登录]
Go to the top of the page
 
+Quote Post
catmao
post 2020.07.22, 15:44
楼层 #3
编号: 355
帖数: 3,356
美刀: 1,808
组别: 贵宾 L_08骨干成员
注册: 2003.12.14, 22:53
物品: 查看

访客需注册方可查看全部版块内容 请您花费一分钟时间完成注册过程 [注册|登录]
Go to the top of the page
 
+Quote Post
19830503
post 2020.08.10, 11:46
楼层 #4
编号: 32,444
帖数: 264
美刀: 3
组别: 下士 R_17士官一级
注册: 2009.01.07, 11:39
物品: 查看

访客需注册方可查看全部版块内容 请您花费一分钟时间完成注册过程 [注册|登录]
Go to the top of the page
 
+Quote Post
1 位会员正在查看此主题 (1 位访客和 0 位隐身会员)
0 位注册会员:
Reply to this topicStart new topic
 



[ Copyright ©2003-2020 CiYuan.MEN ]   当前时间: 2020.08.14, 01:55