roger 发表于 2020-8-30 16:50:21

鬼泣4 寻找无限生命/剑气/暴怒

  前面的外挂系列教程,我们都是以一些简单的单机游戏作为演示的,今天我们将来玩一下鬼泣4这款剧情类游戏,该游戏是由日本游戏开发商CAPCOM开发的一款动作冒险游戏,记得笔者在小时候就玩过这款游戏,在画质等各方面做的都很不错。
  游戏下载地址:链接: https://pan.baidu.com/s/1gfjzw1NmXnlkOmvCtA4MjA 提取码: fwyp
  该游戏寻找基址与以往的游戏略有不同,游戏中的多数数值都不是以数值方式呈现的,而是以血条的方式展现出来的,我觉得这款游戏的搜索方式能让大家学到东西,所以就下载了该游戏,来为大家演示一下常用基地址的找法。


  寻找生命基址+偏移: 这里的血量是一个血条,默认我们不知道是多少,所以要搜索位置初始值,又因为像血量等这些数据默认会用浮点数存放,我们搜索浮点数即可。
  搜索方式,就是首先搜索未知浮点数,然后让人物掉血,搜索减少的数值,继续搜索未变动数值,然后再次掉血,继续搜索减少的数值,最后能找到一些数值,这个数值在0-6000之间,其他的可以排除掉了。
  这四个值,我们依次修改,然后观察,发现第一个是血量的,默认就是6000,如果改成20000则会撑满血条。
  这里查找一级偏移,查找访问地址,
  这里我们尽可能排除不是mov等指令的,此处选择 004FF282 - F3 0F10 85 CC150000- movss xmm0, <<
  把前面的几个拿下来依次测试。
  这个可能是一个数组,不太像:008F6260 - 89 84 CE 98000000- mov ,eax << 这样的八成是数组不用考虑。
  找到一个基地址,添加上 0040E405 - 8B 48 24- mov ecx, <<
  继续向下找,没了,到头了:00463C50 - A1 B858E500 - mov eax, <<
  这个可能就是血量, 最终公式: [[ + 24] + 15cc] = 人物血量
  那我们该如何编写一个辅助呢,前面的外挂教程中我并没有过多的演示,偏移读写,现在我们就来实现一下。
  关于偏移读写模块,我们就是用上一次教程中封装过的D3D内存读写模块来演示,该模块可在GDI透视教程中找到。
  这里的 DevilMayCry4_DX9.exe+A558B8 其实等于 161d64e0 有些朋友会说,如果我就像动态读取,那么你需要先取出模块基地址。
  通过模块基地址与偏移地址A558B8相加得到的一个内存地址,再通过读取该地址,取出该地址中的地址,同样也可以得到我们的 161d64e0 也就是基地址。
  下一步就是对该基地址进行相加,最终得到血量的完整动态地址,即可读出数据,效果图如下所示。
  最终这个功能就实现了,之所以锁定6000是因为该值最大为6000当然也可以锁定为30000,尽量锁定的值不要超出预定义范围,以确保游戏能够正常。

  实现无限剑气: 这里我说一下鬼泣游戏中的剑气设置,当我们按下Q键位是,游戏中的人物会蓄力,当蓄力值达到一定条件时,会增加一格剑气,当剑气值达到三格时即可触发剑气开关,攻击力上升,效果变得炫酷,如下时正常积累剑气时数据的变化。
  游戏左上角的红色格子,就是剑气值的累加,这里的搜索方式有多种形式,第一种搜索未知数据,第二种应该可以搜索1-3之间的常量,当我们释放技能时剑气会减少,所以我们需要锁定他。
  起初我时通过位置初始值来寻找的,想当然认为时浮点数,筛选过程就是首先搜索未知初始值(浮点数),积累1格剑气,然后搜索增加的,在积累一个继续搜索增加的,然后释放一格,搜索减少的,最后,我找到了这个剑气值的地址,浮点数显示出现了一些不和谐,才知道这个使用四字节表示的,也就是说搜索精确值1-3筛选同样可以找到。作者是使用了一个int类型来存储剑气值的。
  接着找访问地址,直觉告诉我选择第二个。00508DD4 - 8B 80 E8CC0000- mov eax, <<eax = > 179811C0
  继续找访问地址,直觉再次告诉我,选择第三个。 0079D841 - 8B 70 24- mov esi, <<eax = > 161F64E0
  此时基地址已经找到了:00776792 - 8B 0D B858E500- mov ecx, << base => 00e558b8
  看到上方的 DevilMayCry4_DX9.exe+A558B8 是不是很熟悉,没错就是与上方生命的取法相同,其结构相差不会太远。
  添加指针,锁定后,释放技能观察是否可以无限剑气了,没问题了,这个就是,接着就是写一下辅助了。
  写辅助,就简单了,和上面差不多,但需要注意最后是写内存整数型,其默认剑气为3,这里锁定三即可。
  这样就可以无限释放剑气了,基本上都是暴击,如下效果。

  寻找无限暴怒: 暴怒模式就是当人物被攻击时暴怒值会增加一点,具体增加多少不清楚,排查时应使用未知初始化搜索,然后怪物打一下搜索增加的,然后慢慢排查,这个的话感觉应该会是浮点数。
  怪物没打我们几次我们就搜索增加的数值,最后能够找到该数,该数值范围在0-10000之间,经过搜索我发现其确实使用float存储。
  下一步查找访问,然后找基地址即可: 00508EBD - F3 0F10 89 241F0000- movss xmm1, << ecx = >179C11C0
  找二级指针,这个 00776798 - 8B 71 24- mov esi, << ecx => 162364E0
  上面代码中可看出来,偏移的上面是一条 00776792 - 8B 0D B858E500- mov ecx, 这个就很像,直觉告诉我,我该选择这个,添加指针测试,没错了。
  接着就是写好辅助,这个就简单了,代码如下所示,需要注意读写类型的区别。
  最终测试效果,当我们按下n时即可触发暴怒,开启辅助后即可无限释放。
  基本上,这三个功能即可爽完了,没有过不去的关卡了,但你是否会发现,我们找的这三个地址有些联系呢?
  生命:DevilMayCry4_DX9.exe+A558B8 + 24 + 15cc
剑气:DevilMayCry4_DX9.exe+A558B8 + 24 + cce8
暴怒:DevilMayCry4_DX9.exe+A558B8 + 24 + 1f24
  联系很紧密,我们计算一下偏差,即可得到一些想要的数据,拿基地址遍历器跑一下会得到更多有用的数据,这里我就不带大家继续了,你自己可以去试试。
  转载请添加出处,不然,我也没什么动力继续写下去了!

页: [1]
查看完整版本: 鬼泣4 寻找无限生命/剑气/暴怒