04授人以鱼不如授人以渔(send和recv调用与实现call篇二)

04授人以鱼不如授人以渔(send和recv调用与实现call篇二)

ID:8789546

大小:652.50 KB

页数:19页

时间:2018-04-07

04授人以鱼不如授人以渔(send和recv调用与实现call篇二)_第1页
04授人以鱼不如授人以渔(send和recv调用与实现call篇二)_第2页
04授人以鱼不如授人以渔(send和recv调用与实现call篇二)_第3页
04授人以鱼不如授人以渔(send和recv调用与实现call篇二)_第4页
04授人以鱼不如授人以渔(send和recv调用与实现call篇二)_第5页
资源描述:

《04授人以鱼不如授人以渔(send和recv调用与实现call篇二)》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、04授人以鱼不如授人以渔●(send和recv调用与实现CALL篇二)======================send函数的调用====================P:用模拟器拿到当教程,是因为模拟器比较简单,讲一些原理方面的东西比较好.我们学习的是原理而不是方法,很多人抱怨说模拟器根本就没用,其实不然,模拟器给我们提供了学习原理最好的途径.不要只学习方法,比如说下bpsend然后返回,然后就急冲冲的去找游戏里的CALL,这样你会摔的很狠.你要懂得为什么要这样做,游戏是怎么调用的?算法结构如何?系统是怎么调用函数

2、的?等等的一切,等你了解之后自然而然就会恍然大悟,当然一切的基础就是汇编基础.   上回说了,游戏大部分都是用send 或者是WSASend 来像服务器发送数据的.现在封包没有加密的游戏越来越少了,可以说快绝种了,现在存在封包没有加密的游戏有 星尘传说(最近加入了心跳包) 问鼎 等等*心跳包是指每隔一段时间像服务器发送一个数据.一般用于验证是否掉线.因为像心跳一样,每隔一段时间动一次就比喻为心跳包. 这个是我们用到的模拟器. 一个服务端一个客户端封包没有进行加密,今天我们来找send CALL来达到发送封包的目的.老样子

3、,打开OD载入下bp send  点一下 进入OD开始断下 堆栈窗口显示出send的函数所需要的参数.我们打开MSDN查一下send所需要的参数(MSDN是微软发布的WINDOWSAPI函数的开发手册里面有所有函数的解释和细说) send (socket(套接字),封包数据,封包长度,标识)这个就是send函数所用到的参数了套接字:每次跟服务器连接后都会返回一个类似于端口的一个数字 用来双方互相通信.你可以把它想象成一个通道.封包数据:就是发送封包的内容封包长度:封包内容的长度标识:这个无需管他,默认为0好了 我们返回一

4、层就能看到send函数了. 按照调用约定 参数是从 右边开始压入堆栈的首先是标识  0然后是大小接着是数据内容最后是套接数也就是socket我们在 CALLEBP 下断(按F2)然后运行起来点一下 加血就会断下来send相关值是  套接数=EC封包内容="jx50"长度=4标识=0call71A24C27好了 我们用CALL注入器写一个试试 push40300E这个是如何来的呢?因为我们要发一个封包数据但是代码注入器无法给内存写入所以我们可以用CE找一个空白的地址然后往里面写入我们需要的封包数据 搜索0 会出来一大堆随便

5、选一个 然后把 类型改成文本 值改成jx50然后把这个地址压入到 堆栈中 就可以调用成功了~~ 当然CALL之前别忘了把send断点给去掉.=====================socket的调用======================这个时候你可能会注意到.这里socket的值是EC.如何取到这个值呢?这个时候我们可以参考下window函数socket的那部分 创建一个通信连接并返回一个套接数值.好了我们来找一下这个值吧.从模拟器我们可以看到,这个模拟器在打开的时候会连接到服务器段.这个时候我们从套接数下手打开

6、CE 搜索 EC(此次套接数的值) 出来17个,绿色的是基址.可以排除了.因为套接数的地址不可能不会发生变化.把剩余的7个都选中 这个时候我们如何确认7个中是我们要找的呢? 将 所有的地址改成不同的值 这个时候我们开始断加血. 断下来以后我们发现EC的值变成了EC2了这个表明用CE修改成EC2的地址就是我们要找的 在命令行输入 dd009E1AE0 (每个人的地址都不一样)就会以地址的形式显示出数据的类型*da 是汇编代码类型*dc 是文本类型*dx是短行16进制*db是16位显示*其他的我就不列举了网上有很多的.然后我

7、们下硬件断点,然后重新运行(因为只有重新运行的时候才会重新连接,才会往写入套接字)断在了程序入口处 我们按F9 断在了一个代码里 但是我们并没有发现有套接字的写入操作看来这步是行不通的.我们换一个方法我们来断socket 像send一样下bpsocket选择 运行重新开始 来重启程序 为什么要重启呢?因为我们要找写入谁写入了套接数地址的值重新运行后断在程序开始的地方 按下F9 运行 程序会立马断在这里.这里堆栈显示了 socket 函数和他所需要的参数.这里我们按ALT+F9 返回程序领空. (CTRL+F9是返回上一层

8、 这里我们可以用ALT+F9直接返回到程序段) 好了 返回到这里 .这里就是SOCKET的代码了.在CALL这里下段然后在重新运行一次  断在程序入口处 按运行 断在了刚刚我们断的CALL地方把 bpsocket的断点删了在按F8 单步运行 这个时候CALL 返回了 SOCKET套接数 放在EAX寄存器里 这个就是我

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。