kaixin.com 叫开心网,看着域名似乎是真正的开心网,但却是“李鬼”开心网,是校内网为了挫伤最近火爆的对手开心网(www.kaixin001.com)而使出的狠招。加之开心网本身的技术实力不足,最近又对游戏策略频繁的调整,导致有一部分用户转到了校内开心网。

我也试着注册了一个kaixin.com的账号玩玩。

校内网的技术实力确实比开心网强很多,校内开心网大部分采用了Flash架构,然后是一大堆不好读懂的JavaScript shuai

Flash Game真是很绚啊,“狗狗”是个很不错的游戏。喂食喂水的认证码被放在Flash的内部,所以需要反编一下swf才能拿到,比JS结构复杂一些~

这里提出来和大家讨论的是校内开心网的“谁最牛”组件。应该来说这是一个很不错的组件,大家一起在校内开心网平台上玩游戏,争排名。不过作为Flash的客户端,怎么把分数上传到服务器却有一个安全问题。我具体抓包实验的结果就是:分数没有做认证直接明文传的。结果可想而知,我试着改了一下分数,结果改过了头成了第一个吃螃蟹的人 -- 我的账号被校内开心网封了puke

这里公布一些分析数据:
分数上传POST地址: http://xyx.kaixin.com/upload/plugins.php
POST提交的内容:
others=
bonus=
level=
fscore=14 (这里是分数,任意改大就好了)
playertime=1224773914(这里是游戏结束的时间,time()返回的秒数)
playedtime=3(游戏进行的时间, playertime-starttime)
starttime=1224773911(这里是游戏开始的时间)
action=swfrecord
game=autobahn(游戏名称)
p=nkflash

大家稍微改改这几个变量就搞定啦,不要太离谱,不然就会和我一样,被校内开心网封账号cry

以上是修改单个游戏的分数。“谁最牛”里有个牛粪,是用分数换的,所以只需简单的:
while(1) { do_post(); }
就可以坐享其成了cool
[晴 2008/10/15 19:43 | by turbozv ]
Shift+Alt+Enter: 切换全屏编辑 -- 这个比较有用
Ctrl+m+Crtr+o折叠所有大纲
Ctrl+M+Crtr+P: 停止大纲显示
Ctrl+K+Crtr+C: 注释选定内容
Ctrl+K+Crtr+U: 取消选定注释内容
Ctrl+J : 列出成员 智能感知
Ctrl+B,T / Ctrl+K,K: 切换书签开关
Ctrl+B,N / Ctrl+K,N: 移动到下一书签
Ctrl+B,P: 移动到上一书签
Ctrl+B,C: 清除全部标签
开心网最近修复了隐藏邻居停车的BUG,大家不用着急没有车位,按照以下策略给马甲停车,停10辆车完全没有问题。

AB两个马甲互为好友(没有其他好友,所以有邻居存在),都升级了免费车位,并都有10辆车。
写以下三个ini文件
   1.ini A账号信息,只贴条不停车
   2.ini B账号信息,停车并贴条
   3.ini A账号信息,停车不贴条
这样10辆车就会自动全部在好友的4个车位,以及邻居的6个车位全部换一次了。

另外我们的开发组人数增加到3人,Parker持续更新中……
http://www.turbozv.com/read.php/831.htm

对了,写了一个小工具帮助大家删除马甲的好友。 直接使用parker的ini文件就好了,需要注意的是千万不要用主号的ini文件,不然你的好友会被删除干净的…………
下载文件 (已下载 3712 次)
[晴 2008/09/17 08:38 | by turbozv ]
开讲。

做一个Web游戏外挂需要的准备知识:
1) 需要有耐心
2) 熟悉HTML, JavaScript,特别是FORM
3) 熟悉HTTP协议,特别是Cookie, URL的编码方式和POST, GET内容格式
4) 熟悉游戏本身,能抽象出最优的赚钱/升级的数学模型
5) 掌握一门语言,白菜萝卜都可以,我比较喜欢用Python和C#
6) 需要一些抓包的工具,比如Fiddler

好了,来个例子,开心网争车位.

首先,我们看看一个正常用户玩的时候是怎么玩的。
1) 浏览器输入 www.kaixin001.com ,输入用户名,密码,点登陆
2) 登陆后选择左侧的“争车位”,进入到争车位
3) 看看谁在我的车位里,一一贴条
4) 看看自己的车哪些停车时间操作15分钟了,一一找个空的不免费的车位挪过去
5) 登出开心网,关闭浏览器

看看让程序怎么来实现1-6。
1) 登陆开心网
在Fiddler的帮助下,我们知道登陆是把FORM提交到/login/login.php,POST内容是url=%2F&email=xxx@xxx.com&password=xxx
用C#可以方便的完成这个POST操作,然后得到服务器的返回,然后根据返回的内容里找一个关键字就可以判断这次登陆操作是否成功了。(比如我找的就是"<title>我的首页 - 开心网</title>")

2) 登陆争车位
这次是一个GET操作,URL是/app/app.php?aid=1040。
需要说明一下的是,这里没有提供用户名密码,服务器怎么能知道是哪个用户呢?Cookie在这里就发挥了它的作用。
C#里存放Cookie的方法是new 一个CookieContainer,然后所有的HttpWebRequest的CookieContainer都用它。
好了,取得这个页面以后,我们能得到很多信息:(这些信息是JSON格式)
a) 好友列表,每个好友的状态(在线/车位满)
b) 自己的车库信息,停了那些好友的哪些车,分别赚了多少钱
c) 自己的汽车信息,多少辆车,分别停在哪里,赚了多少钱
根据这些信息,我们可以得到一个停放的列表(车位不满的好友列表)

3) 贴条
贴条是一个POST操作,URL是/parking/post.php,内容是verify=xxx&parkid=yyy&p=1&_=
parkid很好理解,车库信息里直接可以取到,那么verify怎么得到的呢?
我当初的第一反应是Cookie数据通过某种运算得到的,不过后来我看了登陆争车位的html后才发现原来这个verify是这样写的:
...
<script language=javascript>
var fs2_pars = "f1";
var g_verify = "383639_1040_383639_1221703779_49963b942199e94b88e405d0f7b1651d";
var g_first = parseInt("0");
var g_touid = parseInt("0");
var g_checkswf = 0;
.....
很好,直接去这个从HTML取得的值就好了。

4) 挪车位
这个操作稍微复杂了一点点,具体的HTTP请求大家可以去分析一下,我分析的结果如下:
a) 是否是免费车位
在JavaScript里有代码:
v_park_free = (v_parkid >> 16) & 0xff;
      if (v_park_free)
      {
        v_mycar += '免费车位';
      }
      else
      {
        v_mycar += '私家车位';
      }
c) 读取邻居家车库信息
URL: /parking/neighbor.php
POST内容: verify=xxx&puid=yyy&_=
d) 读取邻居家车库信息
URL: /parking/user.php
POST内容: verify=xxx&puid=yyy&_=
e) 停车
URL: /parking/park.php
POST内容: verify=xxx&park_uid=xxx&parkid=xxx&carid=xxx&neighbor=xxx&a=1&first_fee_parking=0&_=

5) 登出
GET URL: /login/logout.php

恭喜你,基本的操作你都明白了。

时间晚了,该睡觉了,一些高级主题改天再写~

--------------Google Code 分割线-------------
http://code.google.com/p/kaixin/
---------------------------------------------------

所有代码都上传到了 http://code.google.com/p/kaixin/
大家可以发信给我申请writer权限,或者直接把写好的代码发给我由我来merge。
我的Email: turbozv(at)gmail.com
分页: 3/14 第一页 上页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]