刷一个基于html5开发的网页圣诞游戏
2013-12-25 16:45
573 查看
圣诞之际,到处都有很多庆祝的方式,学校一个学生技术团队出了一个圣诞网页游戏,上链接http://christmas.hustonline.net/game1。下面这是奖项,
![](http://img.blog.csdn.net/20131225161940640?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDQ4NzU2OA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
主要是首页的奖品很诱人,从昨天也就是平安夜这天开始就开始上线了,看了一下这基于html5的游戏确实还不赖,个人觉得js这个发展趋势还是真的不容小觑啊!然后想着要看能不能外挂一下的!结果昨天很容易就破了,因为虽然js前台写的很好,但是后台没什么判断,处理的比较粗糙。因此和别人说了之后,今天圣诞节就改进了不少,每次提交分数的时候先请求一个auth密文,然后再和分数一起发回服务器进行判断,其中还特别是用了cookie存储了用户id和一段加密字符。为此是用了php的curl库,开始了刷分的过程。
首先,在手动玩一次之后,开启网络后台发现js异步发送了两个请求,如下图:
![](http://img.blog.csdn.net/20131225162918484?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDQ4NzU2OA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
第一个是先获取auth密文,查看详细信息可以发现发送的内容和返回的内容,如下:
![](http://img.blog.csdn.net/20131225163120656?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDQ4NzU2OA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
(ajax post的数据)
![](http://img.blog.csdn.net/20131225163155468?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDQ4NzU2OA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
(返回的auth密文)
这些密文将在第二个请求中按照一定的规则发送到后台进行验证。下面分析第二个请求的内容:
![](http://img.blog.csdn.net/20131225163405765?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDQ4NzU2OA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
经过多次试验,发现发送的数据前两对数据就是来自第一次请求返回的四个密文,分布是按照第一个请求返回的index数组去掉对应个数个字符后截取8个和13个字符组成发送请求的信息。然后再加上name、score等其他信息一起发送即可。经过以上分析,最终的源码给出如下:
![](http://img.blog.csdn.net/20131225163840171?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDQ4NzU2OA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
完成之后,可以设置一个score分数值发送即可。当然这只是圣诞节活动,仅供娱乐,不支持使用任意恶性手段强制破解,也是出于对php的curl函数库的使用以及http协议的理解的基础和学习上娱乐而已。和别人交流的时候,有人说用TCP层传输分数等信息会更安全,不如这个游戏是基于html5的,因此只有现代浏览器支持,因此可以使用websocket来传输,不过原理都差不多。其实这个就是要构造一个完善的auth验证机制防止刷分。
最后还是祝大家圣诞节快乐!
主要是首页的奖品很诱人,从昨天也就是平安夜这天开始就开始上线了,看了一下这基于html5的游戏确实还不赖,个人觉得js这个发展趋势还是真的不容小觑啊!然后想着要看能不能外挂一下的!结果昨天很容易就破了,因为虽然js前台写的很好,但是后台没什么判断,处理的比较粗糙。因此和别人说了之后,今天圣诞节就改进了不少,每次提交分数的时候先请求一个auth密文,然后再和分数一起发回服务器进行判断,其中还特别是用了cookie存储了用户id和一段加密字符。为此是用了php的curl库,开始了刷分的过程。
首先,在手动玩一次之后,开启网络后台发现js异步发送了两个请求,如下图:
第一个是先获取auth密文,查看详细信息可以发现发送的内容和返回的内容,如下:
(ajax post的数据)
(返回的auth密文)
这些密文将在第二个请求中按照一定的规则发送到后台进行验证。下面分析第二个请求的内容:
经过多次试验,发现发送的数据前两对数据就是来自第一次请求返回的四个密文,分布是按照第一个请求返回的index数组去掉对应个数个字符后截取8个和13个字符组成发送请求的信息。然后再加上name、score等其他信息一起发送即可。经过以上分析,最终的源码给出如下:
<?php set_time_limit(60); ignore_user_abort(true); date_default_timezone_set('PRC'); error_reporting(0); $start = microtime(true); //获取auth echo "<strong>开始发送请求end_auth...</strong><br/>"; $headers['Content-Type'] = 'application/x-www-form-urlencoded'; $headers['Content-Length'] = 20; $headers['Accept-Charset'] = 'UTF-8,*;q=0.5'; $headers['Host'] = 'christmas.hustonline.net'; $headers['Accept-Encoding'] = 'gzip,deflate,sdch'; $headers['Origin'] = 'http://christmas.hustonline.net'; $headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31'; //$headers['X-Requested-With'] = 'XMLHttpRequest'; $headers['Referer'] = 'http://christmas.hustonline.net/game1'; $cookieStr = 'Hm_lvt_9b10ce606494df8b25b4ee1e6c00852d=1385282383,1386344607; uid=4007; PHPSESSID=thgk7nd8b637ll0hlcsrosq550'; $postStr1 = "ARG1=0&ARG2=1&ARG3=2"; $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, "http://christmas.hustonline.net/game1/end_auth"); curl_setopt ($ch, CURLOPT_HTTPHEADER , $headers ); curl_setopt( $ch, CURLOPT_HEADER, 0); //不返回响应头信息 curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1); //保留返回状态信息 curl_setopt($ch, CURLOPT_COOKIE,$cookieStr); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $postStr1); $backInfo = curl_exec($ch); curl_close ($ch); $auth = json_decode($backInfo,true); //auth为一个二维数组,index包含四个数字和keys包含四个加密字符串echo "<pre>";var_dump($auth);echo "</pre>"; //构造对应的index起始的8个和13个字符的请求字符串 $authIndex1 = substr($auth['keys'][0],$auth['index'][0],8); $authKeys1 = substr($auth['keys'][1],$auth['index'][1],13); $authIndex2 = substr($auth['keys'][2],$auth['index'][2],8); $authKeys2 = substr($auth['keys'][3],$auth['index'][3],13); $msg = json_encode(array($authIndex1=>$authKeys1,$authIndex2=>$authKeys2,"name"=>"oshyn","score"=>97900,"tel"=>13647215948,"game"=>1)); $postStr = "msg=${msg}"; //print $postStr."\n"; //请求刷分数 $scoreHeader = array(); $scoreHeader['Accept'] = '*/*'; $scoreHeader['Accept-Charset'] = 'UTF-8,*;q=0.5'; $scoreHeader['Accept-Language'] = 'zh-CN,zh;q=0.8'; $scoreHeader['Connection'] = 'keep-alive'; $scoreHeader['Content-Length'] = strlen($postStr); $scoreHeader['Content-Type'] = 'application/x-www-form-urlencoded'; $scoreHeader['User-Agent'] = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)'; $scoreHeader['PHPSESSID'] = 'thgk7nd8b637ll0hlcsrosq550'; $scoreHeader['Host'] = 'christmas.hustonline.net'; $scoreHeader['Origin'] = 'http://christmas.hustonline.net'; $scoreHeader['Referer'] = 'http://christmas.hustonline.net/game1'; $scoreCh = curl_init(); curl_setopt ($scoreCh, CURLOPT_URL, "http://christmas.hustonline.net/game1/upload_score"); curl_setopt ($scoreCh, CURLOPT_HTTPHEADER , $scoreHeader ); curl_setopt( $scoreCh, CURLOPT_HEADER, 0); //不返回响应头信息 curl_setopt( $scoreCh, CURLOPT_RETURNTRANSFER, 1); //保留返回状态信息 curl_setopt($scoreCh, CURLOPT_COOKIE,$cookieStr); curl_setopt($scoreCh, CURLOPT_POST, true); curl_setopt($scoreCh, CURLOPT_POSTFIELDS, $postStr); $back = curl_exec($scoreCh); curl_close ($scoreCh); echo "<br><strong>返回结果:$back</strong>"; $end = microtime(true); $taketime = sprintf('%.5f',$end - $start); echo "<br/><strong>请求完成!用时${taketime}s.</strong><br/>"; ?>请求完成后,返回正确信息如下图所示:
完成之后,可以设置一个score分数值发送即可。当然这只是圣诞节活动,仅供娱乐,不支持使用任意恶性手段强制破解,也是出于对php的curl函数库的使用以及http协议的理解的基础和学习上娱乐而已。和别人交流的时候,有人说用TCP层传输分数等信息会更安全,不如这个游戏是基于html5的,因此只有现代浏览器支持,因此可以使用websocket来传输,不过原理都差不多。其实这个就是要构造一个完善的auth验证机制防止刷分。
最后还是祝大家圣诞节快乐!
相关文章推荐
- 自动化的基于TypeScript的HTML5游戏开发
- [入门教程]使用Cocos2d-html5游戏引擎编写一个简单的游戏 第一回合: 搭建开发环境
- 基于引擎开发HTML5游戏实战(二)---游戏剧本
- 转: Orz是一个基于Ogre思想的游戏开发架构
- 自动化的基于TypeScript的HTML5游戏开发
- 基于HTML5的捕鱼达人游戏网页版
- 基于引擎开发HTML5游戏实战(三)---组织游戏元素
- 使用jQuery开发一个基于HTML5的漂亮图片拖拽上传web应用
- 自动化的基于TypeScript的HTML5游戏开发
- 基于HTML5的捕鱼达人游戏网页版
- 基于引擎开发HTML5游戏实战(四)---组织游戏逻辑
- Html5游戏开发-145行代码完成一个RPG小Demo
- Html5游戏开发-145行代码完成一个RPG小Demo
- 基于引擎开发HTML5游戏实战(五)---游戏部署
- Html5游戏开发-145行代码完成一个RPG小Demo
- 用JavaScript开发了一个网页版贪吃蛇游戏
- 6款用于在线游戏的基于 Html5 的 Javascript 游戏开发框架
- 用html5和js制作一个游戏启动界面(html5游戏开发一)、
- Orz是一个基于Ogre思想的游戏开发架构 .
- 基于安卓开发后嵌入一个html5开发的项目碰到的问题