西安网通drcom分析

好多天没有在Linux下上网了,网通在学校使用了drcom作为pppoe拨号的一个补充,目的是防止用户使用代理、监视用户使用情况,而且这个drcom是经过修改的,在Linux下没有对应的版本。所以这段时间一直不能上网,花了几天的时间抓包分析、测试,仍然没能解决Linux下上网的问题,现在只能通过wine模拟运行网通给的drcom客户端来上网,详细的使用可以参考草儿同学的一篇文章

记一下这几天分析的结果:

先首说一下整个通信过程,pppoe拨号连接上去后打开drcom客户端,通过wireshark抓包可以看到,drcom首先给1.1.1.1与202.1.1.1这两个ip同时(Windows上抓包的时间戳是相同的)发送一次UDP包,数据长度为8字节,接着服务器(221.11.20.10)会返回两次UDP包,内容是相同的,数据长度为16字节。接下来drcom会发送96字节的UDP包到服务器,服务器返回16字节UDP包。然后重复这一过程一次,不过这一次通信中第一次发送的UDP包的目的变为221.11.20.10并且只发一次,服务器也只给一次响应。首次通信结束后每隔18秒会重复上面通信过程一次。如下图:

first.png](https://asset-1258390188.cos.ap-shanghai.myqcloud.com/first.png)

下面对每次发送的UDP包中的数据进行分析:
客户端—->服务器:
07 01 08 00 01 00 00 30 00 00

上面8个字节是客户端给服务器的请求,固定不变,代表这是客户端第一次请求(这里指的第一次是指服务器与客户端4次UDP通信中的第一次)。

服务器—->客户端:
07 01 10 00 02 00 00 00 30 6a 0a 00 c0 a8 10 86

最前面的8个字前是数据类型,代表了这个UDP包是服务器给客户端的第一次响应,这个是一直不变的。蓝色部分应该是一个类似签名(暂时先这样叫吧)的东西,每次通信这4个字节中的前两个字节一直在变化,后两个字节隔一段时间(约1 小时左右)会加一;红色部分是客户端每次pppoe拨号上去后分配到的IP地址;

客户端—->服务器:
07 00 60 00 03 00 00 00 00 00 00 00

c0 a8 10 86 00 03 00 02

30 6a 0a 00 ca 3c 96 b000 00 00 00 02 74 e2 4d 49 75

00 03 c0 51 08 f6 ff ff ff ff 00 a6 15 00 00 00
00 8b c0 51 40 34 ff ff ff ff 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00

红色前边的12个字节是固定不变的,代表了这是客户端第二次的请求;红色部分4个字节是从上次服务器的返回中得到的,也是本机IP;绿色的4个字节含义不清楚,这4个字节有时候会变为00 02 00 02,变化规律目前不太清楚,不过在一次正常上网的情况下(这里指每隔18秒服务器会收到客户端发出的这些UDP包)这个是一直不变的;

蓝色的4个字节就是上次得到一个签名;接下来紫色的4个字节是目前最棘手的,这4个字节每次通信都在变(也就是每隔18秒变一次),而且我抓了2个小时的包把这4个字节提取出来,并且排序也没有发现有任何规律;再下来4个0是一直不变的;

粉色显示的这6个字节应该是和系统相关的信息,经过我的测试在同一机器上这个值是一直不变的,直到今天我用wine运行drcom才发现这6个字节在Linux下是全零,我猜想这个应该是系统信息吧;

下来浅蓝色的这一行16个字节在同一个机子上是不变的,但在不同的机子上还是有些差异的,有的机子上08 f6变为了00 7b,也有的变为了0c b8;甚至有的机子这一行只剩下00 a6 15 00 00 00这6个字节;

下来这一行中的内容也基本固定,只有40 34这两个字节会在你断线重拨后变化,也就是说在一次正常的上网情况下这两个字节是不变的,但这两个字节是如何得到的我就不清楚了,感觉这两个字节很重要,我曾经试着穷举这两个字节,不过没有任何收获,很可能这两个字节和前面某些字节有联系;

剩余的26个字节大部机子会全填零的,不过也有机子不是这样,有可能有更多的零,比如上面提到浅蓝色的那一行有可能只剩下00 a6 15 00 00 00这6个字节,这种情况会多6个字节的零;也有的机子会以16字节为单位重复类似“00 03 c0 51 08 f6 ff ff ff ff 00 a6 15 00 00 00”这样的数据;

服务器—->客户端:
07 00 10 00 04 00 00 00 2c 10 63 96 00 00 00 00

这是最后一次服务器发给客户端的UDP数据,前几个字节是数据类型,代表服务器发给客户端的第二次响应,后几个字节没有去研究,现在还卡在上面96个字节呢!

目前我只能根据我自己的机子把一些与机器、系统相关的字节确定下来,然后重点去分析那96字节中蓝色、深蓝色、紫色那几位的字节,不过已经好几天了,还是没有什么进展:-(

写出来供大家参考,一块研究,有什么不对的地方敬请指正;在Linux使用wine运行这个drcom感觉不爽的很!!

Comments

shanyal: 我是11号楼的,我安上面的方法装上 Drcom,可是当 ishare_user.exe时,出现Drcom客服端, 要输入账号,密码。 电话号的的那种界面,怎么解决呀

shanyal: 当wine ishare_user.exe,时弹出一个对话框要输入服务器,帐号,密码,服务器ip怎么弄?希望你帮我解决一下。。感谢我

草儿: 嗯,多人研究一下,希望能够尽早搞定这个问题。

kongove: 终于用wine把linux上网问题搞定了,用wine模拟时缺少四个dll,分别是NPPTools.dll、WanPacket.dll、mfc42u.dll和Packet.dll,从win下挨个cp过来就好了~~

luguo: 恩,大体看了一下。这应该就是咱们研究的全部成果了吧? 总结得不错,革命尚未成功,同志还需努力啊!!

cocobear: 这个没办法,有时候就会有这样的窗口出来,放到一边,不理它。

pottry: 这篇文章是我受益良多,这几天把上网插件写出来了

可可熊: 好多年前的东西了……

坚持原创技术分享,您的支持将鼓励我继续创作!