開心網外掛開發手記

做一個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 protected]&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

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


^_^ 這個好做 我給你說下大概

分析網頁遊戲的實現.
如果是用ajax實現的,那很好,你就把它的html和js分析一下,就用傲遊的ViewPage插件,
一般來說用ajax的都用json數據在服務器和客戶端進行交互,然後找到某功能對應的js代碼,就是ajax.post(url,...
記下這個url
用httpwebrequest登錄遊戲,然後向上面得到的url post數據就可以了

比較麻煩的一點就是刷新機制,比如有N個功能,對應界面上的M個控件,你可能需要N+個線程進行刷新...這還不算,有很多數據必須滿足一定條件才能獲得...

總起來說,幾個功能比較簡單,如果N多功能就比較麻煩了
.net3.5有json序列化和反序列化的功能,很好用,自己再建立一個數據綁定機制和刷新機制 就能工作了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章