0x01 密码校验  

启动 TeamServer 后,会创建 SecureServerSocket 对象并且循环调用 acceptAndAuthenticate 方法等待 Controller 连接

CS 登陆通信流程分析_CS流量分析

在接收到信息并验证成功以后,才会去调用 clientAuthenticated 方法来线程执行 ManageUser 以处理与 Controller 的信息

CS 登陆通信流程分析_CS流量分析_02

当 Controller 在点击 Connect 按钮时,会调用 Connect 中的 dialogAction 方法,会先创建SecureSocket 对象,并调用 authenticate 方法进行验证

在创建 SecureSocket 对象时,会与 TeamServer 进行握手等操作,TeamServer 会进入SecureServerSocket.this.authenticate 方法进行验证,此时会一直在 var4.readInt() 阻塞,直到Controller 将信息发完 

CS 登陆通信流程分析_CS流量分析_03

接着来看 Controller 的处理,在 authenticate 中,进行了数据包的构造,先写入一个标志 48879(int),接着是密码的长度(byte),然后是密码,之后用 65 来进行填充密码长度加填充长度,不超过 256,再加上标识位和密码长度,256+5=261

CS 登陆通信流程分析_CS流量分析_04

CS 登陆通信流程分析_CS流量分析_05

接着在 flush 之后,TeamServer 就开始验证了,判断标志位是否正确,读取密码,读填充字符

对比密码,如果正确,写回标志位 51966