我主要對外掛程式的技術進行分析,至於遊戲裡面的內部結構每個都不一樣,這裡就不做講解了,我也沒有那麼厲害,所有的都知道,呵呵!
1 首先遊戲外掛程式的原理
外掛程式現在分為好多種,比如模擬鍵盤的,滑鼠的,修改資料報的,還有修改本地記憶體的,但好像沒有修改伺服器記憶體的哦,呵呵!其實修改伺服器也是有辦法的,只是技術太高一般人沒有辦法入手而已!(比如請gm去***,送禮,收黑錢等等辦法都可以修改伺服器資料,哈哈)
修改遊戲無非是修改一下本地記憶體的資料,或者截獲api函式等等,這裡我把所能想到的方法都作乙個介紹,希望大家能做出很好的外掛程式來使遊戲廠商更好的完善自己的技術.
我見到一片文章是講魔力寶貝的理論分析,寫的不錯,大概是那個樣子.
下來我就講解一下技術方面的東西,以作引玉之用
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
);這兩個函式非常簡單了,我想那些按鍵精靈就是用的這個吧,呵呵,上面的是模擬鍵盤,下面的是模擬滑鼠的.
這個僅僅是模擬部分,要和遊戲聯絡起來我們還需要找到遊戲的視窗才行,或者包含快捷鍵,就象按鍵精靈的那個啟用鍵一樣,我們可以用getwindow函式來列舉視窗,也可以用findwindow函式來查詢制定的視窗(注意還有乙個findwindowex),findwindowex可以找到視窗的子視窗,比如按鈕,等什麼東西.當遊戲切換場景的時候我們可以用findwindowex來確定一些當前視窗的特徵,從而判斷是否還在這個場景,方法很多了,比如可以getwindowinfo來確定一些東西,比如當查詢不到某個按鈕的時候就說明遊戲場景已經切換了,等等辦法.有的遊戲沒有控制項在裡面,這是對影象做座標變換的話,這種方法就要受到限制了.這就需要我們用別的辦法來輔助分析了.
至於快捷鍵我們要用動態連線庫實現了,裡面要用到hook技術了,這個也非常簡單,大家可能都會了,其實就是乙個全域性的hook物件然後setwindowhook就可以了,**函式都是現成的,而且現在網上的例子多如牛毛,這個實現在外掛程式中已經很普遍了.如果還有誰不明白,那就去看看msdn查詢setwindowhook就可以了.
這個動態連線庫的作用很大,不要低估了哦,它可以切入所有的程序空間,也就是可以載入到所有的遊戲裡面哦,只要用對,你會發現很有用途的!
這個需要你複習一下win32程式設計的基礎知識了,呵呵,趕快去看書吧!
2截獲訊息
有些遊戲的響應機制比較簡單,是基於訊息的,或者用什麼定時器的東西,這個時候你就可以用攔截訊息來實現一些有趣的功能了.
我們攔截訊息使用的也是hook技術,裡面包括了鍵盤訊息,滑鼠訊息,系統訊息,日誌等,別的對我們沒有什麼大的用處,我們只用攔截訊息的**函式就可以了,這個不會讓我寫例子吧,其實這個和上面的一樣,都是用setwindowhook來寫的,看看就明白了很簡單的.
至於攔截了以後做什麼就是你的事情了,比如在每個定時器訊息裡面處理一些我們的資料判斷,或者在定時器裡面在模擬一次定時器,那麼有些資料就會處理兩次,呵呵,後果嘛,不一定是好事情哦,呵呵,不過如果資料計算放在客戶端的遊戲就可以真的改變資料了,呵呵,試試看吧!用途還有很多,自己想也可以想出來的,呵呵!
3攔截socket包
這個技術難度要比原來的高很多哦,要有思想準備.
首先我們要替換winsock.dll或者winsock32.dll,我們寫的替換函式要和原來的函式一致才行,就是說它的函式輸出什麼樣的,我們也要輸出什麼樣子的函式,而且引數,引數順序都要一樣才行,然後在我們的函式裡面呼叫真正的winsock32.dll裡面的函式就可以了
首先:我們可以替換動態庫到系統路徑
其次:我們應用程式啟動的時候可以載入原有的動態庫,用這個函式loadlibary
然後定位函式入口用getprocaddress函式獲得每個真正socket函式的入口位址
當遊戲進行的時候它會呼叫我們的動態庫,然後從我們的動態庫中處理完畢後才跳轉到真正動態庫的函式位址,這樣我們就可以在裡面處理自己的資料了,應該是一切資料.呵呵!
興奮吧,攔截了資料報我們還要分析之後才能進行正確的應答,不要以為這樣工作就完成了,呵呵!還早呢,等分析完畢以後我們還要**應答機制來和伺服器通訊,乙個不小心就會被封號,呵呵,嗚~~~~~~~~我就被封了好多啊!
分析資料才是工作量的**呢,遊戲每次公升級有可能加密方式會有所改變,因此我們寫外掛程式的人都是亡命之徒啊,被人娛樂了還不知道,呵呵!(宣告我可沒有賺錢,我是免費的)
好了,給大家乙個不錯的起點,這裡有完整的替換socket源**,呵呵!
4截獲api
上面的技術如果可以靈活運用的話我們就不用截獲api函式了,其實這種技術是一種補充技術.比如我們需要截獲socket以外的函式作為我們的用途,我們就要用這個技術了,其實我們也可以用它直接攔截在socket中的函式,這樣更直接.
現在攔截api的教程到處都是,我就不列舉了,我用的比較習慣的方法是根據輸入節進行攔截的,這個方法可以用到任何一種作業系統上,比如98/2000等,有些方法不是跨平台的,我不建議使用.這個技術大家可以參考windows核心程式設計裡面的545頁開始的內容來學習,如果是98系統可以用window系統奧秘那個最後一章來學習.
好了方法就是這麼多了,看大家怎麼運用了,其它的一些針對性的技巧這裡我就不說了,要不然會有人殺了我的,呵呵!
記住每個遊戲的修改方法都不一樣,如果某個遊戲資料處理全部在伺服器端,那麼你還是別寫外掛程式了,呵呵,最多寫個自動走路的外掛程式,哈哈!
資料分析的時候大家一定要注意,不要輕易嘗試和伺服器的連線,因為那有很危險,切忌!等你掌握了大量的資料分析結果以後,比較有把握了在試試,看看你的運氣好不好,很有可能會成功的哦,呵呵!
其實像網金也瘋狂的那種模擬客戶端的程式也是不錯的,很適合office的人用,就看大家產品定位了.
好了不說了,大家努力吧!切忌不要被遊戲廠商招安哦,那樣有損我們的形象,我們是為了讓遊戲做的更好而開發的,也不願意打亂遊戲的平衡,哎,好像現在不是這樣了!不說了隨其自然吧!
有什麼技術問題可以找我.
網金裡面的逆風飛揚是我妹妹的組織哦
遊戲外掛程式分析
這個動態連線庫的作用很大,不要低估了哦,它可以切入所有的程序空間,也就是可以載入到所有的遊戲裡面哦,只要用對,你會發現很有用途的 這個需要你複習一下win32程式設計的基礎知識了,呵呵,趕快去看書吧 2截獲訊息 有些遊戲的響應機制比較簡單,是基於訊息的,或者用什麼定時器的東西,這個時候你就可以用攔截...
C遊戲外掛程式
先說環境 這些環弄好了我們看看 框架 有別於一般程式 我們加入 declspec dllexport 此處注意一定要建立乙個c檔案 declspec dllimport 此處表示宣告乙個模組 void mainc 這裡補充說明一下剛剛說到的程式,程式其實是一種靜態的說法,我們說外掛程式自然要說到乙個...
一位遊戲人關於遊戲反外掛程式的雜談
1.遊戲外掛程式分類 按實現方式 離線式 完全脫離遊戲客戶端程式,可以與遊戲伺服器自由通訊的外掛程式,開發難度最大,普通的100多開,對遊戲的危害最大,嚴重破壞遊戲市場 影響玩家正常遊戲 縮短遊戲運營週期。內掛式 以遊戲客戶端程式為載體,依靠客戶端程式來完成與遊戲伺服器的通訊 呼叫遊戲相關功能函式為...