YJX_rxjh_23_3.2.5

利用分析数据 实现走路/寻路

【03:30】0x0146DFF8 目的地坐标基址

【04:50】准备 测试代码

【05:00】0x06600168,这个地址 不是一个基址(ZC: 但是我记得游戏重启后 还是这个地址,它都没有变化的... 换台机应该就肯定不对了),本节课来找到它的基址

  【05:22】内存写入断点 断下,删掉断点 防止游戏掉线,分析代码... 找ESI的来源

    【07:00】最好的方法是通过CE来找(ESI的来源),这样的话 要容易一些 (ZC: 用CE怎么找?直接搜 存放0x06600168的地址?然后一层一层往上找?如果遇到偏移的话 就把偏移去掉 再搜索?)

    【07:54】这里,ESI被赋值为本函数的传入参数([EBP+10]) 【08:05】这里,断下来的话,ESI的之后就是0x06600168

    【08:49】找到两处 对 传入参数([EBP+10]) 进行赋值的语句 【08:55】来源,这样就找到了 基址 和 相对偏移 【09:15】记下EBX的值 0x065FEC8C,EBX的值 也就是我们所说的基址 (ZC: 也不需要验证一下? 这里OD不是断下的状态 EBX就这样确定下来了,也没有验证 是不是基址...) 【09:50】“dd 065FEC8C+15B0” 看了一下,指向的值为0,看来就是不正确的了,虽然说 它也是写入[EBP+10],065FEC8C+14DC 应该是正确的 【10:12】[EBX+15B0]没有断下来,[EBX+14DC]断下来了。 【10:40】游戏中走路测试 验证了一下

【11:05】目的地地址 分析出来了 065FEC8C+14DC 目的地坐标基址

【11:13】测试代码 编写思路

  【17:50】“byte ptr”

  【19:15】类似 指令"mov [ebx], 局部变量"是编译通不过的,需要拆成2句指令。类似"mov [ebx+???], 1"是可以通过编译的

  【20:00】汇编指令 函数编写完成,写 调用walk的代码

  【20:45】测试代码

    【21:12】可以走路 【21:20】虽然能够走路 但是有一点觉得奇怪 (ZC: 【21:25】注意到,他的 注入到游戏的窗体 在失去焦点的时候 还是会挡住游戏的窗口的) 【21:25】还想它还能够穿墙

【21:35】小退游戏一下(ZC: 回到选择人物界面),看看在游戏里面是否真正的进行了走路 也就是说 是角色只是在客户端界面上进行了走路 还是服务器端也进行了走路

  【22:15】好像 应该是成功了

  【22:18】再次调用走路代码,来到坐标为(-89,2072)

    【22:33】再次小退一下

      【22:57】服务器端 没有真正的走路

【23:10】如何 解决 客户端走路 服务器端不走路 的问题?

  【23:43】现在坐标(-58,909)

  【24:55】坐标显示 角色没有移动(ZC: 但是我确实看到 角色刚刚移动了...转了一圈 又回去了?...)

  ZC: 这里 它 把以前找到的疑似走路CALL 都拿来使用,这个原理是什么?这样就能解决本问题?WHY?

  【25:30】从3.2.3中复制测试代码,【26:20】写一个函数 walk3

    【29:00】再来调用一次

    【29:18】现在坐标(25,2104)

    【30:05】客户端 走路OK。现在客户端坐标为(25,2224)

    【30:33】小退之后,坐标也是(25,2224),说明服务器端也走路OK

【30:40】说明 我们找的CALL,最早找到的CALL是正确的,还要配合上一些基址的写入,最终正确。其它2个CALL可以删掉了

【31:00】测试的过程中发现 这段代码还可以穿墙。测试是否具有穿墙功能

  【31:50】有点怪,还有一些bug。【31:58】主要是在walk函数里面,修改2处

    【32:27】这次貌似现象OK

    【32:25】始终 它(ZC: 编写的走路功能代码)第2次调用的时候,类似有一个类似于 瞬移的功能,但是实际上它 应该是没有瞬移。【32:53】(125,2224) 看小退之后的结果如何 【33:21】好像真的实现了瞬移 【34:00】的确好像是实现了小范围的瞬移

1、

2、

 

posted @ 2016-05-21 22:05  DebugSkill  阅读(193)  评论(0编辑  收藏  举报