欢迎光临散文网 会员登陆 & 注册

究极绿宝石5.3——科普向,什么是金手指(八)

2022-01-28 21:10 作者:围巾胖头鱼  | 我要投稿

说在前面:

    上期专栏总结的那张关于精灵的变量地址映射表,是可以通过之前许多期专栏的方法探索到的。本期专栏将再介绍一个探索映射表的方法,在VBA模拟器内存这片“大海”中,捞到我们想要的那根“针”——变量。

模糊查找功能

    在介绍新方法之前,先来回顾一下我们之前探索映射表都有什么方法。

    第二期,我们介绍了“变量地址查看器”这个功能,能够看到VBA内存中的所有信息。它就像一片汪洋大海,包含着成千上万个变量,信息量实在是太巨大了。但是有这样一个信息库总比没有强,就是它的存在验证了映射表的通用性“相似变量紧挨着放”这些重要规律。

    第三、四两期,我们介绍了“查找金手指”这个功能。当时的用法是我们先确定好一个变量取值,然后搜索所有是这个变量取值变量地址在哪,通过“追踪式变量取值查找”逐步筛选出我们要找的变量。

    第五、六两期,我们介绍了“金手指列表”这个功能。在确定好一个变量地址后,我们通过金手指不断修改变量取值,来探索整个变量取值的映射表。

    可以看到,真正用来探索映射表的方法是“查找金手指”和“金手指列表”提供的功能,而“变量地址查看器”更多地是作为验证查找结果是否准确的手段。上面提到的方法有个共同的特点,那就是我们必须提前知道一点信息——是某个特定的变量取值也好,是某个已知含义的变量地址也好——通过已知的这样一点信息,来推测、探索出新的信息。

    如果一上来我们什么都不知道该怎么办?我们在游戏中看到某个游戏实体,想找它对应的变量,它的变量地址现在是未知的,找到它就是我们的目标。可是这个变量对应到的游戏实体本身不是数字,所以不能通过直接找数字的方式来找到它。猜测这个变量取值的映射表也很困难,因为它对应的游戏实体似乎没有明显的顺序,很难对应到数字上来。

    这种情况下,之前介绍的“查找金手指”和“金手指列表”功能就都无法起作用了,因为它们都需要已知一点信息,但现在我们什么都不知道。第四期的专栏最后给了一张“查找金手指”功能的流程图,里面提供了一种方法,就是从网上找一找是不是别人发现了这个游戏实体对应的变量,作为参考,然后验证是否正确。如果从网上也找不到该怎么办呢?

    现在就需要“查找金手指”界面的“模糊查找”功能,让我们“无中生有”,在什么信息都不知道的情况下找到这个变量。

查找金手指例5——主角所在地点的金手指在哪里?

    我们以游戏中主角当前所在的地点为例,介绍“查找金手指”里面“模糊查找”的功能该如何使用。

    作者使用一个测试存档,当前主角位于未白镇:

未白镇

    我们想要找到“未白镇”这个地点它对应的变量地址在哪里。打开“金手指——查找金手指”,来到“查找金手指”界面,我们在“查找类型”中,选择“模糊查找”:

