希望bm吧 关注:619贴子:1,093
  • 6回复贴,共1

修改心得:隔空捡的实现

取消只看楼主收藏回复

隔空捡的3版工具,我已经分享在本吧了. 这是我为本吧的人气,不得不作出的妥协
但玩修改的朋友,更想知道其中的修改原理,是不是?
梦回这游戏捡物,必须是站在物品上面,也就是说物品和人物之间的坐标是重合时,它才允许你捡起来,这其实就是2个坐标判断之后的处理结果.如果你能修改它的判断的执行,当然也就实现了隔空捡.
当然,需要注意,C端和S端都有这个坐标判断的处理,必须2个进程都修改才行.


IP属地:广东1楼2022-10-10 17:10回复
    首先我们处理比较难搞的C端

    搜索到人物的横坐标后,我们直接查看谁访问了它

    此时发现,有线程访问得极其频繁, 已经影响到我们无法控制游戏人物了.当然想调试人物捡东西也是不可能了.所以说比较难搞.


    IP属地:广东2楼2022-10-10 17:14
    回复
      但没关系,我们用中转的方式,获取捡物时判断坐标的代码
      这里,我再强调一下一个概念: 进入(call)一个函数时,它返回的地址总是存储于 [esp],如果有 push ebp,mov ebp,esp 的"堆栈转换",那返回地址就是 [ebp+8]
      我们就用这个原理可以来获取我们想要的代码地址. 这个方法适用于这类"不停运行的线程",或者是一些公用的函数


      IP属地:广东3楼2022-10-10 17:19
      回复

        我们对2楼访问人物坐标的代码进行"显示反汇编程序",定位到代码栏.
        选中它的上一行, mov eax,[ebp-4] ,在这里注入我们的脚本.

        这是脚本的关键的内容,搞好后,我们激活使用它

        杀一个怪,然后站在物品上面,但先不要捡东西

        浏览内存,定位到我们脚本的 code_Out 这个地址,从 mov ecx,code_Out 这一行代码复制到具体的地址
        然后我们发现已经有一些数据了,但不用管它们,这些都不是我们想要的数据. 你先看好最后一个为0的内存地址是哪里,比如上图就是第二行 0149004B
        然后,我们按空格键把东西捡起来, 就获取到了新的数据.
        我们复制最后一个数据生成的地址,(注意,是地址,点一下那个地址,再右键"转到地址"就可以复制了.
        然后我们转到上面的代码栏, 按下面的输入方式,即可跳到捡东西的代码所在了.


        IP属地:广东4楼2022-10-10 17:31
        回复

          这就是读取人物横坐标后的返回地址, 注意,它存储在了 [ebp-260]中,所以我们继续往下找,后续它肯定有相关的坐标判断比较

          这里就是判断2个坐标的地方, 可以看到 +84是物品的横坐标, +86 是纵坐标(长度是word),
          cmp esi,edx
          jne .... 这个不相等跳转就是隔空捡的关键所在了.

          我们按4楼的方法,以鼠标捡物品,同样也找到相关代码地址.

          这里就是鼠标捡物品时,坐标判断的代码所在
          找到地址,我们把4个不等跳转 jne 全部 nop 掉,即完成了对C端的隔空捡的修改
          后面是成品脚本:
          [ENABLE]
          "BackMir.exe"+1722DC:
          nop 2
          BackMir.exe+1722F5:
          nop 2
          "BackMir.exe"+189F79:
          nop 2
          "BackMir.exe"+189F56:
          nop 6
          [DISABLE]
          "BackMir.exe"+1722DC:
          jne BackMir.exe+172351
          movzx esi,word ptr [ebp-20]
          //Alt: db 75 73 0F B7 75 E0
          BackMir.exe+1722F5:
          db 75 5A
          "BackMir.exe"+189F56:
          //jne BackMir.exe+189FDC
          db 0F 85 80 00 00 00
          "BackMir.exe"+189F79:
          //jne BackMir.exe+189FDC
          db 75 61


          IP属地:广东5楼2022-10-10 17:43
          回复
            让大家学多点东西, 游戏如何判断 鼠标与键盘的输入?
            其实在我们找到的代码处,往上翻一些,就有了.

            这是判断鼠标左键点击的代码, 01 是左键, 02是右键....

            这是判断按空格键的代码, 20 即是空格键的编号
            0D ENTER 键
            10 SHIFT 键
            11 CTRL 键
            12 ALT 键
            ...
            键位的编号,这些可在网络上搜索得到


            IP属地:广东7楼2022-10-10 17:47
            回复
              好,继续修改S端. 找出人物横坐标内存地址,然后我们查看谁访问它

              回到C端让人物捡东西,就有新的追踪. 这里是5次访问,是因为C端已经修改好了,地面的5件东西,它都捡

              显示反汇编,定位到代码所在, 然后我们像C端一样 nop 掉判断跳转即可,这样就实现了所谓的隔空捡
              当然,这样的修改其实是全图捡! 所以你得继续完善你的脚本,否则修改过头,游戏体验也就适得其反.
              这里就不提供脚本了,算是大家的作业吧.我分享的成品工具是3*3范围,我觉得是最合适的
              最后的图是在寒冰王座使用符咒召唤魔王时,坐标判断的代码,基础差的可以参考,应该就差不多了.


              IP属地:广东8楼2022-10-10 17:56
              回复