to myself 的分类学习日志

做自己想做的事
posts - 232, comments - 6, trackbacks - 0, articles - 0

网络机器人

Posted on 2010-12-21 08:21 kongkongzi 阅读(265) 评论(0)  编辑 收藏 引用 所属分类: game development

 网络机器人——游戏机器人的开发 
作者:大宝 来源:中国博客网   酷勤网收集 2009-02-21
网络机器人(1)--悄然中向我们走来

最早听说网络机器人的存在,是在2002年底,那时第一次听说GOOGLE为了统计和查询网络资源,专门研制了一种网络机器人,在世界各地为GOOGLE不辞劳苦地忙碌着,然而,关于网络机器人更详细的信息却一直不得而知。

直至2003年10月,才第一次在网络游戏中听说了有一种程序叫:机器人程序(以下简称游戏机器人)。简单地说,游戏机器人是一种智能化游戏程序,可以 全部或部分代替玩家从事游戏活动,让玩家从无休止的升级打怪的痛苦中摆脱出来。如果单纯从一点来说,游戏机器人完成的功能不可谓不大:它甚至让人从脑力劳 动中解脱了出来。如果说,当初的工业革命,对人类在体力劳动方面是一大解放,那么,在现今的网络时间,网络机器人也在一定程度上可以称作是对“网络人”的 一大解放,当然,最先偿到这种解放甜头的是我们成千上万的玩家。

就在去年底到今年初,短短的几个月时间,一种专门用于信息查询和自动 聊天的聊天机器人开始现身网络,不论你是早晨还是傍晚,亦或是中午还是深夜,MSN聊天机器人家族都可以时刻陪你聊。虽然,现在的聊天机器人,从智能上说 还不够强大,但毕竟,它代表了网络在当前的一个重要应用方向:网络信息的自动搜索、自动查询和自动处理。如果说,互联网的出现在相当程度上是提供给了人们 一个没有容量的大资源库,那么是不是可以说,网络机器人的出现提供给了我们更有效利用这些资源的手段或工具?

目前,机器人程序主要还是应用于以下几个方面:

1.网络蜘蛛(自动搜索有用网络资源)

2.游戏机器人(也称外挂,特指网游)

3.购物机器人

4.聊天机器人

5.客服机器人(日常信息的查询,比如:天气、交通、股票等等)。

可以说,每一种网络机器人都代表着对于网络时代的一种全新理解,其中都蕴含了很多的成功机遇,擅长幻想的朋友可以从以上的网络机器人联想到其它方面的应用,将网络机器人应用于实际的网络生活中,说不定,你从此便创造了一个网络时代的成功奇迹。

作为对网络机器人的持续关注和研究,本系列文章将就游戏机器人和聊天机器人的原理和实现进行由浅入深,由现象到本质的逐步探讨,以求发掘网络机器人更多的实用功能,使更多的人关注网络机器人,从事机器人程序的开发和研究之中。

网络机器人(2)-开发游戏机器人所需要的基本功

当大家尝试了若干年由互联网信息资源大爆炸所带来的甜头后,我们开始为寻找有用资源以及有效利用这些庞大的资源而发愁,更多的时候,我们更象一只乱撞的苍蝇在这 个URL和那个URL之间奔走,半天的忙碌说不定给我们带来的却是一场空。于是,我们不由自主的渴望着,如果有一种软件,能代替这种近乎体力劳动的“搜 索”和“处理”工作,那该多好呀。

我自己也曾不止一次地发出过这种感慨,但我想,对这种软件有最强烈渴望的群体应该首选网络游戏玩家一族了。

在上海盛大把“传奇”引入中国,引发了至今还在继续发狂的网游热潮以来,越来越多的资金开始注入网络游戏,越来越多本不玩游戏的人开始关注网络游戏,甚 至连国家的相关法规政策也从某种程度上开始保护起前几年被视为洪水猛兽的“电脑游戏”来。这一切,只缘于一个原因:网络游戏聚集了太多的社会财富,为电信 行业带来了太多的增值,为国家财政创造了太多的税收。