第一次查找的设置

    可以看到,选中“模糊查找”后,下面那个“精确查找的目标值”后面的输入框就不能输入了。这个“模糊查找”是干什么的呢?其实作者认为这里的“模糊查找”翻译的有问题(现在展示的界面是汉化的VBA模拟器,1.80版本),能表达这个功能真实含义的应该是“利用旧值查找”。

    “比较类型”中列举了一系列数字之间的比较关系,从“相等”“不等”一直到“大于或等于”,这里作比较的两个数字,在“精确查找”的功能下,比较的是目前留在上面列表里的变量取值,和我们在下面目标值的输入框内输入的数字。而在“模糊查找”的功能下,比较的是目前留在上面列表里的变量取值,和那些变量在本次查找之前的取值(也就是上图第二列的“旧值”)。简而言之,“精确查找”是给定目标去比较,而“模糊查找”是变量自己和自己去比较

    使用“模糊查找”时,“数据尺寸”这个选项不太容易选择,因为我们不知道想要找的变量长度究竟是多少。这里作者以中间的那个选项“16位”为例。如果不幸这个选项没有找到,我们还需要将“8位”和“32位”再试一次。

    “有/无”正负之分这里最好选择“十六进制”,因为金手指原始代码的格式里用的都是十六进制数,这里找到变量之后就直接可以拿到“金手指列表”里去用,而不需要从十进制再换算过去。

    注意:现在是我们的第一次查找。对于“模糊查找”而言,第一次查找还没有“旧值”这个概念,我们需要把全部变量都加载到上面那个列表里去,然后一点一点筛选。“比较类型”中选择“相等”时,第一次模糊查找就是把所有的变量都列举出来。现在点击“开始”,然后点击“查找”:

第一次查找的结果

    跳出一个警告框,如果点击警告框上的“确定”按钮,会发现“金手指查找”界面里还是空空如也,并没有像第三、四期那样列举出好多变量。其实用第三、四期的方法查找变量时也有可能碰到这个警告框,它的含义是找到符合条件的变量太多了,它列不出来。但是,第一次查找并没有失败,它只是不显示给你看,并不代表它没有找到或没有找全。这一点非常重要!有的读者可能看到这个警告框就以为查找失败了,其实并没有,我们的查找才刚刚开始。

    点击警告框的“确认”按钮,再点击“金手指界面”的“确认”按钮,回到游戏,主角用“骑行装置”飞到古辰镇:

古辰镇

    再次打开“查找金手指”界面,此时我们把“比较类型”选成“不等”:

第二次模糊查找的设置

    这一步是模糊查找的精髓。我们其实什么信息都不知道,不知道“未白镇”映射到的变量取值是什么,也不知道“古辰镇”映射到的变量取值是什么,但是我们知道,如果游戏中主角从未白镇来到了古辰镇,这个变量一定会发生变化!而“模糊查找”+“不等”表达的含义就是查找新值和旧值不同的那些变量,这些变量一定包含了描述主角所在地点的变量,因此它可以作为筛选条件,来进行我们的第二次查找:

第二次查找的结果

    筛选的成果还是很明显的,这次查找的结果给我们列举出来了。但是列表中的变量还是太多了,我们需要进一步筛选。这次换个方式,不是用骑行装置飞到某个城市,而是步行走到102号公路:

102号公路

    游戏界面中,左上角弹出的“102号公路”的提示框就是变量“角色所在地点”发生改变的最好证明。我们还是用刚才那个“不等”的设置再搜索一遍:

第三次查找的结果

    虽然变量数又缩减了,但是缩减的速度明显不如上一次。接下来,无论是步行到一个新地点还是飞到一个新地点,都会发现变量数缩减的速度越来越慢,这时我们就需要换个策略。

    记住我们现在是在102道路。在游戏中,我们随便干点别的事情,给精灵喂个糖果、去草丛里打个精灵、在商店买个东西、找NPC打一架、去水静市百货大楼抽个奖……作者这里是去古辰镇精灵中心进行了一次回复,然后回到102道路,再次打开“查找金手指”界面,只不过这次要把“比较类型”设置为“相等”:

第四次查找的设置

    我们之所以刚才进行了一些游戏内的操作,就是要更改一些游戏中的变量,但是当我们最后回到102道路的时候,我们知道和上一次查找相比,“主角所在地点”这个变量应该没有发生变化。因此这次查找我们把“比较类型”改为相等,再次查找:

