由于手头的一个网游项目正在启动,所以,这一篇文章与上一次的文章之间相隔了很长的时间,特向读者道歉,让大家久等了。
这个系列文章,是没有事先打草稿的,纯属信手写来,所以,其中的条理性可能不太好,我会在以后的整理中将稿子再好好整理。我们接着上一次的内容,说一说游戏机器人的开发工具和开发步骤。
游戏机器人的开发包括两个重要方面,它们是:封包分析和加解密。当然,这是一种相当宽泛的说法,非常不严密。具体地来说,在封包分析中,又包括:封包结构的确立,封包数据内容的解密,封包校验码的生成,封包序号码的生成等。而程序加解密中除了游戏主执行程序文件本身的脱壳之外,还主要包括使用静态分析和动态追踪两种方法解决以下主要问题:用户名及密码的解密,封包校验码的生成等。现在市面上出现的网游,在封包内容上已经很少不进行加密了,当然,加密的方案不尽相同,有的是对游戏中的所有封包内容进行加密,而有的只针对于敏感的封包内容进行加密,比如登录封包,战斗封包和移动封包等。
所以,游戏机器人的开发工具,除了程序语言工具之外,还应该有封包分析,加/解密,数值换算等配套工具。总的来说,游戏机器人的开发工具主要包括:
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.待行走,说话,组队,攻击等重要封包分析出来后,便可以进行初步的代码实现了。在实现的过程中,再根据新分析出的封包进一步完善机器人的功能。
下一次,我们讲封包分析中的封包分析初步及截包软件使用。谢谢大家的支持。