04 授人以鱼不如授人以渔●(send和recv 调用与实现 CALL 篇二) ======================send 函数的调用==================== P: 用模拟器拿到当教程,是因为模拟器比较简单,讲一些原理方面的东西比较好
我们学习的是原理而不是方法,很多人抱怨说模拟器根本就没用,其实不然,模拟器给我们提供了学习原理最好的途径
不要只学习方法,比如说下bp send 然后返回 ,然后就急冲冲的去找游戏里的CALL,这样你会摔的很狠
你要懂得为什么要这样做,游戏是怎么调用的
算法结构如何
系统是怎么调用函数的
等等的一切,等你了解之后自然而然就会恍然大悟,当然一切的基础就是 汇编基础
上回说了,游戏大部分都是用send 或者是 WSASend 来像服务器发送 数据的
现在封包没有加密的游戏越来越少了,可以说快绝种了,现在存在封包没有加密的游戏有 星尘传说 (最近加入了 心跳包 ) 问鼎 等等 *心跳包 是指 每隔一段时间 像服务器 发送一个数据
一般用于 验证 是否掉线
因为像心跳一样,每隔一段时间动一次 就比喻为 心跳包
这个是我们用到的 模拟器
一个服务端 一个客户端 封包 没有进行加密 ,今天 我们来找 send CALL 来达到发送 封包的目的
老样子,打开 OD 载入 下 bp send 点 一下 进入 OD 开始断下 堆栈窗口 显示出 send 的 函数 所需要的参数
我们打开 MSDN 查一下 send 所需要的参数 (MSDN 是微软 发布的 WINDOWS API 函数的开发手册 里面有所有 函数的解释和细说) send (socket(套接字),封包数据,封包长度,标识) 这个就是 send 函数所用到的 参数了 套接字: 每次跟服务器连接后 都会返回一个 类似于 端口 的一个数字 用来双方互相通信