第四次查找的结果

    使用“模糊查找”的特点就是需要用比“精确查找”多得多的次数才能找到我们想要的变量,并且需要经常在“不等”和“相等”这两种模式之间切换。因此每次点击“查找”按钮前,一定要清楚地记得应该选择“相等”还是“不等”,一旦选错,前功尽弃,这一点千万注意!

    查找到现在这个样子,还有几个小技巧可以介绍:

  1. 很多变量会在这个过程中变成0。尽管它们也是经过层层筛选,可能是我们最后的目标,但通常来说,在我们变换了这么多次地点之后,当前地点恰好映射到0的概率还是很低的,因此我们可以用一次“精确查找”+“不等”+“输入框输入0”把这些变量筛掉。同样FFFF这种取值基本上也不太可能出现。

  2. 可能会有很多相邻变量取相同的值。比如在列表中看到十几个甚至几十个在地址上靠得很近的变量取相同的值(可以用鼠标滚轮查看列表,发现这种规律很明显),这时可以通过“精确查找”把这种变量筛掉,因为期望上我们想要找的描述地点的变量没那么多。

  3. 每次都来到不同的地点,记住自己曾经用来精确查找筛掉变量的取值,如果变量中又出现的这个取值,则可以直接筛掉,因为来到不同的地点意味着我们想要的变量取值会一直变化,而不会变成之前的某个值。

  4. 回顾一下第五期“内存视图”的知识,我们知道游戏存档内的变量,它的变量地址一定是0202或者0203开头的,所以不满足这个条件的地址我们可以一概筛掉。

  5. 等到最后只剩下十几个变量的时候,如果发现无论在游戏中做什么操作都无法进行进一步筛选,就转向“金手指列表”功能。把目前的变量地址都记下来,一条条去“金手指列表”中去试。

    作者又经过了多轮查找,变量终于只剩下了十几个:

经过多轮筛选的结果

    此时我们可以用“查找金手指”页面的“添加金手指”,把现在的结果保存一下。点击第一行地址,然后点击“添加金手指”按钮:

添加金手指

    这里数值我们填入和“查找金手指”页面相同的变量取值,用来区分列表中这些找到的这些变量。全都添加上去之后,我们打开“金手指——金手指列表”,现在所有可能是“角色所在地点”的变量都列举在里面了:

对变量进行逐一排查

    我们只开启其中一条金手指,并且把“还原为前一个数值”的勾选框勾选上,进行逐个排查。如上图所示,这一列金手指,我们只开启了第一行,剩下的都是关闭状态。

    这些金手指是可以保存的,打开“金手指——保存金手指列表”,这相当于把我们目前的查找结果暂存一下。“查找金手指”界面和“金手指列表”界面并没有保留历史记录的功能,发生更改之后就有可能找不到之前的记录了;当然,下次打开游戏想要用的时候,就用“读取金手指列表”这个功能:

保存金手指列表

    打开单个金手指是什么含义呢?根据原始代码的格式,这条金手指如果一直开启的话,是强制将这个地址处的变量固定为特定的取值。而这个地址有可能代表的是“角色所在地点”,如果这个变量被金手指固定住的话,我们在游戏中就无法更改“角色所在地点”,换句话说就是我们哪儿也去不了,只能在当前地点这个特定区域移动!

    这是什么含义呢?主角当前站在未白镇的家门口,当金手指开成上面的样子(就是02025a04:0900),让主角走进家门试一下:

