zoukankan      html  css  js  c++  java
  • 鬼泣4:寻找无限生命/剑气/暴怒

    前面的外挂系列教程,我们都是以一些简单的单机游戏作为演示的,今天我们将来玩一下鬼泣4这款剧情类游戏,该游戏是由日本游戏开发商CAPCOM开发的一款动作冒险游戏,记得笔者在小时候就玩过这款游戏,在画质等各方面做的都很不错。

    游戏下载地址:链接: https://pan.baidu.com/s/1gfjzw1NmXnlkOmvCtA4MjA 提取码: fwyp

    该游戏寻找基址与以往的游戏略有不同,游戏中的多数数值都不是以数值方式呈现的,而是以血条的方式展现出来的,我觉得这款游戏的搜索方式能让大家学到东西,所以就下载了该游戏,来为大家演示一下常用基地址的找法。

    寻找生命基址+偏移: 这里的血量是一个血条,默认我们不知道是多少,所以要搜索位置初始值,又因为像血量等这些数据默认会用浮点数存放,我们搜索浮点数即可。

    搜索方式,就是首先搜索未知浮点数,然后让人物掉血,搜索减少的数值,继续搜索未变动数值,然后再次掉血,继续搜索减少的数值,最后能找到一些数值,这个数值在0-6000之间,其他的可以排除掉了。

    这四个值,我们依次修改,然后观察,发现第一个是血量的,默认就是6000,如果改成20000则会撑满血条。

    这里查找一级偏移,查找访问地址,

    这里我们尽可能排除不是mov等指令的,此处选择 004FF282 - F3 0F10 85 CC150000 - movss xmm0,[ebp+000015CC] <<

    把前面的几个拿下来依次测试。

    这个可能是一个数组,不太像:008F6260 - 89 84 CE 98000000 - mov [esi+ecx*8+00000098],eax << 这样的八成是数组不用考虑。

    找到一个基地址,添加上 0040E405 - 8B 48 24 - mov ecx,[eax+24] <<

    继续向下找,没了,到头了:00463C50 - A1 B858E500 - mov eax,[DevilMayCry4_DX9.exe+A558B8] <<

    这个可能就是血量, 最终公式: [[[DevilMayCry4_DX9.exe+A558B8] + 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+0000CCE8] << eax = > 179811C0

    继续找访问地址,直觉再次告诉我,选择第三个。 0079D841 - 8B 70 24 - mov esi,[eax+24] << eax = > 161F64E0

    此时基地址已经找到了:00776792 - 8B 0D B858E500 - mov ecx,[DevilMayCry4_DX9.exe+A558B8] << base => 00e558b8

    看到上方的 DevilMayCry4_DX9.exe+A558B8 是不是很熟悉,没错就是与上方生命的取法相同,其结构相差不会太远。

    添加指针,锁定后,释放技能观察是否可以无限剑气了,没问题了,这个就是,接着就是写一下辅助了。

    写辅助,就简单了,和上面差不多,但需要注意最后是写内存整数型,其默认剑气为3,这里锁定三即可。

    这样就可以无限释放剑气了,基本上都是暴击,如下效果。


    寻找无限暴怒: 暴怒模式就是当人物被攻击时暴怒值会增加一点,具体增加多少不清楚,排查时应使用未知初始化搜索,然后怪物打一下搜索增加的,然后慢慢排查,这个的话感觉应该会是浮点数。

    怪物没打我们几次我们就搜索增加的数值,最后能够找到该数,该数值范围在0-10000之间,经过搜索我发现其确实使用float存储。

    下一步查找访问,然后找基地址即可: 00508EBD - F3 0F10 89 241F0000 - movss xmm1,[ecx+00001F24] << ecx = > 179C11C0

    找二级指针,这个 00776798 - 8B 71 24 - mov esi,[ecx+24] << ecx => 162364E0

    上面代码中可看出来,偏移的上面是一条 00776792 - 8B 0D B858E500 - mov ecx,[DevilMayCry4_DX9.exe+A558B8] 这个就很像,直觉告诉我,我该选择这个,添加指针测试,没错了。

    接着就是写好辅助,这个就简单了,代码如下所示,需要注意读写类型的区别。

    最终测试效果,当我们按下n时即可触发暴怒,开启辅助后即可无限释放。

    基本上,这三个功能即可爽完了,没有过不去的关卡了,但你是否会发现,我们找的这三个地址有些联系呢?

    生命:DevilMayCry4_DX9.exe+A558B8 + 24 + 15cc
    剑气:DevilMayCry4_DX9.exe+A558B8 + 24 + cce8
    暴怒:DevilMayCry4_DX9.exe+A558B8 + 24 + 1f24

    联系很紧密,我们计算一下偏差,即可得到一些想要的数据,拿基地址遍历器跑一下会得到更多有用的数据,这里我就不带大家继续了,你自己可以去试试。

    转载请添加出处,不然,我也没什么动力继续写下去了!


    版权声明: 本博客,文章与代码均为学习时整理的笔记,博客中除去明确标注有参考文献的文章,其他文章【均为原创】作品,转载请务必【添加出处】,您添加出处是我创作的动力!

    警告:如果您恶意转载本人文章,则您的整站文章,将会变为我的原创作品,请相互尊重!
  • 相关阅读:
    Java集合学习(8):LinkedList
    Java集合学习(7):ArrayList
    Java集合学习(6):LinkedHashSet
    数据结构与算法19—排序
    ZooKeeper基本介绍
    Java集合学习(5):LinkedHashMap
    Java集合学习(4):HashTable
    Java集合学习(3):HashSet
    java集合学习(2):Map和HashMap
    HTML DOM的创建,删除及替换
  • 原文地址:https://www.cnblogs.com/LyShark/p/13556371.html
Copyright © 2011-2022 走看看