全面分析遊戲限制多開原理

2021-10-25 14:39:15 字數 1905 閱讀 7511

1,程序

現象:遊戲通過探測遊戲客戶端程序是否已經存在來防止重複開啟。

破解方法:

(1)隱藏程序。可以用工具 hidetoolz,也可以自己寫驅動簡單的做個摘鏈隱藏。

(2)hook 遊戲遍歷程序的 api。

(3)修改程序名。拷貝乙份遊戲 exe 檔案的副本,重新命名即可。

2,視窗標題

現象:遊戲通過探測遊戲客戶端的視窗是否已經存在來防止重複開啟。

破解方法:

(1)使用 setwindowtext 修改視窗標題,可以自己呼叫或 hook 遊戲的都可以。

(2)hook 遊戲的 findwindow ,不讓其獲取其他遊戲的視窗控制代碼。

(3)hook 遊戲的 enumwindows ,不讓其遍歷視窗。

3,埠

現象:遊戲通過預設開啟tcp或者udp埠監聽。

破解方法:

埠隱藏(埠復用)

4,獨佔檔案、公共檔案

現象(公共):遊戲啟動後會以獨佔方式開啟某個檔案的(lockfile)檔案控制代碼,當第二次再有程式開啟它時就會報錯。

現象(獨佔):遊戲啟動後用刀的所有檔案(dll,ini 等)都使用獨佔方式開啟,當第二次再有程式開啟它時就會報錯。

5,多個作業系統賬號

現象:遊戲通過限制乙個使用者只能開啟乙個遊戲來防止重複開啟。

破解方法:

建立多個系統賬號後,shift + 右鍵,以其他身份執行。

6,互斥體

現象:遊戲只能單開,通過互斥物件/訊號量/事件等執行緒同步物件來確定程式是否已經執行。

破解方法:

(1)hook 對應建立互斥體的 api

(2)迴圈遍歷遊戲控制代碼表,刪除對應的控制代碼

7,記憶體對映檔案

現象:遊戲只能開2個、3個等。而不是只能開1個,通過把程式例項資訊放到跨程序的記憶體對映檔案中,防止遊戲多開。

8,dll全域性共享變數

現象:遊戲只能開2個、3個等。而不是只能開1個 ,dll全域性共享區在對映到各個程序的位址空間時僅被初始化一次,且是在第一次被windows載入時,所以利用該區資料就能對程式進行多開限制。

破解方法:

(1)找到共享區段的位置,使用 pe 工具刪除這個區段。

(2)使用 ce 找到存放遊戲例項的基位址,每當啟動乙個例項後,使用 writeprocessmemory 修改這個值。

9,mac位址驗證破解方法:

(1)hook 遊戲獲取 mac 的 api ,讓每個遊戲獲取不同的 mac 位址。注意遊戲可能會多次獲取 mac ,所以不要將 mac 完全隨機,避免第一次獲取的 mac 和第二次獲取的 mac 不一樣,這就很尷尬。處理方法是 dll 注入時初始化乙個隨機 mac ,之後 hook 時都使用這個 mac 來偽造。

(2)定時修改本機mac 。這種情況有乙個缺陷,就是必須把時鐘設定的很小,因為遊戲不一定只有登入時才校驗 mac ,如果遊戲對 mac 做迴圈校驗,就必須保證在開啟的 n 個遊戲的 n 個迴圈中 ,都修改一次 mac 。也就是說,開啟的客戶端也多,修改本機mac 的時鐘就要設定的越小,且不能保證某一時刻客戶端 a 和 客戶端 b 獲取到的mac 是相同的 !

10,檢視網路連線

現象:獲取本機所有網路連線,使用 gettcptable 獲取 tcp 連線,使用 getudptable 獲取 udp 連線,檢查是否有連線到伺服器ip和埠號的連線,如果有,表示程式已經啟動,否則程式未啟動。

破解方法:

hook gettcptable 、getudptable

全面分析遊戲限制多開原理

2,視窗標題修改 使用findwindow api函式來查詢自身視窗名來判斷多開 現象 遊戲只能單開1個遊戲,部分遊戲通過探測遊戲客戶端的視窗是否已經存在來防止重複開啟。破解方法 遊戲多開的辦法為將遊戲的視窗修改為任意字元。3,埠隱藏 現象 遊戲只能單開1個遊戲 部分遊戲通過預設開啟tcp或者udp...

程式多開原理記錄

windows系統下,程式防止多開的幾種常見方法 1 使用findwindow api函式。通過查詢視窗標題 或 和類名 來判斷程式是否正在執行。如果找到了,表明程式正在執行,這時可退出程式,達到不重複執行的效果 反之表明程式是第一次執行。這種方法不適用於以下情況,程式的標題是動態變化的 系統中執行...

多開限制的原理

1.建立新節法 為程式加入乙個全域性變數,讓這個全域性變數可以被程式的多個例項所共享,每當程式例項執行時就對該全域性變數進行修改。通過訪問該全域性變數,就可以知道有多少個例項在執行了。當然,為了系統的安全和穩定性,預設情況下是不允許這樣做得。為了阻止這種事情的發生,系統使用了copy on writ...