|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 网络游戏是需要服务器的,这样才能玩家之间,服务器和玩家之间进行通信。 所以,我们的很多动作,都是要向服务器发包的,那么我们只要能够锁定正确的发包函数,就能很容易的通过调用关系找到该动作的函数,以实现调用的目的。 当然并不是所有动作都会发包,例如打开包裹,这样动作只要我们自己知道就可以了,不需要其他玩家或则服务器知道,那么就不需要发包。 API中有三大发包函数分别是 send sendto和WSASend 如果我们是游戏开发者,不考虑破解风险以及外挂风险的话,我们会毫不犹豫的选择其中之一使用。 因为谁也不想干些徒劳的事情,但是正如之前所说,网游都需要发包,那么外挂制作者都知道这一点,只要对这三个发包函数下断,几乎可以拿到所有想要的功能函数,所以,现在的游戏公司大多都会重新实现发包函数。 那么,重新实现的发包函数又怎么查找呢?其实并不困难 方法一,无论发包函数怎么重新实现,结构,特征都是不会发生太大的变化的,只要搜索其特征码即可,当然这样的工作量并不小,一是我们并不确定其所在的模块是什么?那么挨个实验?太苦恼了。二是我们不知道,他用的这三个中的哪一个,那么挨个实验?苦恼*2! 方法二,send sendto和WSASend三个函数内部都会调用更内层的系统函数WSPSend,那么我们只要找到WSPSend 就可以对其下断,然后返回到真正的发包函数了,WSPSend怎么找呢?我们可以找一个简单的程序,例如直接用send发包的函数,在send函数内的第一个虚表函数上下断,断下以后F7进去就是WSPSend了,是不是很简单呢?当然,这个函数也有可能被破坏或则下钩子之类的,那么特征吧。。。更内层函数吧。。。没有他法了。 方法三,通过人物喊话等频繁拷贝内存的动作,找到一些关键的缓冲区,而实现直接找到明文发包函数的位置,如果得到明文发包函数还是不够,通过明文发包正向追踪发包函数还是比较麻烦的,这个以后会专题讲解。 找到了发包函数,就万事大吉了吗?还没有,这只是第一关,还有第二关,找到了发包函数,有时候我们发现,他并不能断到功能函数,无论什么动作,堆栈返回都是一样的,怎么也返回不到功能函数,这种情况往往就是线程发包。 那么我们来看看线程发包又是怎样的情况 以图来说明
知道原理,处理方法就很简单了。 追踪包内容的来源或则改写发包标志位的位置即可, 因为标志位的改写和包内容的来源一定是线程以外的,只要找到这些位置,那么我们也必然是跳出了线程。那么所有功能函数唾手可得。 |
【游戏逆向】逆向基础之发包函数和线程发包
douluo9982024-04-07 11:45
相关推荐
TESmart碲视2 小时前
HKS201-M24 大师版 8K60Hz USB 3.0 适用于 2 台 PC 1台显示器 无缝切换 KVM 切换器翻滚吧键盘5 小时前
查看linux中steam游戏的兼容性m0_5522008210 小时前
《UE5_C++多人TPS完整教程》学习笔记40 ——《P41 装备(武器)姿势(Equipped Pose)》点金石游戏出海1 天前
每周资讯 | Krafton斥资750亿日元收购日本动画公司ADK;《崩坏:星穹铁道》新版本首日登顶iOS畅销榜wsdchong之小马过河1 天前
2025《烈焰之刃》游戏攻略Alfred king2 天前
面试150 生命游戏向宇it2 天前
【unity游戏开发——网络】网络游戏通信方案——强联网游戏(Socket长连接)、 弱联网游戏(HTTP短连接)ii_best3 天前
按键精灵 安卓脚本开发:游戏实战之自动切换账号辅助工具Alfred king12 天前
面试150跳跃游戏D1555408805812 天前
游戏护航小程序源码游戏派单小程序搭建游戏代练小程序源码