PHP实现的某SNS手机游戏的简单外挂

首先简单介绍一下这个游戏,手机游戏大航海是人人网上一个纯手机游戏,目前只针对手机校内用户。 手机访问m.xiaonei.com->应用->大航海来体验这个手机游戏的乐趣。

现在随着SNS的流行,WEB游戏也开始流行。有时候并不是为了玩游戏,更多的时候是遍历一遍好友。回到外挂这个话题上来。

作为手机游戏,受到手机浏览器的限制,这个WAP游戏不可能做的很炫很复杂。所以弄个外挂还是非常简单的。

首先要感谢人人网,为我们提供了免登录书签,这样凭借一串字符串就可以登录人人网,而不需要再模拟手机用户登录的过程了。下面代码当中的sid=****就是我的登录大航海游戏的书签。出于众所周知的原因,这串字符是不能公布的。

说起来这个原理非常简单:获取页面->分析链接->执行操作。

涉及到两个个关键的PHP函数:

1、file_get_contents():用来取得URL的内容。

2、preg_match_all():正则匹配所有可执行操作的链接。每一个可执行的操作对应的URL字符串都有明显特征,所以找起来也很方便。

下面附上完整的PHP代码。

<?php /** * 手机人人网(http://m.renren.com) * 大航海外挂 * * @author BookMoth * @version 0.1 * @copyright BookMoth * * @todo 捕捞价值高的鱼、自动转移新海域、给好友放鲨鱼、好友…… * */ define('BASE_URL','http://mapps.renren.com/'); $url = "http://m.renren.com/apphistory.do?appid=31662&sid=*********************************&u*b*s*&htf=646";//捕鱼游戏的入口链接地址。 $reg_a = '/<a href="//([^>]*)">.+?<//a>/'; $cmdChain = new CommandChain(); $cmdChain->addCommand(new OpRemoveShark());//清除鲨鱼操作 $cmdChain->addCommand(new OpSell());//卖鱼操作 $cmdChain->addCommand(new OpFish());//捕捞操作 while (true) { $content = file_get_contents($url); preg_match_all($reg_a,$content,$result);//提取所有链接 foreach ($result[1] as $item) { $cmdChain->runCommand($item);//根据链接执行操作 } $remain_second = get_remain_time($content);//获取刷新时间 $refresh_second = $remain_second?(($remain_second < 7200)?$remain_second:7200):3; sleep($refresh_second);//睡觉。。 } function get_remain_time($content){ $reg_hour = '/(/d+)小时/u'; $reg_minus = '/(/d+)分/u'; preg_match($reg_hour,$content,$hour); preg_match($reg_minus,$content,$minus); $remain_hour = $hour[1]?$hour[1]:0; $remain_min = $minus[1]?$minus[1]:0; $remain_sec = ($remain_hour*60+$remain_min)*60; echo date("Y-m-d H:i:s",time())."[0]还需{$remain_hour}小时{$remain_min}分完成/n"; return $remain_sec; } class CommandChain{ private $_commands = array(); public function addCommand($cmd){ $this->_commands []= $cmd; } public function runCommand($url){ foreach( $this->_commands as $cmd ){ if ( $cmd->onCommand($url) ) return; } } } class OpRemoveShark{ //清鲨鱼 public function onCommand($url){ if(strpos($url,'removeShark?')){ //发现鲨鱼 $result = file_get_contents(BASE_URL.$url); if(strstr($result,'成功清除鲨鱼,获得5点经验')){ echo date("Y-m-d H:i:s",time())."[0]成功清除鲨鱼,获得5点经验/n"; }else{ echo date("Y-m-d H:i:s",time())."[1]发现鲨鱼,但是清除失败/n"; } return true; }else{ return false; } } } class OpSell{ //卖出 public function onCommand($url){ if(strpos($url,'sell?')){ $result = file_get_contents(BASE_URL.$url); if(strstr($result,'成功卖出')){ preg_match('/<span class="red">([^<]+)<//span>/',$result,$info); echo date("Y-m-d H:i:s",time())."[0]{$info[1]}/n"; }else{ echo date("Y-m-d H:i:s",time())."[1]卖出失败/n"; } return true; }else{ return false; } } } class OpFish{ //开始探测 public function onCommand($url){ if(strpos($url,'fishDetect?')){ $result = file_get_contents(BASE_URL.$url); if(strstr($result,'捕捞')){ //捕捞 preg_match('/<a href="//(voyage_wap//fish//fish/?[^" mce_href="//(voyage_wap//fish//fish/?[^"]+)">/',$result,$fish); if($fish[1]){ $result = file_get_contents(BASE_URL.$fish[1]); echo date("Y-m-d H:i:s",time())."[0]捕捞开始/n"; } }else{ echo date("Y-m-d H:i:s",time())."[1]探测失败/n"; } return true; }else{ return false; } } } ?>

运行的结果大概是这样的:

大航海外挂运行效果图

最后说下为什么要写外挂,主要是有人偷鱼偷的很happy,我稍微有点小郁闷。写外挂的重要意义在于:

为了减少渔民的损失,打消几个别有用心的不法分子别人劳动果实的险恶意图。在广大青少年当中树立高尚的社会主义价值观,强化青少年法律意识,杜绝青少年违法犯罪行为,共同构建社会主义和谐社会……

其实大航海是个非常不错的应用。感谢他的作者。

--

欢迎讨论下面的问题:

1、对于受到客户端限制的WEB/WAP游戏,如何检测和预防上面的这种自动化脚本?

2、代码本身的问题,比如设计模式,算法等等。

不欢迎下面的问题:

1、这个外挂怎么用啊?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值