走进家门后,还是出现在未白镇

    主角竟然还是出现在未白镇,也就是说现在主角回不了家了!我们再用骑行装置试一下,看看能不能飞到别的城市,结果还是不行,无论骑行装置选择哪个城市,最后飞到的一定还是未白镇!

    出现这种效果,就说明02025a04这个地址就是我们要找的变量。不过,我们还需要验证一下其他变量是不是有相同的效果。用进门或者骑行装置飞行的方式测试剩下的变量,发现020322e4也能具备同样的效果。测试期间会出现各种奇怪的事,比如有的金手指会让房间里的人变一个样子,有的会让房子进去了出不来,有的会让角色和其他人对话的时候卡死,还有的会让主角进门后直接黑屏……用错了金手指的后果可见一斑!

    现在可以下结论了:角色所在地点的变量地址有两个:02025a04和020322e4。利用这个变量地址,我们可以探索“角色所在地点”的映射表。

    这两个地址对应的金手指,就是瞬移金手指,当金手指启用后,通过进出门、上下电梯/梯子、进出洞口、使用骑行装置、离洞绳、瞬间移动技能、挖洞技能等等能改变地点的操作的时候,就会瞬移到变量取值对应的地点。这两个地址都能用吗?读者们可以测试一下,其实020322e4这个地址更好用一些,02025a04会把主角传送到一些奇怪的位置,甚至可能卡死。

    那么使用这个金手指会有副作用吗?会导致坏档吗?如果读者们还有这种问题,就让我们再次回顾使用金手指的原则:

    只要是按照游戏正常流程能达到的游戏状态,使用金手指也能达到,并且不会被反作弊机制检测到,更不会导致坏档。

    换句话说,只要当前游戏流程允许你来到这个地点,你用金手指来到就不会有任何副作用。反之,如果当前游戏流程里你还不能来到这个地点,而你用金手指来了,等待着你的很有可能就是坏档。

    合法使用瞬移金手指的例子可以举出两个很有实用价值的:

    第一个例子,是二周目来到天空之柱顶层捕捉烈空坐,不知有多少读者卡在天空之柱的自行车挑战上。很多读者不能理解为什么一个主线剧情这么考验玩家的操作,我天生就是手残怎么办?其实按照游戏剧情流程,玩家已经不是第一次来到天空之柱了,上一次来天空之柱还是请烈空坐解决固拉多和盖欧卡争斗的时候,是在一周目打琉璃市水系道馆之前,那时天空之柱还没有那么多碎裂的地板,也就不存在自行车挑战的问题。

    如果玩家能够在第一次到达天空之柱顶层的时候,从“变量地址查看器”中看一下“角色所在地点”的变量取值,完全可以在第二次要去的时候用瞬移的金手指过去,使用它模拟的游戏正常流程就是你费尽千辛万苦骑自行车到达了天空之柱的顶层。由于此时的正常游戏流程是允许你到达天空之柱顶层的,因此这种情况下使用瞬移到天空之柱顶层的金手指就不会有任何副作用,更不会导致坏档。这里可以告诉大家,天空之柱顶层对应的变量取值是5518。

    第二个例子,是探索究极洞的时候,各种对战NPC一直消耗你的队伍,不是给你来个异常状态,就是用自爆之类的技能把你的精灵打残,所以玩家们在探索究极洞之前会把全复药、活力碎片等等道具买得尽可能多。其实临时返回到究极洞外,到某个城市的精灵中心回复一下,然后再回去也是可以的,问题就是跑路太长、太费时费力了。现在有了瞬移金手指,模拟一下这个跑路的过程,很多情况下是完全合法的,是不是节省出了大量的时间?

    刚才举的第二个例子,我们可以利用瞬移金手指回到精灵中心进行回复,然后再瞬移到我们刚才所在的位置,让游戏剧情流程继续下去。其实,有一种更快捷的方式,相当于把精灵中心随身携带,只需要按下某个组合键,就相当于主角来到了某个精灵中心和护士进行对话,然后回复队伍的全部精灵。这种更快捷的方式,就是下期专栏将要介绍的V3格式金手指涵盖的功能。

    V3格式的金手指在第五期专栏中提到过,当时只是说这类金手指是原始代码加密生成的,其实V3格式的金手指功能要比原始代码强大得多,也绝不仅仅只有加密这一步这么简单。下期专栏涉及到的金手指内容的难度即将进入疯狂模式,觉得难度太大的读者可以量力而行,先把前面的专栏内容弄明白了再说。如果是大佬则请无视,这些东西说不定都是您玩剩下的。

究极绿宝石5.3——科普向,什么是金手指(八)的评论 (共 条)

分享到微博请遵守国家法律