日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

网页游戏外挂分析及防范

發布時間:2023/12/18 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网页游戏外挂分析及防范 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近在開發社區版網頁游戲,其實在整個開發過程中碰到了不少問題。而這些問題也被很細心的用戶們發現,并使用外掛程序鉆了空子。例如我在前面曾寫過的一篇博客《web開發安全守則之永遠不要相信用戶的輸入》中介紹過,因為判斷用戶購買道具時,整個程序遺漏對負數的處理。今天借著另外一個外掛問題,講講網頁游戲中的外掛。

網頁游戲里面的外掛和網絡游戲的外掛是截然不同的,需要技術也要簡單很多。一般常用方法是使用模擬http的數據提交,當然這個過程需要知道前臺(一般flash)的請求接口以及該請求接口的功能;使用程序自動地按序調用這些接口。

例如:在農場游戲中偷取好友的菜, 而這個操作需要訪問http://www.aaa.com/steal.php,它需要傳遞參數a=B;c=D; 那么下面這段php腳本就能達到這么一個效果(注意一般程序都需要登錄,這里你需要處理傳遞那邊的session——id,具體可以使用下面提到的兩個工具獲得)

$rr_url = 'http://www.aaa.com/steal.php'; function curlCookie($url, $cookie, $post) {$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_HEADER, false);$cookie && curl_setopt($ch, CURLOPT_COOKIE, $cookie);curl_setopt($ch, CURLOPT_POST, true);$post && curl_setopt($ch, CURLOPT_POSTFIELDS, $post);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);$res = curl_exec($ch);curl_close($ch);return $res; } $cookie = '';//這個是記錄你登陸的session_id $post = http_build_query(array('a'=>'B', 'c'=>'D')); curlCookie($rr_url, $cookie, $post);

如果你把整個游戲的流程分析清楚了(要有耐心),那么寫成一系列的這樣的請求腳本,你就可以讓程序自動跑了。至于怎么樣去觀察每個請求的詳細信息,這個有兩個工具,使用firefox的話,一般就用firebug;在ie下面使用httpwatch。

?

上面是進行網頁網掛開發的基礎知識,要知道更多的東西,就需要了解http的協議了,不過有上面知識你就入門了;于是不使用手動玩游戲,讓外掛程序幫你實現。而要獲取更大的好處,就需要尋找程序的漏洞,這可是是個需要耐心的活。舉個例子,該游戲是一款足球游戲, 你每天可以與別人打比賽,但是每天比賽場次有限制,一天最多能打30場。而你想免費多打幾場的話,就需要找漏洞:

?

1.最簡單的方式:從打比賽的接口下手,首先嘗試使用多并發的程序不停地訪問這個接口,我們遇到的問題就是在php的fastcgi進行處理的時候,由于是一個人多個請求:

A:判斷剩余場次

B:中間執行代碼

C:更新比賽場次

兩個請求出現了這么一種情況, i請求在執行B, 這個時候ii請求執行了A,這樣他就可以多打比賽了,對于這樣的操作我們可以設置標志變量;另外B的過程會很短,給利用的機會并不多。

php也有多線程的操作,下面是前面程序的多線程版本

?

function multiCurlCookie($url, $cookie, $post) {$main = curl_multi_init();for($i=0; $i<THREADS; $i++){$ch[$i] = curl_init($url);curl_setopt($ch[$i], CURLOPT_URL, $url);curl_setopt($ch[$i], CURLOPT_HEADER, false);$cookie && curl_setopt($ch[$i], CURLOPT_COOKIE, $cookie);curl_setopt($ch[$i], CURLOPT_POST, true);$post && curl_setopt($ch[$i], CURLOPT_POSTFIELDS, $post);curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, true);curl_multi_add_handle($main, $ch[$i]);}$running = 0;do{curl_multi_exec($main, $running);}while($running > 0);for($i=0; $i<THREADS; $i++){$s .= var_export(curl_multi_getContent($ch[$i]), true) . "\n";}file_put_contents('curl', $s);curl_multi_close($main); }

?

?

2。找更新比賽場次的地方。例如我們這款游戲, 就是在某一個地方更新比賽的場次的邏輯處理出了問題,而聰明的外掛者發現了這個問題,于是利用這個漏洞不斷打比賽,打完以后又不定地將比賽場次更新大最大值。

?

下面說說如何防御這樣的外掛:

1. 對程序進行詳細地測試

2.對程序修改的時候,要考慮周全,絕大多數破壞行為是由于程序沒有考慮周全,同時我們也不得不佩服這些外掛者的細心

3.對一些敏感的信息要做日志,方便以后觀察

?

發現系統出了外掛,我們從那些地方找到入侵者的蛛絲馬跡:

1.php的錯誤日志--檢查用戶是否有非法的輸入,造成php錯誤

2.nginx/apache的訪問日志記錄,檢查用戶訪問程序的順序和具體的接口,看其中是否有可能存在的漏洞

3.自己的日志記錄,一般的程序會對關鍵部分記錄日志,以此觀察某些操作是否正常---這一項在程序設計的時候就需要考慮

4.數據庫里面的數據,觀察用戶更新了那些與他相關的數據

5.數據庫語句的日志記錄---例如mysql里面的bin.log文件

?

今天出現的這個問題 就是發現數據庫操作日志文件中大量更新比賽場次的操作,調整思路,找出原來在更新比賽場次時的一個問題。也就是程序上的邏輯考慮不周全。

?

簡單地說了這么多,其實核心就是程序設計的時候要考慮周全,留意用戶的不正常行為。我們沒有測試到的地方,外掛開發者們幫我找到了,于是盡快發現問題,解決問題。我這里的并沒有提到其他方面的安全問題,例如服務器和數據庫的操作權限造成的管理權限泄漏,php腳本的攻擊。這些都是在程序一開始就必須做的基本安全防范。

轉載于:https://www.cnblogs.com/kucongzhi/archive/2010/11/21/1848156.html

總結

以上是生活随笔為你收集整理的网页游戏外挂分析及防范的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。