[晴 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
程序 | 评论(121) | 引用(0) | 阅读(77176)
崇拜
2008/09/18 22:08
崇拜者你好我没找到啊
崇拜者
2008/09/18 22:01
v0.9在后面几页呢,大家往后翻就看到了。不过刚才发现贴条不好用了。原因是开心网又加了个"p=1",代码这里要改一下string content = string.Format("verify={0}&parkid={1}&p=1&_=", this._verifyCode, parkId);
turbozv 回复于 2008/09/19 07:40
来共同维护吧: http://code.google.com/p/kaixin/
大胖
2008/09/18 21:58
大家放心WEB很难屏蔽外挂的
除非改成全FLASH,不过那样的话就更简单了,AHK上
雪风
2008/09/18 21:50
我用PYTHON写了一个找车位外挂,给同事和自己用。
最近外挂总是不稳定,修正了verify的问题以后,在发http request停车的时候经常报HttpError的exception弹出,您这两天有没有遇到这个问题。
turbozv 回复于 2008/09/19 00:09
开心网服务器撑不住了
崇拜
2008/09/18 21:40
能给个网址吗?
崇拜
2008/09/18 21:40
请问:V0.9在哪下载
马丁宁
2008/09/18 21:20
最近停车的外挂好像不太好用哦,请检查检查,谢谢
wdl
2008/09/18 20:20
为了方便使用linux的用户使用,请楼主更改以下源码,这样做,对windows用户使用无影响...

Programs.cs
行10改为:private static string _appDirectory = "./";
行77改为:string path = "./Config.txt";

这样,每次发布新版,我就省去重编译的麻烦了...

谢谢了哈
turbozv 回复于 2008/09/19 07:40
来共同维护吧: http://code.google.com/p/kaixin/
CC
2008/09/18 19:49
开源吧,我们现在只能反汇编来改,何必呢?
L
2008/09/18 19:48
强烈支持开源,你这样的速度是跟不上官方的
kxw001
2008/09/18 19:25
在问一下

现在虽然可以换停了

但是
1.默认先停在邻居家里了
2.不能自动贴条了

呵呵,请在看看,先谢过了
kuku
2008/09/18 19:10
用了STPHEN的PARKER.EXE覆盖,还是不能使用
stephen Email
2008/09/18 18:43
服务器上没加 mime 类型
换个地址 bbs.7sstudio.net/parker.rar
达人
2008/09/18 18:40
停车位的外挂不能用了哦
兰台
2008/09/18 18:36
无法找到网页啊 楼下的兄弟 你那个找不到网页···
崇拜者
2008/09/18 18:32
lz的0.9版本已经修正了a参数啊,大家用这个就可以了,去前两页找找
stephen Email Homepage
2008/09/18 18:22
这次开心网对 park.php 调用加了个 a 的参数
原有外挂程序不支持。

楼主恕我冒犯,我也只是为了便民,直接修改了你的代码,补上了这个参数。并且在原有停车时间设定上加了0-60分钟的随机时间,避免每次换车位时间都是固定的。

需要的朋友可以在 bbs.7sstudio.net/parker.exe 下载到,直接覆盖原文件就行了。

保证无毒无马,怕的朋友就别下了,我只是在作者更新前方便下大家。
turbozv 回复于 2008/09/19 07:39
来共同维护吧: http://code.google.com/p/kaixin/
stephen Email Homepage
2008/09/18 18:22
这次开心网对 park.php 调用加了个 a 的参数
原有外挂程序不支持。

楼主恕我冒犯,我也只是为了便民,直接修改了你的代码,补上了这个参数。并且在原有停车时间设定上加了0-60分钟的随机时间,避免每次换车位时间都是固定的。

需要的朋友可以在 http://bbs.7sstudio.net/parker.exe 下载到,直接覆盖原文件就行了。

保证无毒无马,怕的朋友就别下了,我只是在作者更新前方便下大家。
zerg
2008/09/18 17:56
终于等到了
开开
2008/09/18 17:43
写的是很好,但是开心网的程序员根据你写的,别人弥补了相关漏洞,你的外挂不能用了,大侠继续写个zan
RRR
2008/09/18 17:04
外挂当掉了,请求大侠支援~~!zan
不懂
2008/09/18 16:27
写的真详细,不过,对我这样的外门汉来说只能是看热闹,不懂不懂啊
崇拜者
2008/09/18 06:55
看得可真仔细阿。。。
崇拜者
2008/09/18 06:52
看了半天本质上好像就是这句:
string postData = string.Format("verify={0}&park_uid={1}&parkid={2}&carid={3}&neighbor={4}&a=1&first_fee_parking=0&_=", new object[] { this._verifyCode, num, parkId, parkCarId, this.IsNeighbor(num) ? "1" : "0" });
多了个"a=1”?
turbozv 回复于 2008/09/18 06:53
哈哈,正解~
大肚腩
2008/09/18 06:44
开心网又挂了~~~~
崇拜者
2008/09/18 06:39
现在程序运行速度好像比以前快了很多啊,做了哪些优化呢?
崇拜者
2008/09/18 06:23
0.9好像没有问题啊,可以停了,我刚试过
不开心
2008/09/18 06:22
靠,没有外挂还玩个鸟啊,LZ加油
崇拜者
2008/09/18 06:19
顶老大一个,给我们讲一下开心网代码的变化的地方以及你是如何修改的好吗zan
活动人
2008/09/18 05:57
我知道这里有tmd开心网的人,你们是不是智商低啊~没有外挂还会有人去开心网吗?什么思路啊,你们这些开心网的低能儿,目光短浅,成不了大事。
   老大,我们看好你,别让他们看扁了~加油!(0.9目前还不好用……)
分页: 3/5 第一页 上页 1 2 3 4 5 下页 最后页