然而,发展至今年的大陆网络游戏,与它刚出现时在模式上似乎并无什么大的不同: 没完没了的升级,没完没了的PK。一时间,打网络游戏似乎成了纯粹的体力活,每天登录进来之后,除了聊天,剩下的就是为“升级”而努力了。但是,由于部分 网络游戏的开发周期过于短暂,甚至有的游戏公司在游戏还是半成品时就已经拿出来作市场宣传并进入所谓的公测继而开始收取点卡费用。不难想象,这样弄出来的 游戏在用户易操作性方面难免会存在这样那样的问题,而这些问题,对于资深的骨灰级玩家来说又是极其影响游戏效果的。于是,一种具有全新概念的“游戏机器 人”的程序(也称外挂)诞生了。

游戏机器人,相当于一类似于游戏客户端的程序,它是独立运行的,不依赖于原游戏客户端。说到这里,我们得回过头来看一下外挂的分类。网游外挂,从大的方面,可以分为两类,一类是内嵌式的外挂,比如类似于按键精灵之类的辅助工具,另一类是独立式的外挂,也 就是现在我们所说的游戏机器人。内嵌式外挂的工作原理是,先运行原游戏客户端,并在原游戏客户端中利用热键呼出外挂程序进行相应设置,然后返回原游戏客户 端中进行游戏。而游戏机器人,从刚开始的游戏登录一直到后面的打怪升级等,全部由外挂程序自己完成。从这一点来看,内嵌式外挂要比游戏机器人简单地多,因 为它甚至可以直接调用原游戏客户端的内存数据和函数模块,而游戏机器人必须自己处理这些数据和函数模块。但是,游戏机器人的最大好处便是难以被游戏服务器 发现和屏蔽,在游戏功能的易扩展性上要比内嵌式外挂容易实现得多。如果大家对游戏机器人还是不怎么了解,请大家到GOOGLE随便搜索一下传奇或其它游戏 的外挂,一看便一目了然了。

由于本文是一针对于网络机器人的专题文章,所以,这里我们只讨论游戏机器人,对于内嵌式外挂的原理及实现,本文不作阐述,如果有机会,我将在后续的其它系列文章里进行阐述。

我想有机会阅读此文的朋友,一定有很多非常关心游戏机器人到底是如何实现的?开发游戏机器人需要哪些基本功?用哪些工具?查哪些资料?等等,这一系列的问题,都将在这一个系列文章里进行表述,请大家随时关注。

现在,我来解答大家第一个疑问:开发游戏机器人需要哪些基本功?

在解答这个问题之前,请大家记住以下这点:开发游戏机器人是一件相当艰苦但趣味十足的差事,如果你自信有足够的抗打击能力,那么放手一试吧,否则,还是趁早回家哄孩子的好,呵呵。请大家自己对号入座:

1.熟悉TCP/IP协议(不熟悉没关系,但至少你要学会熟悉类似于commview一类的网络截包软件,并知道真正有用的数据是哪一块)

2.有比较强的分析、比对能力,有比较强的洞察力(主要应用于封包分析)

3.至少打过一两种网络游戏,熟悉网络游戏中的常见术语(诸如:PK,NPC等等概念,不熟悉网络游戏的人怎么可能按玩家要求写出好的游戏机器人?)。

4.能读懂WIN32汇编,有一定的反汇编静态分析能力(现在的网游基本都在数据封包上使用了诸如加密,加校验码等手段,凭借单纯的封包分析已经无能为力)

5.具备一定的win32汇编动态调试能力和一定程度的忍耐力(有些加密算法只有当实际跟踪运行时才会更容易理解)。

