|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 网络游戏是需要服务器的,这样才能玩家之间,服务器和玩家之间进行通信。 所以,我们的很多动作,都是要向服务器发包的,那么我们只要能够锁定正确的发包函数,就能很容易的通过调用关系找到该动作的函数,以实现调用的目的。 当然并不是所有动作都会发包,例如打开包裹,这样动作只要我们自己知道就可以了,不需要其他玩家或则服务器知道,那么就不需要发包。 API中有三大发包函数分别是 send sendto和WSASend 如果我们是游戏开发者,不考虑破解风险以及外挂风险的话,我们会毫不犹豫的选择其中之一使用。 因为谁也不想干些徒劳的事情,但是正如之前所说,网游都需要发包,那么外挂制作者都知道这一点,只要对这三个发包函数下断,几乎可以拿到所有想要的功能函数,所以,现在的游戏公司大多都会重新实现发包函数。 那么,重新实现的发包函数又怎么查找呢?其实并不困难 方法一,无论发包函数怎么重新实现,结构,特征都是不会发生太大的变化的,只要搜索其特征码即可,当然这样的工作量并不小,一是我们并不确定其所在的模块是什么?那么挨个实验?太苦恼了。二是我们不知道,他用的这三个中的哪一个,那么挨个实验?苦恼*2! 方法二,send sendto和WSASend三个函数内部都会调用更内层的系统函数WSPSend,那么我们只要找到WSPSend 就可以对其下断,然后返回到真正的发包函数了,WSPSend怎么找呢?我们可以找一个简单的程序,例如直接用send发包的函数,在send函数内的第一个虚表函数上下断,断下以后F7进去就是WSPSend了,是不是很简单呢?当然,这个函数也有可能被破坏或则下钩子之类的,那么特征吧。。。更内层函数吧。。。没有他法了。 方法三,通过人物喊话等频繁拷贝内存的动作,找到一些关键的缓冲区,而实现直接找到明文发包函数的位置,如果得到明文发包函数还是不够,通过明文发包正向追踪发包函数还是比较麻烦的,这个以后会专题讲解。 找到了发包函数,就万事大吉了吗?还没有,这只是第一关,还有第二关,找到了发包函数,有时候我们发现,他并不能断到功能函数,无论什么动作,堆栈返回都是一样的,怎么也返回不到功能函数,这种情况往往就是线程发包。 那么我们来看看线程发包又是怎样的情况 以图来说明
知道原理,处理方法就很简单了。 追踪包内容的来源或则改写发包标志位的位置即可, 因为标志位的改写和包内容的来源一定是线程以外的,只要找到这些位置,那么我们也必然是跳出了线程。那么所有功能函数唾手可得。 |
【游戏逆向】逆向基础之发包函数和线程发包
douluo9982024-04-07 11:45
相关推荐
EanoJiang6 小时前
类蜘蛛侠+刺客信条暗杀动作系统开发日志★YUI★8 小时前
学习游戏制作记录(玩家掉落系统,删除物品功能和独特物品)8.17谷宇.8 小时前
【Unity3D实例-功能-拔枪】角色拔枪(二)分割上身和下身NRatel1 天前
亚马逊S3的使用简记(游戏资源发布更新)天波信息技术分享1 天前
AI 云电竞游戏盒子:从“盒子”到“云-端-芯”一体化竞技平台的架构实践小杨 想拼1 天前
使用js完成抽奖项目 效果和内容自定义,可以模仿游戏抽奖页面qq_546937272 天前
一款开源的远程桌面软件,旨在为用户提供流畅的游戏体验,支持 2K 分辨率、60 FPS,延迟仅为 40ms。How_doyou_do2 天前
关于截屏时实现游戏暂停以及本地和上线不同步问题李昕壑2 天前
CS2服务器是何方神圣wanhengidc3 天前
云手机选哪个比较好用?