传奇3游戏登陆网关启动原理
首先是LOGINGATE,LOGINGATE和LOGINSERVER的5500进行通信,当两个服务都启动的时候,他们之间会不停的发送信息进行通信,可能是看看有没有断开的,这个信息如下:从LOGINGATE到LOGINSERVEr的是%--$,LOGINSERVER到LOGINGATE的是%++$;所有从LOGINGATE到LOGINSERVER的信息都以 % 打头,以$结束.当MIR3首次联接下Logingate时.logingate会发一个如下信息的封包到LOGINSERVER: %O+本联接的句柄+/+MIR3反在的IP+$.从LOGINSERVER返送回来的信息就是通过这个句柄确定是那一个MIR3的.当MIR3方输入帐号和密码,并发到LOGINAGTE后.LOGINGATE只是简单的加了一个头:%A+句柄+/+收到的信息+$;然后发到LOGINSERVER.当LOGINSERVER处理了信息后返回来的信息如下:%+句柄+/+要发到MIR3的内容+$;然后,LOGINGATE从这个封包中分解出句柄和真正到MIR3的信息内容后通过联接的句柄把信息正确的发送的句柄所在的MIR3去.当MIR3断开联接后.LOGINGATE会发一个:%X+句柄+$到LOGINSERVEr表示这个句柄的联接断开了.
然后是GATE30,GATE30和DBSERVER的5100进行通信,当两个服务都启动的时候,他们之间会不停的发送信息进行通信,可能是看看有没有断开的,这个信息如下:从GATE30到DBSERVEr的是%--$,DBSERVER到GATE30的是%++$;所有从GATE30到DBSERVER的信息都以 % 打头,以$结束.当MIR3首次联接下GATE30时.GATE30会发一个如下信息的封包到DBSERVER: %O+本联接的句柄+/+MIR3反在的IP+$.从DBSERVER返送回来的信息就是通过这个句柄确定是那一个MIR3的.当MIR3方选定分区,并发到GATE30后.GATE30只是简单的加了一个头:%A+句柄+/+收到的信息+$;然后发到DBSERVER.当DBSERVER处理了信息后返回来的信息如下:%+句柄+/+要发到MIR3的内容+$;然后GATE30从这个封包中分解出句柄和真正到MIR3的信息内容后通过联接的句柄把信息正确的发送的句柄所在的MIR3去.当MIR3断开联接后.GATE30会发一个:%X+句柄+$到DBSERVEr表示这个句柄的联接断开了.
最后就是游戏网关了.现在对网游戏网关的分析还没有分析透,它的方式跟上两 个网关完全不同.这点还希望跟大家一起研究.现在我所知道的如下:RUNGATE和EI的5100联系.不停的发送如下下封包:55 AA 55 AA 00 00 00 00 00 00 04 00 00 00 43 00 00 00 00 00(16进制),EI过来的封包如下:55 AA 55 AA 00 00 00 00 3A BA 03 00 B8 FD 12 00 00 00 00 00 00.所有从RUNGTE到EI的封包都以16进制数55 AA 55 AA打头,当MIR3首次联上RUNGATE后.RUNGATE会发送55 AA 55 AA然后加句柄.这儿的句柄也跟上两 个网关不一样了,它应该是把句柄转换成16进制值,然后高底位对换如:句柄10进制是:530,换成16进制后就是212,高底位对换后就成了12 02再加00 00 00 00+01+00 00 00 00 00+0E+00 00 00+MIR3所在IP的16制+0 结束.EI会回一个确认55 AA 55 AA +句柄+00 00 00 00 06 00 01 00 00 00
0010 00 00 00 00.当MIR3选择了帐号后发上来的封包RUNGATE会做如下形式发出去:55 AA 55 AA 句柄 00 00 00 00 05 00 01 00 00 00 4C 00 00 00 封包内容 00 也就是说这里的4C会变.他会跟据什么来做什么变化,现在还不清楚.同时EI过来的信息一般都很大一个.RUNGATE会对信息进行折分,然后一个一个的发出去.他们之间的封包关系我只明白这点.希望高手解说一下.
顺便说 一下,知道了LOGINGATE的原理后,自已写一个LOGINGATE然后对服务端的封包加一次密.在MIR3方用线程插入.修改SOCKET的API函数SEND和RECV成自已的然后拦截EI发下来的封包进行解密后再调用真正的RECV.这样做就可以真正的封挂机,比修改版本号强多了.同样的方法也可以对SEND的封包拦截分析封包内容.可以屏蔽什么后门GM呀.寄售BUG什么的.
|
|