成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

當前位置:首頁>>軟件教程>>新聞內容  
游戲外掛基本原理及實現
作者:flycsdn 發布時間:2003-11-26 8:57:05 | 【字體:

  游戲外掛已經深深地影響著眾多網絡游戲玩家,今天在網上看到了一些關于游戲外掛編寫的技術,于是轉載上供大家參考

  1、游戲外掛的原理

  外掛現在分為好多種,比如模擬鍵盤的,鼠標的,修改數據包的,還有修改本地內存的,但好像沒有修改服務器內存的哦,呵呵。其實修改服務器也是有辦法的,只是技術太高一般人沒有辦法入手而已。(比如請GM去夜總會、送禮、收黑錢等等辦法都可以修改服務器數據,哈哈)

  修改游戲無非是修改一下本地內存的數據,或者截獲API函數等等。這里我把所能想到的方法都作一個介紹,希望大家能做出很好的外掛來使游戲廠商更好的完善自己的技術。我見到一篇文章是講魔力寶貝的理論分析,寫得不錯,大概是那個樣子。下來我就講解一下技術方面的東西,以作引玉之用。

  2 技術分析部分

  2.1 模擬鍵盤或鼠標的響應

  我們一般使用:

  UINT SendInput(
    UINT nInputs,   // count of input events
    LPINPUT pInputs, // array of input events
    int cbSize    // size of structure
  ); 

  API函數。第一個參數是說明第二個參數的矩陣的維數的,第二個參數包含了響應事件,這個自己填充就可以,最后是這個結構的大小,非常簡單,這是最簡單的方法模擬鍵盤鼠標了,呵呵。注意,這個函數還有個替代函數:

  VOID keybd_event(
    BYTE bVk,       // 虛擬鍵碼
    BYTE bScan,      // 掃描碼
    DWORD dwFlags,
    ULONG_PTR dwExtraInfo // 附加鍵狀態
  ); 

  與

  VOID mouse_event(
    DWORD dwFlags,      // motion and click options
    DWORD dx,         // horizontal position or change
    DWORD dy,        // vertical position or change
    DWORD dwData,      // wheel movement
    ULONG_PTR dwExtraInfo  // application-defined information
  ); 

  這兩個函數非常簡單了,我想那些按鍵精靈就是用的這個吧。上面的是模擬鍵盤,下面的是模擬鼠標的。這個僅僅是模擬部分,要和游戲聯系起來我們還需要找到游戲的窗口才行,或者包含快捷鍵,就象按鍵精靈的那個激活鍵一樣,我們可以用GetWindow函數來枚舉窗口,也可以用Findwindow函數來查找制定的窗口(注意,還有一個FindWindowEx),FindwindowEx可以找到窗口的子窗口,比如按鈕,等什么東西。當游戲切換場景的時候我們可以用FindWindowEx來確定一些當前窗口的特征,從而判斷是否還在這個場景,方法很多了,比如可以GetWindowInfo來確定一些東西,比如當查找不到某個按鈕的時候就說明游戲場景已經切換了,等等辦法。有的游戲沒有控件在里面,這是對圖像做坐標變換的話,這種方法就要受到限制了。這就需要我們用別的辦法來輔助分析了。

  至于快捷鍵我們要用動態連接庫實現了,里面要用到hook技術了,這個也非常簡單。大家可能都會了,其實就是一個全局的hook對象然后SetWindowHook就可以了,回調函數都是現成的,而且現在網上的例子多如牛毛。這個實現在外掛中已經很普遍了。如果還有誰不明白,那就去看看MSDN查找SetWindowHook就可以了。

  不要低估了這個動態連接庫的作用,它可以切入所有的進程空間,也就是可以加載到所有的游戲里面哦,只要用對,你會發現很有用途的。這個需要你復習一下Win32編程的基礎知識了。呵呵,趕快去看書吧。

  2.2 截獲消息

  有些游戲的響應機制比較簡單,是基于消息的,或者用什么定時器的東西。這個時候你就可以用攔截消息來實現一些有趣的功能了。

  我們攔截消息使用的也是hook技術,里面包括了鍵盤消息,鼠標消息,系統消息,日志等,別的對我們沒有什么大的用處,我們只用攔截消息的回調函數就可以了,這個不會讓我寫例子吧。其實這個和上面的一樣,都是用SetWindowHook來寫的,看看就明白了很簡單的。

  至于攔截了以后做什么就是你的事情了,比如在每個定時器消息里面處理一些我們的數據判斷,或者在定時器里面在模擬一次定時器,那么有些數據就會處理兩次,呵呵。后果嘛,不一定是好事情哦,呵呵,不過如果數據計算放在客戶端的游戲就可以真的改變數據了,呵呵,試試看吧。用途還有很多,自己想也可以想出來的,呵呵。

  2.3 攔截Socket包

  這個技術難度要比原來的高很多。

  首先我們要替換WinSock.DLL或者WinSock32.DLL,我們寫的替換函數要和原來的函數一致才行,就是說它的函數輸出什么樣的,我們也要輸出什么樣子的函數,而且參數,參數順序都要一樣才行,然后在我們的函數里面調用真正的WinSock32.DLL里面的函數就可以了。

  首先:我們可以替換動態庫到系統路徑。

  其次:我們應用程序啟動的時候可以加載原有的動態庫,用這個函數LoadLibary然后定位函數入口用GetProcAddress函數獲得每個真正Socket函數的入口地址。

  當游戲進行的時候它會調用我們的動態庫,然后從我們的動態庫中處理完畢后才跳轉到真正動態庫的函數地址,這樣我們就可以在里面處理自己的數據了,應該是一切數據。呵呵,興奮吧,攔截了數據包我們還要分析之后才能進行正確的應答,不要以為這樣工作就完成了,還早呢。等分析完畢以后我們還要仿真應答機制來和服務器通信,一個不小心就會被封號。

  分析數據才是工作量的來源呢,游戲每次升級有可能加密方式會有所改變,因此我們寫外掛的人都是亡命之徒啊,被人愚弄了還不知道。

  2.4 截獲API

  上面的技術如果可以靈活運用的話我們就不用截獲API函數了,其實這種技術是一種補充技術。比如我們需要截獲Socket以外的函數作為我們的用途,我們就要用這個技術了,其實我們也可以用它直接攔截在Socket中的函數,這樣更直接。

  現在攔截API的教程到處都是,我就不列舉了,我用的比較習慣的方法是根據輸入節進行攔截的,這個方法可以用到任何一種操作系統上,比如Windows 98/2000等,有些方法不是跨平臺的,我不建議使用。這個技術大家可以參考《Windows核心編程》里面的545頁開始的內容來學習,如果是Win98系統可以用“Windows系統奧秘”那個最后一章來學習。


