内容来源于:易道云信息技术研究院VIP课
上一节内容:自动药水设定功能的逆向分析-CSDN博客
这次是假设没有之前的思路积累的话,怎样去找按钮事件。
通过ui当做切入点去做,就是一个窗口它显示不显示,游戏怎样控制这个事情,窗口渲染不渲染,它肯定是有一个标志位的东西,默认来讲假设它是0或者1,也就是肯定会通过数据变化找到这个内容的,当找到这个相关的内容以后,接下来就可以很轻松的去处理这个事情。
接下来打开Cheat Engine,如下图选择位置的初始值,然后点击首次扫描
然后把游戏的自动药水设定窗口关闭,然后在Cheat Engine里输入0,再点击 再次扫描,这样一步的意思就是假设 自动药水设定窗口 显示时标志位是1,关闭时标志位是0,如果这样找不到东西,那就把它们反过来,显示时标志位是0,关闭时标志位是1,这样再找,应该就能找到了,这样说的原因是,如果是我们开发这个东西,在显示窗口时肯定是传一个bool或者BOOL类型,一般人也都会这样去做,所以才这样去找,
然后显示出来之后再用1找,就一直重复这一步与上一步的操作就完了
最终找到了33个值,这个时候,这么多数据的原因,是有可能它窗口里每一个按钮,继续往下看
下图红框中,每个按钮都有一个显示不显示的值,所以这么多值是正常的
接下来要看看它有没有与其它界面共享数据,是有共享的,因为我们的自动药水设定窗口没有打开,所在可以再扫一次0
最终就17个了
在分析的时候可以看出第一个红框的值更新的慢,下面十六个更新的很快,所以直接把第一个给移除掉了
然后把它们的值都改成1
但是很尴尬都没有显示出来,然后通过游戏中的按钮把自动药水设定窗口打开发现,它在这个基础上加了一个1
我们是想找一个象开关一样的东西,很遗憾没有找到,不管是之前的操作失误还是怎样,反正就是没找到,既然没找到那就死马当活马医,因为我们发现不管是快捷键打开自动药水设定窗口还是按钮打开,它会把值加1,会导致数据的变化,这一点是绝对没问题的,既然没问题,那我们就通过这个变化往上找,除非用了多线程技术来回倒,那么否则的话我们一定能够找到,我们要找的地方。所以通过找出是什么改写了这个地址的方式往上找
发现有两个地方改写了它
可以发现一个是减1一个是加1
先保存一下,寄存器信息,98bc81
接下来把Cheat Engine关掉,打开x96dbg调试
一下断点,就会卡主,所以这里是共用的,所以之前保存的哪两个信息图有用了,所以这时要下条件断点
设置完条件断点,再从游戏中打开自动药水设定窗口,就断点住了
然后直接按ctrl+f9在按f8往上找,然后就到了下图中的函数里,到函数之后就是一步一步往上分析的过程了
0x722A59地址一直找到一个只有自动药水设定功能才会调用的位置,但是到了这里也并不知道这里是偏底层的位置还是偏上层的位置,所以还得往上,就是找到最后一层它们不共用的地方,就是现在有三个接口 a接口 b接口 c接口调用了一个共用的函数,共用函数又调用了一个x函数,x函数又调用了另外的函数,现在不知道是在x函数还是另外的函数里,最好的方式使用共用函数里下手,共用函数的特定就是再往上一层就会跑到abc三个不同的函数,就是按下快捷键a函数响应,bc函数不响应,按下自动药水设定按钮时,b函数响应,ac函数不响应,也就是说现在还是处于abc三个接口共用阶段,所以还得网上找
0x84CB6B 经过一直往上找,最终来到了下图位置,下图位置的代码是一块一块的,它只有按快捷时才会触发,另外两个接口没法触发,所以现在按照我们的逻辑来讲,abc三个地方,现在已经找到a快捷键的这个地方,快捷键调用的地方bc也会调用,所以说快捷键到上一个函数之间是要分析的过程,所以 0x84CB6B位置调用的0x8687F0 函数要重点找。
0x8687F0 函数abc三个接口都会调用它,但是取消按钮也会调用,取消按钮的处理看上一节的分析(通过入参决定的是取消还是其它的),接下来就是分析参数、调用约定、写原型(跟上节一模一样),所以通过这种方式我们也找到了,上一节找到的函数,查找的方式不只这一种,逆向分析的方式有很多种,这只是其中一种,熟练正向开发,逆向的方式也就多了。