正常的游戏分析我们都可以由发包函数入手.跑跑卡丁车主要功能的包是通过WSASend发送的.
通过WSASend可以找到明文发包函数.这个不是我们今天探讨的重点.就此略过.
找到明文发包函数后.截取游戏所发的数据包.发现钓鱼流程一共有3个包发给服务器
0x9AF66D FpRpRiderStartFishingPacket 0x10
0x45D54C PrEnterFishingPacket 0x10
0x45EC5F PrEndFishingPacket 0x50
如图:
既然要寻找百分百钓鱼的call我就由PrEndFishingPacket入手分析.
0x45EC5F所在的函数为0x45EB20,在函数头部下断发现不管钓鱼是否成功游戏都会调用此处。
往上一层跟我们可以发现,这个函数有两处调用.如图:
两处传入的参数分别是push 0x0和push 0x1.明显这个call就是传递胜利与否.
但是经过测试直接调用会和服务器断开连接.而且我们发现当自己手动按了几次空格之后再调用此call就不会掉线了.
这可以说明游戏添加了标识符来判断是否非法调用钓鱼完成包
接下来的任务就是寻找模拟钓鱼的CALL了
在0x45EB20所在函数头部下断.发现我们每次按下钓鱼的时候都会断下来。
ctrl+F9执行到函数尾部.再F8回到上一层
固定ecx,自行调用.发现可以成功调用而且可以起到按空格键的效果。
但是存在一个问题就是判定是否钩中鱼我们需要想个办法让游戏判定为百分百钩中
回到0045E032 E8 E90A0000 call KartRide.0045EB20所在的函数
有两个字符串引起我的注意
尝试分析这个函数,不难发现0045DD90为判定是否钩中鱼,只要nop掉即可
至此,分析结束,剩下的就是编写代码部分,就没啥难度了
此贴仅作为技术交流所用,希望抛砖引玉,望大神们不吝赐教
[ 此帖被丶逢场作戏在2017-07-23 19:04重新编辑 ]