以下[0-F]表示16进制的一位,">>"表示客户端向服务器发送的包,"<<"表示服务器返回的包.长度指byte的个数,小鸽子指eyou自带的登录工具.
通讯的包格式如下: Header+Data
Header格式:4byte,第一byte为02,第二byte为flag,第三byte为00,第四byte为该包长度
Data格式:由n个Record组成,n>=0.
Record格式:第一byte为flag2,第二byte为Record长度,余下为该Record的数据.
开头数字为Flag,"—>"后面的是flag2,":"后面的为Record数据 ";"后为注释,字符串未注明均以0结尾,按照登录顺序有下表,
01>>用户名和域
- —>01:学号 ;字符串 - —>02:域 ;字符串
02<<4个64位分组密,分两组
- —>05 ;长16byte - —>11 ;学号+域 长16byte
03>>密码
- —>01:加密的学号 - —>02:加密的域;localhost - —>03:加密的密码 - —>04:整数;4byte,城域为0,国内为1,国际为2 - —>06:加密的一个东东 ;16byte,用来以后发送udp包用 - —>0F:加密的mac
04<<登录成功
- —>07:跟时间(秒)成线性关系的一东东;4byte可能是服务器开机/初始化时间 - —>09 :余额;字符串(非0结尾) - —>10 :eyou协议的版本;字符串(非0结尾),当前是1.0.3
05<<登录失败
- —> ;密码错误,此时没有Record - —>0E :其它出错信息;返回字符串,如"服务器失败","此IP不能登录您的帐号",帐号锁定","余额不足"等等
06>>下线
- —>01 ;加密的学号,同 服务器返回flag为03,flag为01的Record - —>02 ;加密的域 ,同 服务器返回flag为03,flag为02的Record
07<<下线信息
- —>09:余额 ;字符串(非0结尾) - —>0A:本次消费 ;字符串(非0结尾) - —>0B:下载字节 ;整形64位 - —>0C:上传字节 ;整形64位 - —>0D:时间 秒 ;整形32位
09>>保持在线,发送包
- —>07; 16byte
0A<<返回
- —>07; 16byte
0B<<返回
- —>;没有Record,通知客户端已经终止了连接"
0D>> 查询余额
- —>;没有Record
0E<<
- —>07;也就是上面的下线信息,同 服务器返回flag为07的Record.
C:\WINDOWS\eyouipb.ini里面倒数第二行是mac地址,最后一行是加密后的密码,利用服务器返回的第二组密钥解密,然后用第一组密钥再加密,发送给服务器.
登录成功后,每隔10s,客户端发送一个UDP包,通知服务器在线.同时服务器也回返回确认包, 这个包初始是Flag为03,flag2为06里的那个东西,它是取随机数,再取md5获得的.以后不断由客户端和服务器加密/解密后发送.
加密算法在tean.c中,对算法感兴趣的可以google tean和xtea.
最后,该协议还不完全,eyou的协议还有服务器给客户端发送通知的功能.