什么是线程循环发包 ?

介绍

有线程循环发包,就有非线循环程发包(也叫主线程发包)。在游戏中线程循环发包会导致调试器断下后查看调用栈拿不到有用数据(不同的操作触发的发包断点,调用栈都一样),而主线程发包则可以在调用栈中查看是谁调用了发包功能。相比线程发包,逆向主线程发包会更加容易。

如何分辨是不是主线程发包

首先肯定是跳转到3大发包函数,send , sendto ,WSASend 分别下段。 如果还没等你操作断点就马上就断下而且断的非常的频繁,那么基本就是线程发包了。除此之外,是主线程发包的可能性比较大了。

主线程发包逻辑:
1.玩家操作
2.调用功能call
3.整合明文数据包
4.数据包加密
5.系统调用发包函数

在这里插入图片描述

这种情况,只需要在发包函数下断点然后一直让调试器执行到返回(也可以直接看栈回溯),最后就能回溯到功能call

线程循环发包逻辑:
**1.玩家操作
2.调用功能call
3.整合明文数据包
4.数据包加密
5.封包入队列
6.发包线程从队列中取出封包并发送
**
在这里插入图片描述

这种线程循环发包与真正的功能CALL是独立的,所以如果要分析这种方式发包的游戏就得从发包的数据跟随找数据来源。

因为我们要从数据的来源分析,所以就需要跟着 send 函数的buf 参数开始着手分析:

int send (SOCKET s, const char *buf, int len, int flags); 

给 buf 下内存写入断点,这个时候会基本都会断在一个 mov xxx,yyy 的指令上,观察 [yyy] 是否为你找找的包头特征,如果是,就多次执行到返回,最后就可以到达程序领空。

为什么给buf设内存断点就能跳出死循环?
因为给buf设内存断点的时候,你断到了组建buf的过程(也就是步骤 3/4),当你跳出这个过程的时候,那你就找到了组建的开始,也就是功能call执行完后,开始组包 。

为什么bp send会一直都是一样的结果 ?
bp send的时候,断到的是组好包后的结果,发包线程和功能call线程不在同线程,调试的时候只有一个线程是激活状态,其他线程都出去挂起状态,单步跟踪无法跨越线程。

但是这种方法有一个前提,就是 buf 的地址必须是固定的,如果游戏的代码写成这样:

// 如果是在循环外面,就可以使用上面内存写入断点的方法
// char buf[256] = {0};
while(1){
	char buf[256] = {0};
	// 调用 send 发包函数
}

那么每次调用 send 的时候,buf 都是新申请的内存导致地址变更。但好在在这个大循环里创建变量本身就是很消耗性能的,大部分的游戏不会这么写,但如果真碰到了只能找其他的思路了,比如从封包队列入手。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
本课程主要以口袋西游为例,学习一个网络游戏是怎么通过游戏服务器与玩家客户端进行通信交互的,通过OD,CE等工具对游戏进行调试,找到各个数据基址(例如角色基址,背包基址等),找出游戏里面的功能CALL(例如寻路CALL,打坐CALL等)及参数分析,并且编码实现功能。本课程可以带领你游戏逆向入门可以学会 CE,OD,找游戏基址,功能CALL等实现变态功能可以更深入的理解从高级语言到汇编语言的一个对应过程可以学会 逆向软件  外挂与反外挂 破解防破解  游戏安全的基础知识可以为以后的及逆向高级课程 打下良好的基础可以自己分析游戏数据,用C语言实现游戏外挂功能等重点:  本套课程的重点就是带领大家分析游戏数据,毫不客气的说,各位学完此套课程对分析游戏数据这块会有一个质的飞跃。课程目录  01.课程简介及功能演示  02.CE找人物基址及人物属性偏移  03.OD找人物基址及人物属性偏移  04.创建MFC DLL项目  05.代码实现输出人物信息  06.发包函数概述  07.怎么看待重写的发包函数  08.普通发包线程发包  09.找打坐CALL及参数分析  10.代码实现打坐CALL  11.喊话CALL及参数分析  12.代码实现喊话CALL  13.找寻路CALL及参数分析  14.代码编写寻路CALL  15.穿装备CALL及参数分析  16.代码实现穿装备CALL  17.NPC对话CALL  18.代码实现NPC对话CALL  19.唤出宠物  20.宠物合体  21.收回宠物  22.取下宠物

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值