本帖最后由 ganyilu 于 2021-9-5 02:24 编辑
以前,我也苦苦寻求,寻路CALL怎么寻找。甚至还在吾爱发过帖子。 当然了,结果只会是石沉大海。 后来我看过所有教程,没有用啊。 全是,发包下断,找CALL。 大哥,都2021年了,你还发这些大清年代的东西。 慈禧老佛爷也许会爬出来给你点赞
萌新小白,也会把你当大神,可是,稍微有点基础的,只会把你当白吃,圈钱G。 很多出名的培训班,出教程的,都乐此不疲,天天翻录几百年前的发包下断找CALL教程。我就不点名了。 这些教程,只能对2010年前的游戏有用,而且还是那些已经关服了的。 没关服的都有心跳,有些无论发什么包,长度都一样,你也没法过滤。 后面新出的游戏,基本都是线程发包了。 线程发包,也不是不能找,但都不是新手能玩的。这里就不说了。 还有一些教程,CE录一半,动不动半路杀出个OD,CE配不上你那高贵的身份了嘛。 当然了,我也不是黑OD,我也用。 我只是想说,你录,就好好录,OD能做的,CE基本都能做。CE能做的,OD大部分都做不了。 OD太老了,看你视频的,未必会用啊。录一半拉出个OD,什么鬼。 CE简单就能实现的东西,有必要这样吗。
其实,找数据,找CALL,调试,CE都可以独立完成的。 可惜的是,没有任何一个视频。单独用CE到最后的。 32位的OD,已经不适应这个时代了。现在游戏都是64位。
现在,以64位游戏为例子,CE独立完成找CALL任务。这次没有OD什么事了。
为了保护游戏厂商隐私,这里不爆游戏名字了。 通用的,我试过很多游戏,可以说,所有游戏通用。
首先,通过上北下南,左西右东,这个规律,来找XY坐标。 99%的游戏适用这个规律,可以快速找到坐标,节约时间。 如果找不到,自己慢慢搜变动吧,这真不难。 (注意:本文是先图,后文)
箭头指向屏幕正上方, 此时,CE,附加游戏,选单浮点,搜索未知的初始值。 搜索完成之后,回到游戏,往右走,回到CE,搜增加的数值。 往左走,搜减少的数值。 多次反复搜索后,已经没法筛选。此时可以用一半选择法来筛选数据。 选择一半的数据,空格锁定。然后回到游戏,左右移动,看看人物角色是不是没法移动。 (如果游戏崩溃,就不要用这种方法了,筛选方法多得是,自己琢磨。)
如果角色动不了,说明X坐标就在里面了,把另外那一半数据删掉吧。如果能动,删现在锁定的地址。
找到了X坐标之后,通常Y坐标会在X地址+4,也有可能是+8。当然,也有XY坐标是反着来的。小几率会遇到X-4。 甚至,还会遇到二叉树类型,XY坐标不在同一个页面上,当然,这是极少数的。
现在是,Y地址=X地址+4 其实,大多数游戏,找寻路CALL,完全不需要用到当前人物坐标地址。 我找它,仅仅只有一个小小的妙用,当然,这个妙用也可以不用。 寻路call,就是自动走路,走路就会有一个目标,目的地。 也就是寻路CALL的最最最关键最最最重要的参数。
目标XY坐标地址。
首先,游戏随便点一下最近的寻路,寻路完成。回到CE,单浮点类型,选未知的数值,搜索。 然后点击任意地方,让游戏寻路,搜索变动。 寻路完成后,此时,目标X坐标值,和人物当前坐标,应该会一致。就算不一致,相差也不会太大。
所以,随便搜一个介于人物当前坐标的2个数值。
找到数据咯,简单的数据,如果还需要人教的话,基本没有学下去的必要了。 目标X坐标,不止一个,但真正被寻路CALL直接访问的,只有一个。就叫它“真”目标X 剩下的很多都是间接访问,或者说CALL最前面的地方以及CALL里面很深的地方在访问的“假”目标X。 如果你没找到真正的直接访问的目标X,你将会很绕,绕一大圈。当然,技术足够,也能找到寻路call。 无非是,下断,追溯,或者回溯。找不到真正需要的寻路CALL,绕来绕去,哪怕是老手都绕蒙圈。 当然,换种说法,你其实已经在寻路CALL里面了,你已经找到了。 但是,你选择的CALL,怎么调用都不会起作用。 还有一种可能,这个“假”目标X,是另一条线程的,如果是,你追一辈子,也追不到真正的寻路CALL。
新手找CALL,基本都是死在这里了。真正的数据你都没找到,你还玩个P啊你。
那些数据可能会干扰你的判断,无法找到真正的目标X,但这不是游戏公司刁难你,而是这些目标X也有它自己的作用。 让我说出所有目标X的作用,我也讲不出来,这得问该游戏开发人员。 对着真正的目标X坐标地址,单击右键,点 “找出是什么访问了这个地址” 从本人20年网龄的经验上来看,第一行代码,跟我们没任何关系。
接下去看第二行,第二行跟我们有非常重要的关系,但是跟这个教程没任何关系。 很明显这是一个赋值,有非常重要的利用价值,但是本次教程不管它。 (解释一下第一行为什么和我们没关系) (因为第二行才开始新的赋值(给目标X地址,赋值新的参数)) (赋值之后,寻路call相关的函数,才开始访问目标X)
(所以,第一行就是前女友,过去式,跟现在的我们没任何关系了。我也没兴趣看它到底是干什么用的,没必要。) (第二行是刚和现任女友交往。)
(第二行下面的都是,把现任女友介绍给大家(寻路相关的call)认识) (最后一行,不用说,铁定是分手(寻路CALL走完全程了),分手前问候一下,回归单身状态。)
既然是寻路call,肯定仅仅是访问,或者说读取,获取目标坐标,所以理应在赋值X坐标后面。 第六行,也就是最后一行,SUBSS,也跟咱没关系,只有间接关系。 我知道,无非就是确认到达目标相关的代码访问了目标X。 所以,寻路call,就在第三,第四,第五行里面。全是获取目标X进XMM0寄存器里面使用。
存在即是道理,三条都存在,肯定有它自己的人生目标,不然活着多么没意思。此时我不看里面的代码,我也能知道,这三行代码,都是有用的。 寻路嘛,肯定得先取一下目标位置,先判断一下障碍,然后获取一下目标,再设计寻路路线。 所以,根据我二十多年的上网经验来看,肯定最后一个才是真正的寻路call。
这些基本都是寻路call相关的函数了。不管是第一个,第二个,还是第三个,都是至关重要的。
游戏开发不会那么闲,给你写个无聊访问你寻路目标X,却什么都不做的代码。
虽然找到寻路CALL了,第三个就是,但是不是感觉不会用,嘿嘿。 你们在视频教程里面看到的那种,输入XYZ,就能自动寻路的游戏,基本不存在。 (有些老游戏,可能还存在,直接PUSH XYZ,CALL就能寻路。当年的游戏开发可能太单纯了。现在人心太复杂。)
估计那群做视频的小菜鸡,也不知道怎么处理,嘿嘿。 他们只会挑一些自己能做的游戏,发一下教程,圈一波。 硬骨头,没一个去啃。当然了,为了生活嘛,可以理解。
但我知道,嘻嘻,而且还不止2种方法。 太长了,下次再发这种使用复杂参数寻路CALL的教程。 毕竟,本次内容是寻找寻路CALL,而不是使用寻路CALL。 如果想要新线程调用的话,不太现实的,第三个是寻路CALL啊,虽然参数多,慢慢找也能找。但是没有前面两个函数路障判断,能寻路嘛。 也不用听某些视频里面,说下断跟下去,寻找一些参数简单明了的CALL,自己会用的。 也许个别游戏可以,但是99.99999999%的游戏不行。 即便寻路成功了,也会因为缺少部分重要参数,出现各种BUG。
哪有这么简单的游戏给你这样用,除非是培训班给学员独立开发的游戏,方便学员做内存寻路。 假设,某猪场,是某培训公司。边开发游戏,边做内存培训班。 他可能会,把路障计算,路线计算。放在寻路CALL里面或者后面, 先让你直接填XYZ参数,方便你远程调用,还顺便帮你平衡了堆栈。 例如32位游戏
PUSH 2021.000000 PUSH 2010.000000 PUSH 100.000000 CALL 0XAAAAAAAA 或者64位游戏 MOVSS,XMM0,2021.000000 MOVSS,XMM1,2010.000000
MOVSS,XMM2,100.000000
CALL 0XAAAAAAAAAAA 当然,这是错误写法,我知道,这是方便不懂汇编的人看的。虽然我也不懂汇编, 但好歹也知道浮点数要转十六进制,XMM0不能直接赋值。
认识这游戏的,不要去发游戏名,没意义的,任何游戏都一样,没有针对谁。
以前我看了很多视频教程,一点作用都没。最后还是靠自己灵光一闪,瞬间顿悟。一通百通。 思路和经验,都非常重要,这些东西,别人是很难教你的。说了都不一定懂,全靠自己累积。 能学下内存的人,真的不多了,难度淘汰99%的人。技术学够了,保护,检测,又淘汰一大批人。 那些教程,存在严重的误导性。 表面上什么都讲,基础理论一些东西,但好像又什么都没讲,因为一点干货都没有,纯粹是浪费时间的。 看似学到了很多东西,但好像又什么都没学到,实战没多大意义。 就像本文一样,表面已经完成了核心内容,寻找寻路CALL,找到了嘛。确实找到了,也试验成功了。确实是寻路CALL 但是最关键的,使用寻路CALL,偏偏不讲。哎呀,就是玩儿。 吃得太饱了,睡不着,凌晨写了这。仅仅是给一部分有基础的人,提供一点点帮助。 黑字是基础技术,对新手有用。 红字是感悟,对有点基础功底的有用。 欢迎大佬指正,哪里不足或者错了。 我虽然经验丰富,但是基础理论知识真的不行。 比如汇编基础,毕竟是半路出家的。 其实我根本没学过汇编,都是认识几个指令,就开始瞎编。 机器不认,我就继续编,编到认为止。我就是这么走过来的。
(原创内容)
|