网页外挂技术浅谈(入门篇)

转载自 http://gamebot.uueasy.com/read-htm-tid-215-page-1.html

 

其实网页外挂所用的技术很简单,只不过这是一个技术上的禁区,极少有书籍和资料介绍而已。
在继续往下看之前,你至少需要了解:
1.http协议的基本含义
2.socket通信基础
3.一门常规开发语言及软件开发基础
4.动态网页技术基础

网页游戏采用的通讯协议多种多样,常见的有:
1.纯http。如:商业大亨、36计、天问等。
2.AMF协议。AMF协议是一种扩展的http协议,采用该协议的页游一定是flash的,如:热血三国、绝地战争等。
3.socket协议。此类页游更接近传统的客户端网游,采用加密的数据包进行通讯,制作外挂难度远远超过上述2种。
4.其他。

协议分析
想要制作一个页游的外挂,我们首先要知道它是采用什么协议进行通讯的,我们需要用网络监听软件进行协议分析。
推荐:
1.HTTPAnalyzerFullV5。强大的http通讯监听软件,可以分析纯http和AMF通讯。
各大下载站点均有下载,能下载到注册机。
2.科来网络分析系统 2010 技术交流版。目前最好用的全方面网络分析软件,用于分析socket通信最方便。
这是国产品牌,可到官方网站下载,然后用email申请一个免费序列号即可。

作为初学者,我们从纯http的页游入手。
运行HTTPAnalyzerFullV5,然后打开网页,进入游戏。点击HTTPAnalyzerFullV5上的"start"开始监听,然后在游戏中随便进行点操作,这个时候HTTPAnalyzerFullV5中应该会有数据展现了。在数据表格的Type一栏,我们可以看到数据的类型。
如果每进行一个游戏操作,HTTPAnalyzerFullV5中都增加一条Type为text/html的通讯记录,那么无疑这个页游是采用纯http协议的。
如果每进行一个游戏操作,HTTPAnalyzerFullV5中都增加一条Type为application/x-amf的通讯记录,那么这个页游一定是采用AMF协议的。

下课了,实践一下协议分析吧。

继续...如果我们发现手上的这款游戏是纯http协议的游戏,比如36计、天策、天问之类的,该如何入手呢。
先看下HTTPAnalyzerFullV5抓到的数据吧。
从HTTPAnalyzerFullV5的界面可以看到,HTTPAnalyzerFullV5分为上下两栏,上面是数据列表,下面是选中的一条通讯的具体数据。
在下面一栏中,我们主要关心的是3项数据:
1.Header。这是http通讯的包头,从这儿我们可以看到host、cookies、referer之类的数据。
2.Response Content。这是服务器方的响应数据,也就是这次通讯从服务器端得到的内容,是游戏里面的相关数据。格式可能五花八门,但一般说来是可以理解的字符串。比如:"{兵种:步兵;数量10000;速度:5}"或者"{恭喜你,升级成功。}"之类的数据,当然一般说来是英文表达的,你必须得读懂它。
3.Post Data。这是客户端的发送数据,也就是指你在游戏中进行了什么操作。对于纯http协议的页游来说,这一项经常为空,因为每条游戏指令的参数可能是直接写在url中。
以36计为例,我们进入游戏,打开监听,点一下英雄府升级,此时HTTPAnalyzerFullV5中获得一条新的通讯数据。如果我们能用软件模拟这次通讯,那么就相当于在软件中进行英雄府升级了。
对于纯http通讯的模拟,我推荐使用XMLHTTPRequest方法。
XMLHTTPRequest是存在于msxml2.dll中的一个函数,msxml2.dll在任何一台windows中都有。而且这是一个AxtiveX的DLL,能被任何开发语言调用,甚至是被网页调用。
XMLHTTPRequest的作用是:对指定的服务器发起一个http请求,并获取返回的数据。
XMLHTTPRequest在各种语言下都能找到大量的例程,只需要上网搜索一下即可。

下面,了解一下XMLHTTPRequest并写个简单的程序来获取baidu首页的内容吧,这是网页外挂最基础也是最核心的技术。
XMLHTTPRequest的VB简单示例:
set xhttp = createObject("msxml2.XMLHTTP")  
xhttp.open "POST", "http://www.baidu.com", False  ‘False表示不采用异步方式
xhttp.send
ret = xhttp.responseText  'ret即返回内容,此处为百度首页的内容
这是使用XMLHTTPRequest同步调用方法,缺点是当内容没有返回时,软件会一直处于等待状态,不能干其他任何事,所以我们一般采用异步方式调用。
异步方式与此大同小异,上网搜索一下吧。

在36计中,假如升级英雄府的referer是"http://36ji.com/updatehouse.php?houseid=1",那么我们在软件中用XMLHTTPRequest模拟一次这个url的请求,就会在返回内容中看到诸如"{英雄府已经成功升级}"之类的文本。同时你会发现,游戏中的英雄府真的升级了!

当然在这之前,还有个很重要的工作就是登录。
要实现在客户端登录有2种方案:
1.在客户端嵌入IE组件,用户在IE组件中打开游戏网页登录,那么这个IE组件就获得了登录凭证,这个凭证在动态网页技术中通称:Session。
2.分析登录过程,自己用代码实现登录过程,然后保存登录凭证Session备用。

考虑到网页游戏一般都由多个运营商联运,所以如果自己写脱机的登录比较麻烦,要针对每个不同的运营商的登录接口写登录过程,所以一般推荐用嵌入IE登录。
嵌入IE登录很简单,在你的程序中放入一个IE组件,用户在这个IE组件中打开游戏网页,完成登录。
这里要提到XMLHTTPRequest的一个重要特性。
XMLHTTPRequest本身是不能为其设置Session的(深入了解动态网页技术的朋友可能了解,设置Session其实就是设置Cookies,虽然二者并不一样。)。但是XMLHTTPRequest会自动获得应用程序本身获得的Session,也就是说,在你自己的程序中嵌入了IE,如果用户在这个IE中完成了登录,那么这个程序中的XMLHTTPRequest将自动获得IE中的所有Session。
这个特性是把双刃剑,一方面,它给开发带来了便利,我们不再需要对XMLHTTPRequest设置登录凭证;另一方面,这意味着我们的程序运行一次只能开一个账号,不能实现子窗体多开的效果。如果要实现子窗体多开的效果,我们则需要使用其他更为灵活的http访问组件。
作为初学者,还是推荐使用XMLHTTPRequest,毕竟简单易用。

如果你完全理解了上述内容,那么你就应该有个大概的流程模型。
1。监听游戏过程,获取http请求细节。
2。在程序中嵌入IE,通过IE登录获取登录凭证。
3。使用XMLHTTPRequest模拟http请求。

入门篇介绍到这儿,接下来我们将进行初级实战篇。我们以36计这个游戏作为练手对象,因为这个游戏的通讯既不太难,也不至于太简单。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章