前言
在常年的程序设计语言教学实践中,笔者发现,已经具备一定编程基础的学生,如果没有经历过大一点的系统项目开发,其编程水平很难再有提高;但是开发系统项目的机会对初学者来说并不是容易获得的,因此笔者在程序设计教学中尝试引进游戏的辅助程序设计,以替代系统项目开发的实践。
游戏辅助程序设计技术对初学者来说是非常神秘的,却又是非常感兴趣的编程技术。游戏辅助程序设计技术是门高深的编程技术,很多初学者就是在从玩游戏、修改游戏、编写游戏程序到设计游戏的辅助程序的过程中逐步成长起来的,最后成为程序设计高手。
笔者在教学的课后作业中让学生进行游戏辅助程序设计,让他们边玩游戏边开发游戏辅助程序,这样极大地提高了他们的编程兴趣和积极性,同时大大提高了他们的编程水平,教学效果非常明显。相对来说,能达到比开发系统项目更好的效果。
现在的网络游戏以网页游戏为主,这种游戏非常流行、火爆。网页游戏是基于Internet上客户-服务器模式的,其中服务端程序运行在游戏服务器上,玩家可以通过运行客户端程序同时登录到游戏中。既然在网络游戏中有了服务器这个概念,我们以前传统的修改游戏的方法就显得无能为力了。在单机版的游戏中,可以随心所欲地通过内存搜索来修改角色的各种属性,这种方法在网络游戏中就没有任何用处了。因为在网络游戏中的角色的各种属性及各种重要资料都存放在服务器上,在玩家的机器上(客户端)只是显示角色的状态,所以通过修改客户端内存里有关角色的各种属性是不切实际的。
我们知道Internet客户-服务器模式的通信一般采用TCP/IP通信协议,其数据交换是通过IP数据包的传输来实现的;一般来说,客户端向服务器发出的某些请求,比如移动、战斗等指令,都是通过封包的形式和服务器交换数据的。那么,我们把本地发出消息称为Send,意思就是发送数据,服务器收到Send的消息后,会按照既定的程序把有关的信息反馈给客户端,比如移动的坐标、战斗的类型;把客户端收到服务器发来的有关消息称为Receive。知道了这个道理,接下来我们要做的工作就是分析客户端和服务器之间往来的数据(也就是封包),这样就可以提取到对我们有用的数据并进行修改,然后模拟服务器发给客户端,或者模拟客户端发送给服务器,从而达到修改游戏的目的了。
我们把上述对游戏数据包的修改程序称为网络游戏辅助程序。这种辅助程序就是网络游戏封包,一般在设计时都是针对某个游戏的某个版本来做的,针对性很强。因为每个网络游戏服务器与客户端交流的数据包各不相同,辅助程序必须对网络游戏服务器的数据包进行分析,才能产生服务器识别的数据包。这类程序也是当前最流行的一类游戏辅助程序。辅助程序可以协助玩家自动产生游戏动作、修改游戏网络数据包以及修改游戏内存数据等,以便玩家用最少的时间和金钱去完成功力升级、过关斩将。
Microsoft.NET是一种面向网络支持各种用户终端的开发平台环境;微软的目标是让Microsoft.NET彻底改变软件的开发方式、发行方式和使用方式等,并且不只针对微软一家,而是面向所有开发商与运营商。.NET的核心内容之一就是要搭建第三代互联网平台,这个网络平台将解决网站之间的协同合作问题,从而最大限度地获取信息。在.NET平台上,不同网站之间通过相关的协定联系在一起,网站之间形成自动交流,协同工作,提供最全面的服务。
C#是一种面向Internet和企业级应用的新一代编程语言,它是专门为.NET设计的,是一种安全、稳定、简单、优雅的,由C和C++衍生出来的面向对象的编程语言。C#在继承C和C++强大功能的同时去掉了一些复杂特性,它以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程而成为.NET开发的首选语言,并且成为ECMA与ISO的标准规范。
开发网页游戏的辅助程序属于网络编程技术,因此采用.NET的组件之一C#语言来设计网络程序,本书的网页游戏辅助程序就是用C#编写的。网络游戏辅助程序具有很高的技术含量,在这些程序中使用了许多高端技术,如拦截Socket技术、拦截API技术、模拟键盘和鼠标技术、直接修改程序内存技术,等等。本书将对常见的游戏辅助程序的封包技术进行全面的剖析。
本书以实例与原理相结合的方式讲解编程开发思路向每一位有志于从事网络编程开发的读者介绍这种热门的程序开发技术。
本书的所有程序均在Microsoft Visual Studio 2008简体中文版开发环境下调试通过,程序本身没有错误,但是由于提供网络游戏的商家可能不断升级游戏、变换密码系统、使用防外挂技术,等等,因此不能保证读者拿到的程序任何时刻都能起到辅助游戏的功能,如果不能起到网页游戏辅助的作用,读者可按照辅助程序设计的思路和办法,对辅助程序重新进行小幅修改,或者重新设计解码系统。虽然网页游戏可能不断变换,但是设计网页游戏辅助程序的方法和总体思路是不会变的,注重设计辅助程序的方法和思路,才能不断升级辅助程序。
游戏辅助程序设计是一个验证对某些计算机知识的理解程度的方法,是发现问题、解决问题的机会,它只能起到提高学习计算机编程的兴趣的作用,而决不是学习计算机编程的万能钥匙。
由于C#网络编程辅助程序设计技术所涉及的知识面极为广泛,而笔者的知识面又很有限,因此尽管笔者对本书中所涉及的内容一再推敲和仔细研究,仍有可能出现错误和纰漏,希望广大读者批评指正。
本书相关的代码资料可在电子工业出版社官网“在线资源”中下载。
笔者