1. 程式人生 > >遊戲多開

遊戲多開

全面分析遊戲防止多開的原理,與遊戲實現多開的方法。程序隱藏,視窗標題修改,埠隱藏,多個遊戲目錄,多個作業系統賬號,互斥體,記憶體對映檔案,DLL全域性共享等方法實現遊戲多開。
研究遊戲多開已經有一年多的時間了,其實要實現遊戲多開也不是一件很難的事情,只要大家懂得遊戲防止多開的原理,然後根據其對應遊戲多開的方法便可以做出遊戲多開器來了。下面為大家總結一下游戲多開的原理與方法:
用了一年的時間換來了這篇遊戲多開的文章:
如果大家需要轉發的,請標明出處:小魚工作室謝謝。
第一,程序隱藏
部分遊戲通過探測遊戲客戶端程序是否已經存在來防止重複開啟,如遊戲:英雄美人
遊戲多開的辦法為啟動一個遊戲客戶端後,將該遊戲的程序隱藏,只保留一個或多個。

第二,視窗標題修改(使用FindWindow API函式)
部分遊戲通過探測遊戲客戶端的視窗是否已經存在來防止重複開啟。
遊戲多開的辦法為將遊戲的視窗修改為任意字元。

第三,埠隱藏
部分遊戲通過預設開啟TCP或者UDP埠監聽,開第二個遊戲的時候會開啟埠失敗從而判斷遊戲是否多開。
遊戲多開的方法為此類需要採用netstat –a –n –o 命令檢視埠即可實現遊戲多開。

第四,多個遊戲目錄
部分遊戲通過獨佔檔案訪問來防止重複開啟。
遊戲多開的方法為複製遊戲客戶端到另外的資料夾,在另外的資料夾開啟即可。

第五,多個作業系統賬號(僅限XP系統)
部分遊戲通過限制一個使用者只能開啟一個遊戲來防止重複開啟。
遊戲多開的方法為在系統賬號裡面多建立賬號,一個遊戲使用一個賬號。方法如下:
1、開啟控制面版→使用者帳戶→建立一個新帳戶→輸入新帳戶名(下一步)→建立帳戶;
2、然後到桌面的遊戲快捷圖示上右鍵到[屬性] 選[高階] 把裡面[以其他使用者身份執行]這個選項勾上 開第2個程式的時候記得用你新建的使用者進就可以了,省的老去切換使用者了。

第六,互斥體。
部分遊戲通過互斥物件/訊號量/事件等執行緒同步物件來確定程式是否已經執行。最常用的函式如:CreateMutexA。
1、首先建立一個互斥體,CreateMutex函式,第一個引數可以設定為NULL,第二個引數必須設定為false,第三個引數表示互斥體的名稱,這個名稱最好有一些特殊標識以防止與其他應用程式衝突,比如程式名+時間。
2、使用GetLastError()函式判斷錯誤資訊是否為ERROR_ALREADY_EXISTS,如果是,則表示程式已經啟動。
遊戲多開的方法有二種,一為發現互斥體,然後關閉互斥體即可實現多開。二為APIHOOK,接收到錯誤資訊時,加重置命令(置錯誤碼=0)即可。QQ遊戲,天龍八部==最常見的型別

第七,記憶體對映檔案(File Mapping)
部分遊戲通過把程式例項資訊放到跨程序的記憶體對映檔案中,防止遊戲多開。
遊戲多開的方法為攔阻該函式,不讓它命名核心檔案即可實現多開。

第八,DLL全域性共享
DLL全域性共享區在對映到各個程序的地址空間時僅被初始化一次,且是在第一次被windows載入時,所以利用該區資料就能對程式進行多開限制。
遊戲多開的方法為DLL劫持讓遊戲一開始執行就載入你的DLL,再轉到原來的dll上就可以實現多開了。


第九,使用公共檔案
程式啟動時,在一個公共目錄(比如C:\或者Temp目錄)中建立一個公共檔案,並將此檔案設定為不共享讀寫。第二個程式啟動時,也開啟此檔案,如果開啟成功,則表示程式未啟動過,否則表示程式已經啟動。
遊戲多開的方法為:手動設定多開,比如:設定檔案訪問許可權,不允許此程式在公共目錄建立檔案等。

第十,Mac地址驗證
登陸伺服器時,獲取本機mac地址,傳送至伺服器端,服務端進行mac地址驗證,如果mac地址重複登陸,則不允許同伺服器進行訊息傳遞。
多開遊戲的多法為:使用超級兔子等軟體修改mac地址實現多開,針對此情況,本人也寫了一個修改Mac地址的小工具,大家可以在網站下載。

第十一,檢視網路連線
獲取本機所有網路連線,使用GetTcpTable獲取TCP連線,使用GetUdpTable獲取UDP連線,檢查是否有連線到伺服器IP和埠號的連線,如果有,表示程式已經啟動,否則程式未啟動。需要注意的是,其獲取的ip和埠號都是一個DWORD值,並且高低位相反。IP地址可以通過inet_addr函式將字串形式的IP地址(如“127.0.0.1”)轉換為DWORD型的,埠號可以使用以下公式轉換:DWORD dwPort = ((nPort & 0xff) << 8) + ((nPort & 0xff00) >> 8);
多開遊戲的方法為:掛系統鉤子,導致GetTcpTable函式