文章來源:yesky
·[圖]游戲外掛設計技術探討
 放生
 愚愛
 夠愛
 觸電
 白狐
 葬愛
 光榮
 畫心
 火花
 稻香
 小酒窩
 下雨天
 右手邊
 安靜了
 魔杰座
 你不像她
 邊做邊愛
 擦肩而過
 我的答鈴
 懷念過去
 等一分鐘
 放手去愛
 冰河時代
 你的承諾
 自由飛翔
 原諒我一次
 吻的太逼真
 左眼皮跳跳
 做你的愛人
 一定要愛你
 飛向別人的床
 愛上別人的人
 感動天感動地
 心在跳情在燒
 玫瑰花的葬禮
 有沒有人告訴你
 即使知道要見面
 愛上你是一個錯
 最后一次的溫柔
 愛上你是我的錯
 怎么會狠心傷害我
 不是因為寂寞才想
 親愛的那不是愛情
 難道愛一個人有錯
 寂寞的時候說愛我
主站蜘蛛池模板: 耒阳市| 景宁| 新乐市| 长顺县| 栾城县| 玛曲县| 峨边| 且末县| 屏东县| 辽阳市| 宁晋县| 祁东县| 瑞昌市| 马鞍山市| 鄂尔多斯市| 会理县| 修文县| 文水县| 朔州市| 偏关县| 南昌县| 兖州市| 吉隆县| 楚雄市| 内乡县| 铜川市| 黔江区| 江源县| 华阴市| 龙海市| 横山县| 墨竹工卡县| 四子王旗| 鄂托克前旗| 汉中市| 洱源县| 吉水县| 平昌县| 武夷山市| 通渭县| 武夷山市|