6.熟悉至少一门面向对象语言,并能够用之来完成游戏机器人程序(到于大一点规模的游戏机器人,甚至还要用到建模工具,要对系统进行规范的整体规划)。

7.具备一定的数据结构和算法功底(对于游戏数据的组织是很影响游戏机器人性能的,大型算法的应用主要是寻路算法)

如果你已经具备以上的各项,你就可以动手来作自己的游戏机器人了。当然,很多人开始的时候也并不是全具备这些,而是在作的过程中进行学习,当他们作完自己的游戏机器人,这些方面都是基本已经具备了的。呵呵。下一次,我们谈游戏机器人的开发工具和开发步骤。

网络机器人(3)-游戏机器人的开发工具及开发步骤

这个系列文章,是没有事先打草稿的,纯属信手写来,所以,其中的条理性可能不太好,我会在以后的整理中将稿子再好好整理。我们接着上一次的内容,说一说游戏机器人的开发工具和开发步骤。

游戏机器人的开发包括两个重要方面,它们是:封包分析和加解密。当然,这是一种相当宽泛的说法,非常不严密。具体地来说,在封包分析中,又包括:封包结 构的确立,封包数据内容的解密,封包校验码的生成,封包序号码的生成等。而程序加解密中除了游戏主执行程序文件本身的脱壳之外,还主要包括使用静态分析和 动态追踪两种方法解决以下主要问题:用户名及密码的解密,封包校验码的生成等。现在市面上出现的网游,在封包内容上已经很少不进行加密了,当然,加密的方 案不尽相同,有的是对游戏中的所有封包内容进行加密,而有的只针对于敏感的封包内容进行加密,比如登录封包,战斗封包和移动封包等。

所以,游戏机器人的开发工具,除了程序语言工具之外,还应该有封包分析,加/解密,数值换算等配套工具。总的来说,游戏机器人的开发工具主要包括:

