您的位置:首页 > 编程语言 > PHP开发

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

2009-11-04 14:47 513 查看
首先简单介绍一下这个游戏,手机游戏大航海是人人网上一个纯手机游戏,目前只针对手机校内用户。 手机访问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、这个外挂怎么用啊?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: