韩小明@xiammy的专栏

没水的地方挖井,有水的地方修渠

韩小明ID:xiammy
438248次访问,排名107好友11人,关注者66
毕业后一直在广联达工作
xiammy的文章
原创 174 篇
翻译 0 篇
转载 22 篇
评论 1131 篇
韩小明的公告
作者毕业于浙江大学,非常热爱体育运动。现在尤其热爱羽毛球运动。在休息时间非常热爱技术文章写作。
最近垃圾评论泛滥,为了不污染大家的视听,暂时关闭评论,请大家理解。
欢迎转载,但请注意,除非特别声明,本站采用Creative Commons License许可:署名,非商业。

最近评论
liquankun:瑞星还是不咋地!
白花了几个月的钱
外国的杀软不一定比国产的好!
但是国产的就是比不上国外的!
没办法!技术赶不上人家 还竟搞内讧
不经历大灾难 就不知道什么是团结!



正真的高手是不用杀毒软件的,没什么好不好的,是你自己技术不行而已
wangdei:http://www.bt285.cn BT下载 有300W部BT种子.
http://www.yaonba.com.cn NBA中文网 有200W条NBA直播
http://www.5a520.cn 小说520网 有300W部小说
http://www.bt285.cn/yazhou/ 亚洲BT 有BT亚洲
http://www.bjxlz.cn p……
hemir:不但不知道团结提高,倒是会找枪手到处胡闹。弄的整个环境乌烟瘴气的。
hemir:不但不知道团结提高,倒是会找枪手到处胡闹。弄的整个环境乌烟瘴气的。
hemir:枪手太多,大家都还是相信自己的眼睛吧。个人认为360做的不错。国内的杀毒软件确实不怎么地……
文章分类
收藏
    相册
    图书
    链接
    宗刚的专栏(RSS)
    快乐学习(RSS)
    陈亮亮的专栏(RSS)
    朋友
    张恂论 OO
    言之有李(RSS)
    赵伟的小家
    存档
    订阅我的博客
    XML聚合  FeedSky

    原创 浩方战网平台分析收藏

    新一篇: 64位普及引发完美风暴 | 旧一篇: 语言的座右铭

    虽然早就听说过浩方是如何工作起来的。但要真正说到其细节,还是可以深入地探究一下。

    很多都应该知道,浩方本质上是将整个Internet变成若干个大的局域网的方式,让所有游戏在这个“局域网”上运行。那么,浩方是如何架构这样的系统的呢?

    下面的所有的分析,使用大家熟知的星际争霸作为例子。首先先看看星际在局域网上运行的方案。我们这里不分析UDP协议的。有兴趣的可以深入探讨。

     

    两个不同的星际实例,依赖于IPX协议在局域网里进行连接。另外,众所周知,星际争霸是基于DirectX开发的,因此,暂且认为,其是基于DirectPlay来进行IPX开发的。

    在上面的这种方案下,要将其扩展到Internet,关键就在于替换IPX协议。为什么这么说呢?原因有两个:

    1. 浩方启动星际之后,就算系统没有安装IPX,也可以使用IPX连接。
    2. 浩方并没有静态修改星际的运行代码。而且为了做到各种游戏的通用性,只可能是在动态替换某个协议层。

    第2点可以通过试验得到证实。如果你使用Dll Explorer对星际程序进行跟踪,会发现,如果用浩方启动星际,那么会比直接启动星际多出一个dll。这个dll正是浩方自己自带的SCSocket.dll。

    我们基本可以根据这个假设,画出浩方的架构图:

     

    当你使用Depends打开SCSocket.dll之后,你会发现一些细节。

     

    1. FNS_SetDPlaySvrHandle和FNS_GetDPlaySvrHandle应该是和DirectPlay进行交互的代码。虽然说浩方实现的是虚拟IPX协议层,但这种实现其实有很多种方式。一是直接做成一个驱动,也可以做成HOOK,直接对DirectPlay的调用进行反馈。个人更倾向于后者。
    2. 不管是为了娱乐性也好,还是为了性能也好,浩方平台必然是按照房间ROOM的概念来划分局域网的。相关函数应该是FNS_SetRoomInfo。
    3. 浩方是需要服务器的。可以参考看看FNS_AddHost,FNS_EmptyHost,FNS_SetLocalHostInfo,FNS_RemoveHost等等。
    4. 不需要看都应该知道,浩方是使用TCP/IP连接所有游戏的。另外,显然浩方应该处理TCP/IP上的代理问题。FNS_SetProxy应该就是基于这个来完成的。
    5. 我们还能发现很多有趣的接口,比如FNS_SetWar3GameStartFlag,从名字上看,很可能是War3相关的接口,说明浩方的平台并不能完全做到独立性,在一些情况下,还是需要特殊处理的。

    整个架构中,我认为最有创意的在于将IPX转换成TCP/IP。很多人说这是中国环境下发展出来的特有产物,我也比较同意。这并不是我所关心的。不管怎么样,这个架构确实非常棒。

    架构这东西,其层面就是处于那个说出来,大家都能明白,但是做出来的,只有那么几个。不过从上面的分析看来,浩方确实已经修改了原有星际的运行规则,并且其运行方式必须是浩方启动星际,很有Loader破解的嫌疑。也正因为此,浩方目前正和神州奥美打着关司呢。

    发表于 @ 2007年01月26日 04:12:00|评论(loading...)|编辑

    新一篇: 64位普及引发完美风暴 | 旧一篇: 语言的座右铭

    评论

    #Antihero 发表于2007-01-26 12:57:43  IP: 192.160.11.*
    小明,我也注意到最下面的FNS_SetWar3GameStartFlag,呵呵,感觉很奇怪;开始还以为你截图的时候搞错了呢。

    #xiammy 发表于2007-01-26 14:06:33  IP: 218.249.220.*
    呵呵。我看到时也感觉奇怪呢。不过说到底,上面写的其实都是基于猜测:)没有验证每个函数的功效啊。
    #oney1 发表于2007-01-26 14:49:34  IP: 219.142.191.*
    这都几年前的技术啦?就是一个全局或指定进程socket hook技术。听说过VNN吗?http://game.vnner.cn,支持所有的局域网游戏,你可以研究一下它的原理。

    另外,据我所知,浩方并不是“中国环境下发展出来的特有产物”,国外早就有这样的技术,而且目前还有几个网站在运营着。
    #xiammy 发表于2007-01-26 15:25:15  IP:
    非常感谢oney1的不吝赐教:)能学到新的知识,不胜感激
    #cnstar9988 发表于2007-01-26 16:34:51  IP: 218.247.176.*
    技术原理分析部分有误。

    只用到了socket hook技术。
    有些导出函数是迷惑人的。
    #xiammy 发表于2007-01-26 17:01:46  IP: 218.249.220.*
    to cnstart9988:谢谢指教。不知您有没有这方面的实践?另外,如何坑定其是使用的socket hook技术呢?因为,IPX协议和TCP/IP协议不一样吧?也是基于socket开发的吗?还是说socket hook是Hook其他协议,然后转换到socket上?
    #missdeer 发表于2007-01-26 23:04:35  IP: 58.61.65.*
    拦截本机的IPX封包,再封装成TCP/IP的进行通讯啊,就这么回事
    #cnstar9988 发表于2007-01-27 16:31:17  IP: 218.247.176.*
    不要认为IPX有多高深。
    IPX/TCP工作同一层次,上层都是用socket通信的,只不过socket的类型不一样。

    m_hSocket=socket(nAddressFormat,nSocketType,nProtocolType);
    我想熟悉WinSock API编程的朋友一定会知道,其实这就是WinSock API里创建一个新的套接字。第一个参数nAddressFormat就是套接字使用的协议族,在winsock2.h里我们可以找到
    #define PF_INET AF_INET
    #define PF_IPX AF_IPX
    这两个定义,PF_INET就是指我们新创建的套接字使用TCP/IP协议,PF_IPX就是使用IPX/SPX协议。
    #cnstar9988 发表于2007-01-27 16:34:01  IP: 218.247.176.*
    参考google "重载成员函数 支持IPX/SPX协议"
    很多文章可以参考,IPX与TCP/IP的差别在程序设计上并不大。
    IPX,TCP/IP处在同一个层次。
    通信调用仍然靠socket。
    #cnstar9988 发表于2007-01-27 16:35:00  IP: 218.247.176.*
    在目标进程注入了dll,是用来替换一些socket函数调用的。

    #xiammy 发表于2007-01-27 18:29:56  IP: 221.218.32.*
    勤奋学习中...
    #mqingqing123 发表于2007-01-27 21:51:01  IP: 218.90.137.*
    厉害
    #etomahawk 发表于2007-01-28 15:46:37  IP: 58.209.65.*
    "如果用浩方启动星际,那么会比直接启动星际多出一个dll", 据我察看,只要启动了浩方,不管你是通过平台的方式启动游戏还是直接启动游戏,都会多出一个动态连接库文件! 其实,只要启动了浩方,它就会给所有的应用程序注入一个dll.
    #wwwxyzlnet 发表于2007-01-28 22:47:28  IP: 222.82.7.*
    你能把浩方弄的不弹公告吗
    #rock1001 发表于2007-01-29 12:24:49  IP: 221.230.139.*
    你能把浩方弄的不弹公告吗

    这个不需要在协议层解决,可以直接HACK主程序,把弹广告的代码NOP掉
    #cnstar9988 发表于2007-01-29 15:47:14  IP: 218.247.176.*
    建议用DLL注射的方法做一个程序,跟踪浩方如何启动星际的,:)

    我觉得浩方在连接服务器时,前面一部分socket数据是私有数据,如广告等等。

    从原理上讲,浩方支持所有局域网游戏?
    #sxqwhxq 发表于2007-01-29 17:14:22  IP: 222.242.186.*
    很想学习tcp/ip编程
    #xiammy 发表于2007-01-29 17:36:45  IP: 218.249.220.*
    to etomahawk: 它不会给后启动的进程加入dll吧。
    to cnstar9988: 不明白为什么前一部分数据和广告的关系。当然了,跟踪之后才可能知道。
    原理上将,IPX的局域网游戏都应该可以支持吧。
    #cnstar9988 发表于2007-01-30 09:29:34  IP:
    原理上,基于TCP的网游也能支持的。
    这类软件,只可能在socket头部的数据部分添加私有数据。
    在游戏程序的通讯过程中添加私有数据, 处理的代价比较大啊。
    仅仅是我的猜测而已。


    #qidaozhilong 发表于2007-01-30 12:24:34  IP:
    Tcp上搞了一层IPX协议的东西。这种思路跟VPN有点象,VPN也可以做
    #xinchengquan 发表于2008-01-09 10:45:59  IP: 211.241.135.*
    厉害阿,,各位
    #xujintao 发表于2008-05-24 14:20:38  IP: 219.148.96.*
    厉害!
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © 韩小明