1.至少一种程序语言工具,支持socket网络编程即可,如:VC,VB,DEPHI等。现在市面上出现的游戏机器人,也多以这三种语言为主要开发工具(PEiD软件可以帮助查看程序使用的是何种开发工具编译的,并可对程序所加的壳进行识别,下载地址:http://www.pediy.com/tools/unpack/File%20analysers/peid/PEiD.zip (下载地址来自看雪网站))。笔者使用的是Delphi7.0,其中的TClientSocket组件 或 Indy控件组中的TIdTCPClient均可用来进行游戏机器人开发,其中TClientSocket在Delphi7.0的默认安装中是没 有的,必须手动安装,安装方法是:Component -> Install Packages -> Add -> ...\ Program Files\Borland\Delphi7\Bin\dclsockets70.bpl。

2.至少一种用于截包的工具软件。截包工具分为两类,一种是截获流经网卡的数据包,一种是截获指定应用程序的包。

两种截包工具的工作原理不一样,前者是底层的,通过网卡驱动层来获取所有流经网卡的数据,而后者则是通过替换SOCK函数的方式先于应用程序获得网络数 据包转而进行自己的处理。对于前者,代表性的工具有:sniffer pro ,commview等;而对于后者,代表性的工具有:wpe等。这几种工具 最新版都可以很方便地从google.com里找到。笔者在使用时,是两种配合着使用的,但主要的还是使用commview。在使用commview之 前,我使用sniffer pro的,但发现了commview之后,就彻底抛弃了sniffer pro,只能用一句来形容:commview太棒了。 关于commiew的具体使用方法和技巧,我会在下一节的封包分析一文中进行详细阐述。

3.反汇编及调试工具。很多人都知道,不加密的网络游戏时代已经运去,现在如果有哪一款网络游戏不加密,那么在很短的时间内,该游戏的外挂就会满天飞。

网络游戏的加密可以分很多不同的层次,有网络数据包级别上的加密,有客户端游戏数据文件上的加密(比如物品文件),有客户端执行程序上的加密和加壳等 等,凡此种种,不一而足,解密的方法也变得越来越复杂。从总体的策略上来说,解密方法有两大类:静态分析和动态调试。静态分析指使用特定的软件将游戏可执 行主程序反汇编成汇编代码后,对汇编代码进行静态分析和比较。动态调试是指特定的软件对游戏可执行主程序进行动态的跟踪调试,跟踪数据的变化规律和程序的 执行流程。静态分析常用的软件主要有IDA pro等,而动态调试常用的软件主要有softice和ollydbg等。需要指出的是,在进行解密时,静态 分析和动态调试两种方法是交叉使用的,是互为补充的。这两种软件的具体使用方法,我会在后续的章节中予以介绍。

4.其它在程序查/脱壳,封包分析和数据计算等方面中的常用工具。这些工具包括:查/脱壳工具,m2m异或计算工具,ascii码换算工具,windows自带的计算器(科学型方式下主要用于进制转换)。

http://www.pediy.com/tools/unpacker.htm中有一些查/脱壳工具,但这里的脱壳工具主要是针对于加壳时使用的是程序加壳的方 式而不是手动加壳的方式,针对于手动加壳的情况必须使用的手动脱壳的方式。在“加解密”这方面的书籍中,我向大家推荐看雪论坛出的“加密与解密(第2 版)”,它可以使有汇编功底的游戏机器人初学者在较短时间内深入核心。

如今的网络游戏,由于数据交互的频率和流量非常大, 所以,出于效率和游戏流畅感方面的考虑,不太可能采用非常复杂的封包加密算法,很多情况下,封包用的是异或加密,即:让原来的封包数据与某个数值进行异或 后产生加密的数据,至于这个参与异或的数值具体是多少就有待基于经验的分析和推理了。不过读者不用怕,封包分析最主要的是要沉得住气,耐心,细致的考虑, 多尝试几种分析方案,我们下一节会具体探讨封包分析中的几种策略。

ASCII码换算工具是封包分析的必备工具,通过它,我们可以根据 中英文字词查到其所对应的ascii码,也可以根据ascii码查到其所对应的中英文字词。不过,ASCII码的换算,在commview中是已经集成了 的,在commview中显示网络数据包内容时,就会显示对应的ascii码,但由于其排版问题,其中的某些字词显示可能是乱码,所以,一个独立的换算工 具还是必须的。

网络数据在被截获时,使用的是十六进制表示,而我们通常的思维模式是建立在十进制基础上的,在计算诸如生命值,法力值 这些数据时,我们经常需要在十进制和十六进制以及其它进制之间进行转换。使用windows自带的计算器,设置成科学型时,可以很方便地实现进制间的转 换。

以上就是我们进行游戏机器人开发所必备的工具软件,当然,仅仅知道这些软件的名字是毫无用处的,关键的是要学会熟练地使用这些软件来为我们的开发实践服务。在给大家介绍了这些工具后,我们向大家给出游戏机器人开发的一般步骤:

1.对游戏客户端主执行程序进行查壳和脱壳操作,使其能被反汇编成正常的汇编代码。

2.对游戏进行初步的封包分析,分析出封包总体结构,并观察其是否加密。

3.对脱壳后的游戏主执行程序进行反汇编,并进行静态分析和动态调试,找出其重要的加密算法。比如:用户名和密码的加密,网络数据包的加密,网络数据包中校验码(有的游戏不含校验码或有的数据包中没有校验码)的生成算法等。

4.对游戏进行深入的封包分析,确定出重要类型(行走,说话,组队,攻击等)网络数据包的结构及各位置的具体含义和生成方法。

5.使用建模工具设计游戏机器人功能。(可选)

6.待行走,说话,组队,攻击等重要封包分析出来后,便可以进行初步的代码实现了。在实现的过程中,再根据新分析出的封包进一步完善机器人的功能。

本文出自:http://sodme-dev.blogcn.com/index.shtml