可能接触过网络游戏的朋友会知道有一个可以修改网络游戏的工具叫做WPE,是通过截取游戏和服务器之间的封包然后伪造数据发送给服务器而达到欺骗服务器的目的,原理是简单,但是真正使用恐怕就没那么容易了,因为数据包都是经过加密的,如果不知道加密算法也是没办法伪造合法的封包。不过这里我要说的不是WPE的发包功能的使用,而是可以利用WPE接受数据包并且修改数据包的内容再加上某些网站WEB游戏的设计漏洞而达到作弊的目的。
很多社区网站都提供了那种页面上可以玩的游戏,玩游戏可以赚虚拟货币,而这种游戏多数是赌博类的,比如老虎机、21点、赛马等等。如果侥幸到了一个社区,看到这类游戏的游戏控制都是在客户端而进行的,那恭喜你了,也许就有办法让你成为社区中的大富豪。
举个例子吧,某社区有一个老虎机的游戏可以赚虚拟货币,查看一下源代码,经过分析,发现游戏控制都是在客户端,使用了javascript脚本来控制最后光标停止的位置,其中有这么一段:
k=1
i=0
j=1
randomize
l=fix(65*rnd+44)'匀速转多少2~5圈
randomize
h=22
h=fix(22*rnd+0)'减慢转多少0~1圈
很明显了,只要将rnd设法该成一个固定的值,那么最后停止的位置就每次都是固定的了。
首先想到的是将页面保存在本地电脑,然后打开,将这段代码修改,还需要修改里面的一些关键连接,然后再打开玩。尝试了几次,都失败了,提交的时候后台说使用了防作弊系统,可能是记录了浏览器的一些信息吧,可能这种方法行不通了。后来想想,如果让后台知道我的数据就是从合法的地方传过去的,那应该就没问题了。开始想用Delphi来写个程序,用TWebBrowser来浏览页面,在读入数据的时候顺便将数据修改掉。这种做法原理上应该是行得通,但尝试的过程中还是发现不太好用。最后想到了WPE可以修改发送出去的封包,就一定可以修改接受到的数据吧!于是先截取了几个请求和回应的包,找到65*rnd+44这个位置的数据,建立一个filter,把65*rnd+44改成了65*000+56,再建立一个将rnd修改成000的filter,然后开始截取修改,刷新页面,看到页面的那段代码果然变成了
k=1
i=0
j=1
randomize
l=fix(65*000+56)'匀速转多少2~5圈
randomize
h=22
h=fix(22*000+0)'减慢转多少0~1圈
现在试着玩一下看,果然,每次都是同一个位置,修改成功了!
这下就拼命的玩吧,一下子就赚了1000多万!
然后同时在那个社区找到了三个类似的游戏都是可以作弊的。
于是好好的发了一笔虚拟财。不料最后被管理员发现,帐号被删了,游戏也被停了........
由此可见,这种在浏览器里玩的游戏如果把游戏控制完全放到客户端,那肯定是有办法作弊的,我想这类游戏应该是在下注以后在服务器端就得出了输赢的结果,在客户端只是显示出来。这样别人再怎么改客户端的数据也无济于事。