协议测试-01协议测试基础

大概要开始回顾计算机网络了……

介绍

网络协议:计算机网络中进行数据交换而建立的规则、标准或约定的集合。

OSI七层、TCP/IP模型网络架构:

  1. 物理层(网卡): 定义的硬件设备标准,用于计算机之间的数据传输,传输bit流。
  2. 数据链路层(交换机):数据帧,对bit数据格式化,校验。目的是保障数据传输可靠性
  3. 网络层(路由选择,点到点):IP寻址,通过IP连接网络上的计算机。
  4. 传输层(端到端):建立了主机端到端的链接,主要关注tcp、udp。ipv6传输效率高就和这层有关。
  5. 会话层(会话控制):管理不同设备之间通信。
  6. 表示层(数据格式转化):对应用层数据编码和数据格式转换,保障不同设备之间通信(windows和linux)。
  7. 应用层:提供应用接口,为用户直接提供各种网络服务

协议测试包括四种测试

  • 一致性测试(Conformance ):检测所实现的系统与协议规范符合程度;
  • 性能测试(Performance ):检测协议实体或系统的性能指标(数据传输率、联接时间,执行速度、吞吐量、并发度等);
  • 互操作性测试(Interoperability ):检测同一协议不同实现版本之间、或同一类协议(如电子邮件协议X.400和SMTP)不同实现版本之间互通能力和互连操作能力;
  • 坚固性测试(Robustness ):检测协议实体或系统在各种恶劣环境下运行的能力(信道被切断、通信技术掉电、注入干扰报文等)。

主要测试点

1.数据类型溢出:通信双方对协议数据类型的解析不一致,导致内存操作错误。
2.数据包构造欺骗:根据数据包的规则创建出一新的数据包,填充数据包后发给server,用来模拟client的操作(比如使用某些不存在的物品)。
3.数据包重发:拦截和监听数据包,把监听到数据包重复发送给server,检测server是否有容错检查。
4.逻辑数据包先后次序:例如在未锁定情况下交易,CF在同时捡取物品时变身。
5.C/S定义数据长度字段不一致:在便携程序是未考虑到client上发送数据的安全性,未对字段ncount进行检查导致内存copy越界。
6.非正常逻辑server未做检查:例如提交任务/NPC编号不存在,发送私聊的GID不存在。

测试方法

给游戏做协议测试的时候,一般没有数据、字段的说明,需要自己先去解析,获取不同字段代表的意思。
大致原理

  1. HOOK目标进程的send,sendto,recv,recvform函数,监听数据包
  2. 揭秘解码数据包形成明文包
  3. 修改明文数据包
  4. 编码加密数据包发送到server
------------- The End -------------