[晴 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
自己一个人的精力不够,而且现在也不是很喜欢玩开心网了。

源码待我整理以后以GPL的形式公开出来,希望有兴趣的人继续完善更新。

谢谢大家

----------2008.09.16的分割线----------------

中秋节搬了三天的家,没上网,今天才看到大家的回复,谢谢大家的关系和支持。

之所以要想公开源代码,是因为工作比较忙,没有足够的时间和精力来及时回答大家的问题和处理程序的更新。

我本想公开了代码,大家稍微改改就可以满足自己的需要了,或者有时间和精力的朋友拿去继续改进,为大家带来更好的体验。不过可能会带来木马的问题,这个的确是我之前没有考虑到的问题。

所以,综合考虑:
1)不公开源码 http://code.google.com/p/kaixin/
2)我会继续更新外挂(因为比较忙,所以回复和更新会慢一点,希望大家理解)
3)我会写一篇教学贴,教大家怎么来做外挂

----------2008.09.19的分割线----------------
所有代码都上传到了 http://code.google.com/p/kaixin/
大家可以发信给我申请writer权限,或者直接把写好的代码发给我由我来merge。
我的Email: turbozv(at)gmail.com
[晴 2008/09/09 06:36 | by turbozv ]
下载: http://code.google.com/p/kaixin/downloads/list

【软件名称】
Biter V0.6f for Kaixin001.com

【软件作者】
TurboZV  (http://www.TurboZV.com)
Xiandong Lu ( lu.xiandong@gmail.com )
Flyingbee Lee ( flyingbee.lee@gmail.com )

【发布时间】
2008-10-18

【功能更新】
0.2  自动休息,支持优先咬人的Id列表,恢复体力的Id列表,允许休息的Id列表,支持配置是否咬剩下的人
0.2a 修复了体力为0才休息的BUG,咬完人后会再次检查是否需要休息
0.3  修复了不能咬所有人的BUG,支持不被咬名单Id列表
0.3a 如果AllowRestList为空,就表示允许所有的人来休息
0.3b 可以咬未加入游戏的好友(BiteAll=1)
0.4  自动咬高级的部位
0.5  支持自定义咬人方式和部位
0.5a 欢迎lu.xiandong@gmail.com加入,他给大家带来了自定义咬人次数
0.5c 修复:咬人次数不正确,改进:体力不支情况下即刻退出
0.5d 修复:遇到对方体力耗尽会结束咬白名单的问题
0.5e 改进:修改ACC获取方式,同时支持从config文件中读取;从INI文件调整部分参数到config文件;改进咬白名单方式,预先剔除不在可咬范围里的人;
0.5f 修复:0.5e版本不能保护的问题
0.5g 修复:咬人acc位置调整
0.5h 修复:当朋友都不可咬时候,自己又要休息时候出现错误的情况
0.5i 支持网络获取Acc
0.5j 改进:增加GetAccType变量来支持3种获取Acc方式;网络获取Acc方式支持代理
0.5k 改进:增加从配置文件中读取代码获取Acc方式
0.6  加入了AutoUpdate自动更新模块,方便用户更新
0.6b 支持保护多人,可设定Log是否输出
0.6f 重构了代码,把网络参数统一放到Config.txt中

【软件功能】
功能列表:
* 自动添加咬人组件
* 自动休息
* 支持保护某个Id
* 支持优先咬人的Id列表
* 支持恢复体力的Id列表
* 支持允许休息的Id列表
* 支持不被咬名单Id列表
* 支持配置是否咬剩下的人(多咬才能升级)
* 自动登陆多个账号
* 支持代理设置
* 支持中文显示用户信息
* 支持自定义循环咬时间
* 网络超时自动重连3次
* 自动咬高级的部位
* 支持自定义咬人方式和部位
* 自定义咬人次数

【使用方法】
请在运行前确保以下文件在同一个目录里:
Biter.exe
System.Net.Json.dll
Config.txt
Sample1.ini

用记事本打开Sample1.ini文件,编辑成为您自己的账号信息。

如果需要同时使用多个马甲,请在Biter.exe所在目录下创建任意一个ini文件即可。
比如可以创建aaa.ini文件,内容请参考Sample1.ini

设置好以后,直接双击运行Biter.exe就好啦。

关于用户ID的获取方法:
点“我可以去咬的人”,然后把鼠标放到好友名字上,就可以看到浏览器的状态栏里有这样的信息:
javascript:gotouser(383639);
那么好友的ID就是383639  (本人开心网ID)

不能运行的用户请下载 Microsoft .NET Framework 2.0:
http://www.microsoft.com/downloads/details.aspx?familyid=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5&displaylang=zh-cn
【软件名称】
开心网外挂 之 马甲助手 AddFriends V1.1 (www.turbozv.com)

【软件作者】
TurboZV  ( http://www.TurboZV.com )
Hook ( hook.hu@gmail.com )

【发布时间】
2008-09-22 23:10

【功能更新】
1.0  第一个版本。将指定的 N 个用户互相加为好友
     应网友要求,放一个马甲助手出来。
     功能很简单,把自己的所以账号相互加为好友,以便挪车位或者朋友买卖时候操作方便。

1.1  增加了新老用户两个列表,方便加少数新号时的速度,避免老号间的重复添加操作
     还可以很容易的实现 1 加 N 或者 N 加 1。


【使用方法】
在目录下创建两个文件:
NewFriends.txt (这个必须有),里面是你的新增号的登陆Email地址和密码,每个账号地址和密码各一行。
OldFriends.txt (这个可以没有),里面是你已有的账号和密码,格式同上

举例来说, 你创建了三个新号 A@A.com 密码a, B@B.com 密码b, C@C.com 密码c,
原来有三个老号 D@D.com 密码d, E@E.com 密码e, F@F.com 密码f,那么就可以创建这两个文件并填入以下内容:
------------------以下为 NewFriends.txt 内容:------------------
A@A.com
a
B@B.com
b
C@C.com
c
------------------以下为 OldFriends.txt 内容:------------------
D@D.com
d
E@E.com
e
F@F.com
f
----------------------  分隔符,不要拷贝我  --------------------
然后运行AddFriends.exe就可以将A、B、C三个用户相互加为好友,以及将他们都和 D、E、F 加为好友。
但 D、E、F 之间的关系保持不变,不管原来是不是好友。

【实用案例】
============ 1 + N:
1 个小号,要和一堆老号加起来,怎么办?NewFriends里写小号,OldFriends里写一堆老号。

============ N + 1:
已经有 N 个号了,突然想让他们加入停车游戏,要给一个大号X提供车位,怎么办? NewFriends里写这 N 个号,OldFriends里写大号X。

下载:http://kaixin.googlecode.com/files/AddFriends.V1.1.zip

不能运行的用户请下载 Microsoft .NET Framework 2.0:
http://www.microsoft.com/downloads/details.aspx?familyid=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5&displaylang=zh-cn
分页: 26/68 第一页 上页 21 22 23 24 25 26 27 28 29 30 下页 最后页 [ 显示模式: 摘要 | 列表 ]