吵吵   2016-03-27  阅读:985

距离写完上一篇的协议分析都快过去一个星期了,如果我还不把后面的继续完,大概我自己都要忘了当初是怎么做的了。

废话还是少说了,这篇开始完成如何编程的这个问题。

一、抓包与分析。

如上一篇所言,并非所有的字段我们都是明白它的意义的,那么,抓包就显得还是有必要的,反正如果是固定的字段,你直接把抓到的信息给填充进去就好了。

windows下的抓包工具,大多数用的是wireshark,过滤出来所有的udp协议的包来研究就好。

如上文讲过,你抓到的数据其实是一堆毫无章法的乱码,不管是你发送出去的,还是你接收的,因为被加密了!

将抓包到的数据源格式保存起来,写一个程序读取里面的字节,解密后再写入到另外一个文件,再用utraledit打开分析,就知道是些啥了。

二、认证过程。

上一篇我们已经讲过了几种数据包的类型,接下来分析一下认证的过程:

1、客户端向1.1.1.8(3848)发送(SERVER = 0X0C)获取服务器地址包。

2、1.1.1.8会返回(SERVER_RET = 0x0D)包,里面会包含服务器的IP地址。IP地址是一个四字节的格式,每一个字节翻译成整数代表一位。假设获取到的IP地址是10.0.0.9。

3、客户端像10.0.0.9(3848)发送(ENTRIES = 0x07)包,向服务器请求联网的方式。

4、10.0.0.9会返回(ENTRIES_RET = 0x08)包,告诉客户端认证方式,比如web或者是internet等等。

5、客户端向10.0.0.9(3848)发送(LOGIN = 0x01)登录包,包含了账号密码等等信息。

6、服务器会返回(LOGIN_RET = 0x02)包,告知客户端登录是否成功,同时会返回一个SESSION,用于标识这样一个唯一连接。

7、客户端向10.0.0.9(3849)发送(CONFIRM = 0x0A)登录确认包。

8、服务器返回(CONFIRM_RET = 0x0B)登录确认放回包。

9、客户端向10.0.0.9(3848)发送(BREATHE = 0x03)心跳包,并且每30秒发送一次,数据中包含登录返回的SESSION变量,和一个呼吸的计数器,计数器(整数)起始为0x01000000。

10、服务器返回(BREATHE_RET = 0x04)包,告知心跳成功,客户端收到成功信息,需要将其中的一个计数器(Index)加上3再返回。

11、最后,如果要下线的话,发送(LOGOUT = 0x05)包,服务器返回成功即可。

三、简化的认证过程。

上述简述的是完整的流程,但是我们发现其实有些步骤是可以省去的。

1、(SERVER = 0X0C)获取服务器地址是一个不用每次都执行的过程,因为服务器的地址不会轻易的改变,而且会根据IP网段不同来划分,实际上我们获取一次服务器地址就够了,获取到了之后可以写进INI的本地文件,下一次直接读取就好了。

2、(ENTRIES = 0x07)获取认证方式也是完全可以省去的,因为一个学校一般也就是一种认证方式了。

3、(CONFIRM = 0x0A)登录确认包是完全没有用的一个包,事实证明不用去管都可以。

因此真正有难度的就剩下登录包和呼吸包的构造了。下一篇继续讲讲用c#怎么来写认证客户端。

有童鞋问起mac下如何上网呢,恩,网上已经有童鞋写出了python的脚本了,基本上所有平台可以用了。

虽然程序写的简单粗糙,但是python不愧是快速开发的王者,短短118行代码就搞定,不得不服,c#可是写了我两天。

python脚本参见:

​https://github.com/Lyleaks/benchmade/blob/master/benchmade.py

吵吵微信朋友圈,请付款实名加入:

吵吵 吵吵

发表评论

电子邮件地址不会被公开。 必填项已用*标注