-
-
未解决 [求助]某游戏找地图数据,我所述的办法找不到,能不能提供下思路? 10雪币
-
发表于: 4天前 201
-
游戏是某传奇游戏。目的是:找地图数组(障碍物通行的数据)
我所试过的办法:
办法1:SEND断下移动的执行流,回溯到移动CALL,然后在CALL内找障碍物判断的代码,找地图数组。
移动CALL是找到了,但是内部我F7一条一条看,并没有看到地图障碍物相关的数据。。。
那个移动CALL,人物在墙边点墙(人物不会移动),不会执行那个移动CALL,判断障碍物的代码,很可能在那个CALL之前,但是我往前回溯,指令大概是这样:
JMP XXXXX
mov XX,XX //A处
XXXXXXXXX
.........
CALL 移动函数
是跳转过来的,上面不远处有个jZ A(不一定是这执行来的,但没看到其它位置跳A处),照此往前走,然后遇到的指令就是一直会断,我没能力回溯了。断下的寄存器值和栈顶部分数据也看不明白。。。不知道怎么断到想要的执行流。。。移动CALL的外层CALL是一直断,寄存器值压根不变,估计是全局变量传参进去的,我没能力在外层断到目标执行流。。。。内层无法回溯,稍外层没能力断到想要的,放弃此办法。
办法2:我点击拍卖按钮,这个按钮会更新数据,会调用SEND,试着回溯到鼠标点击CALL。
确实找到一个函数,按键盘不会断,但是鼠标点击就会断。。。我试了下,在墙边点墙(不能移动)和正常点地面移动都会断。我在该位置断了“墙边点墙”的执行流 和 正常能移动的执行流,作好标记,比对跳转,发现跳转都是一样的。。。放弃此办法。
办法3:想着当前地图对象里,会不会保存当前地图数组信息。我搜索当前地图的横向长度。
最终找到3个存当前地图横向长度的,这里暂时表示为地址A,B ,C。其中一个A,它附近除了存横向长度,还有纵向长度,当前地图名信息。有一个指针指向的位置进去就是 01010101 01010202(只有00 01 02三种值),很像障碍物数组,甚至连个数都像,500X500的地图,它那块数据刚好25W个字节,但是我写了个DLL,注入进去把那块全部写1,或全部写0,或全部写2,均对游戏通行无影响。。。存长度的那个结构里,没看到其它有用的,放弃此办法。
有没有人能提供一下,找地图数组的思路啊?
谢谢大家了!
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课