【原创】CheatEngine课堂之高中篇 - 铁资网TBSGAME论坛-铁血联盟资讯网|铁血联盟中文第一论坛

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

 
Reply to this topicStart new topic
> 【原创】CheatEngine课堂之高中篇, ——充分发挥基址的作用,与AP所在地址相关的数据统统锁定
会飞的猪
post 2018.01.24, 21:49
楼层 #1





编号: 42,910
帖数: 32
美刀: 114
组别: 列兵 R_18正式成员
注册: 2010.12.14, 11:36
物品: 查看
头衔: 土鳖山 匪众一级




以下内容皆为本人原创,铁资网首发,转载请注明出处。
作者:会飞的猪 QQ:283915763 三楼楼长


相关课程:
【原创】CheatEngine课堂之初中篇
【原创】CheatEngine课堂之课外活动

贴子大纲
一、什么时候该找基址——判断地址是否会变的依据
二、充分利用已找到的基址——与AP所在地址相关的数据统统锁定
1、锁精力
2、还是锁精力——连续地址的锁定
3、锁物品


一、什么时候该找基址——判断地址是否会变的依据
在上一篇初中篇里(链接:http://tbsgame.net/bbs/index.php?showtopic=77977)我们以锁AP为例讲了如何找基址,那是不是无论锁什么数据都要如此操作呢?当然不是,接下来讲讲如何判断是否需要找基址。

先来看看搜AP的结果,然后浏览一下内存


然后我们搜一个物品的数量,看看结果,也浏览一下内存


对比一下,AP的结果是绿色的,内存数据也都是绿色,而物品数量都是黑色,这就是判断的依据了。CE通过颜色表示:绿色是固定的,地址不会变的数据;而黑色是动态的,地址会变动的数据。那么有人就要问了:既然AP值的地址是固定的,干嘛还要找基址——我这不是用这个来举例嘛╮(╯_╰)╭


二、充分利用已找到的基址。对于有基址的数据,最大的好处就是能以基址为起点,追踪其指向的所有相关数据。玩修改比较多的朋友应该都知道,一个人物相关的属性基本都是放在一起的,比如生命值、内力值、攻击力、防御力等等,铁血也不例外,唯一例外的是别的游戏这些属性都是连续的,铁血却是杂乱无章的,这给我们的修改带来了一点小麻烦,但总的来说还是都在一个区域内,所以还是可以利用基址来统一修改。下面我就来说说如何利用基址,将与AP所在地址相关的数据统统锁定。

1、锁精力
首先,我们还未知与AP相关的数据有哪些,那么就不用管,先搜索我们想锁定的数据,比如精力吧。由于精力会自动恢复,所以在搜索之前要先使游戏暂停下来,让数据固定住,所以先按下图设置一个暂停进程的快捷键,为方便使用还可设置“弹出/隐藏CheatEngine”的快捷键来快速切换CE和游戏(比如设置成跟金山游侠一样的Num *)。


然后进游戏,改变精力值后,马上按刚才设置的暂停快捷键,再切出来扫描改变的数值,几次扫描后结果如下。


注意下图最后一次扫描的结果(由于我没暂停进程,在我截图时已经恢复成100了),跟我们之前找到的AP的地址比较一下,是不是很接近?再选择AP那条记录浏览一下内存,的确就在附近。


那么在后续的锁定操作之前,先回忆一下上一篇入门篇中提到的“记着这个+18”,我们是将这个“18”填入了AP记录的地址设置框中。


那么先来理解一下,这个“+18”是什么意思。双击地址记录列表中红框位置(一定要在红框范围内双击),将“18”改为“0”,确定后结果如下


然后浏览该记录内存(为能有个直观的感受,我把昵称改回能直接显示的字母形式了),我们发现了什么?记录中指向的地址“042341A8”正是昵称首字符的前两位,这也正是为什么我在以前发的贴子中反复提到的要把找到的昵称的地址再减2才是人物属性的“起始位”

给有编程基础的人看的:追根求底的问为什么要减2的话,有游戏源码的朋友可以打开“Build”→“Tactical”→“Soldier Control.h”文件,找到“class SOLDIERTYPE//last edited at version 102”的类定义看一下应该就能明白。注:这段定义包含了在战术界面操作佣兵时所有相关数据哦。而在同目录下的“soldier profile type.h”文件中找到“class MERCPROFILESTRUCT”的类定义的话同时也能明白为什么佣兵的敏捷、灵巧等能力值在内存中会显得杂乱无章。)

那么继续,从起始位开始数,那么AP值所在的位置是第25个,25对应的16进制值是19,那么我们把起始位看成是“042341A8 + 0”的话,AP值所在的位置刚好就是“042341A8 + 18”,反过来说,AP值所在的地址“042341C0”减去起始位地址“042341A8”就等于“18”(16进制)。

那么前面我们扫描的结果,精力所在的地址为“042341D5”,我们也同样减去起始位地址“042341A8”,得到“2D”,我们把此值按增加锁AP记录的方法添加上去试试。——CE给我们提供了很方便的操作,如果要添加的记录与已有记录差不多,我们可以直接先复制原有记录,再修改即可。所以点击地址列表中的“AP”那条记录,右键选择“复制”(或直接按Ctrl + C),再粘贴,弹出的对话框什么都不用改直接点“粘贴”。


再双击红框位置,按图中所示将“18”改为“2D”,描述就叫“精力”,类型改为“Byte”,注意绿框的数值已经变得一样了。


确定后地址记录列表如下图


2、还是锁精力——连续地址的锁定
在我以前的贴中有下图,可以看到精力和精力上限是连在一起的。


那要同时锁定需要再按前面的方法复制粘贴增加一条记录吗?答案是不需要。在前面修改地址的过程中,我们如下图将类型改为“Array of Bytes”,界面会多一个“长度”框,在框中填入2,注意蓝框中的变化,确定后如图所示,这时如果点击“锁定”框,就能同时锁定精力与精力上限啦。

前面数据作用标示图中右侧写了士气在距名字第一个字母地址“423D012”+6FA的地方,这是没有计算起始位的值,也就是说士气距起始位应该+6FC,按前面的方法添加此记录即可锁定。

如果再想偷懒一点,可以把长度改为5,就能同时锁定疲劳度了,不过有点麻烦的是潜行状态标志夹在中间,一直锁定的话就一直处于潜行状态。


为方便我们可以设置一个快捷键。在地址记录列表中要锁定的记录上点右键,选择“设置热键”,在弹出的对话框设置好快捷键就行了。

注:这里是我自己补充汉化的,在网上下的汉化包右键菜单上应该都是英文“Set hotkeys”。要注意的是弹出的对话框,原汉化中热键对应功能下拉列表选项中第1个翻译成“锁定”,而第4个也是“锁定”,这样就会混淆,而第1个英文原意是切换锁定状态的,所以我也修改了汉化。

3、锁物品
那么除了这些有锁定价值的数据外,还有什么是能通过前面找到的基址锁定的呢?用过我写的内存修改器的朋友可以看到一个Offset.xml文件,里面记录了所有修改的偏移位,其中重要的一条就是“物品地址指针”,值是“5A4”。


那么我们先手动跳到042341A8+5A4,即“0423474C”的地方看看,可以看到这只有一个4字节数据。再以这个4字节的值作为地址,转过去看看,注意要反过来,地址是“0016E070”。如果看过我“铁血联盟2 v1.13内存修改不完全研究——物品篇”这篇贴子的朋友应该很熟悉下图的格式了,这里正是所有物品的存放处,也就是“0423474C”这里存放的是指向物品存放地址的指针。如下图所示(这里把此图取个名字叫“图一”,后面要提到此图)


那么如何从基址跳到目的地呢?还是先复制一条前面的地址列表记录,双击地址位,点击“Add Offset”按钮后会在原偏移位上多出一行文本框,然后按下图设置。

这里解释一下,“04233718”当然是我们以前找到的基址了,“5A4”就是刚才说到的“物品地址指针”的位置,在 “Add Offset”后,CE会把“04233718”的值指向的地址再偏移“5A4”后的地址看成一个基址,即把红框内的数据运算后看成新的基址,再以此基址为基础跳转。最上层值为0,即跳转到红框运算后得到的基址中存放地址指向的位置后不作任何偏移。如果用“[a]+b”表示取“a”的地址中存放的值作为地址,跳转到过去后再偏移“b”个位置的话,此图可表示为“[[04233718]+5A4]+0”注意划重点啦这是要考的,一定要好好理解这个表达式!以后能不能在地址间活跃地蹦哒全看对这个表达式的理解程度了

确定后结果如下

这样就能锁定物品了?当然不能,这里只是物品的代码与数量,如果只锁定此处,进游戏后拿起此物品没问题,问题在于复制出来的新物品完好度什么的相关数据都是0。我在“修改物品篇”中说过,物品的状态在“图一”的蓝框的值指向的地址处,所以要同时锁定此处指向的地址的值才能锁定物品,复制出状态完全一样的物品。

那么再复制记录,双击修改地址,前面的“图一”中蓝框的位置相对于起始地址偏移为8,所以要把0改为8,注意图中我又添加了两行Offset,这是因为蓝框中的值运算完成后,指向的地址并不是物品的状态所在位置,而只是一个单纯的保存了物品状态所在位置的指针,所以还要再跳转一次,至于最后为什么要填10,长度为什么是16,还是请参考“铁血联盟2 v1.13内存修改不完全研究——物品篇”,就不再重复说明了。按前面的表达式,此处可表示为“[[[[04233718]+5A4]+8]+0]+10”


确定后如下图,双击红框区域,可随时编辑对应位置的值,第1个100当然就是物品的完好度啦,那么同时锁定“物品”和“物品状态”,就能复制物品喽,这里是对应的人物的第一个物品即头盔。


小技巧:拖动“物品状态”那行记录,会出现一条黑线。拖动时黑线如果指向一条记录,则会将被拖动的记录作为指向记录的子项(对主项所作的一些操作可同时对子项生效);如果黑线处于两条记录之间,则将被拖动记录移到黑线指示的位置,即调整顺序插入到两条记录之间。
示范图例:
a、变成子项

b、改变顺序

在有子项的记录上点右键,会比普通记录多出一条“群组设置”的菜单,展开如图。

注:原汉化的翻译对功能有所误解,这里的“隐藏子项时停用”应该是“停用(未锁定)时隐藏子项”,而“启动/关闭项目与启动/关闭子项”其实只有锁定主项的同时锁定子项的功能,而原本没翻译的“Deactivating this entry deactivates it's children”才能在解锁主项的同时解锁子项。

正确翻译如下:


再依葫芦画瓢,添加右手物品(用得比较多的锁定,比如不断扔手雷,锁定子弹)。在“图一”的绿框中为右手物品,相对于第一个物品在第6行,+1行即为+10(16进制),所以要改为50。


然后同理添加右手物品状态。


移动状态作为子项,右键设置一下,添加完毕后如图。


把右手换上想拿的物品后(这里换上了手雷)再锁定,就能一直扔手雷啦。


注:想再同时锁定附件的话(比如想用电击枪近身战就必须锁定电池,不然电池耗很快),还是要看“铁血联盟2 v1.13内存修改不完全研究——物品篇”领会哦。融会贯通的话,就能超快做出如下效果。


超大号的注意:锁定物品后要换另一种物品的话,比如不想扔手雷想换枪打了,一定要先切出来解除锁定再进游戏换,否则——哼哼!

那么如何充分利用基址锁定与此相关的所有数据就讲到这里了,那么当基址有变化时如何一劳永逸的统一修改?如何分享自己的修改成果?请继续看“CheatEngine课堂之课外活动——更新与分享,简单修改器的制作

本主题由 会飞的猪 于 2018.01.27, 15:12 修改
Go to the top of the page
 
+Quote Post
jinjian5530
post 2018.01.25, 10:32
楼层 #2





编号: 16,211
帖数: 487
美刀: 1,111
组别: 中士 R_16士官二级
注册: 2006.08.23, 22:53
物品: 查看
头衔: 土鳖山 匪众五级




访客需注册方可查看全部版块内容 请您花费一分钟时间完成注册过程 [注册|登录]
Go to the top of the page
 
+Quote Post
kmoi
post 2018.01.27, 14:10
楼层 #3





编号: 43,333
帖数: 1,826
美刀: 2,647
组别: 准将 L_05版块版主
注册: 2011.01.09, 18:49
物品: 查看
头衔: 醇酒醉影




访客需注册方可查看全部版块内容 请您花费一分钟时间完成注册过程 [注册|登录]
Go to the top of the page
 
+Quote Post
huyanjie6321
post 2018.01.29, 18:31
楼层 #4





编号: 54,377
帖数: 295
美刀: 368
组别: 下士 R_17士官一级
注册: 2013.10.30, 00:32
物品: 查看
头衔: 土鳖山 匪众四级




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



[ 沪ICP备11048272号 ] 当前时间: Feb 22nd 2018 - 10:49 AM