多開限制的原理

2021-08-26 01:30:59 字數 1855 閱讀 6371

1.建立新節法

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

1.建立節

#pragma data_seg("shared") bool bexist = false; //已經初始化變數 int num; //未初始化變數 #pragma data_seg()

注:在建立節的過程中,編譯器只將已經初始化的變數放入新節中。

2.將初始化或未初始化的資料放入希望的任何節中

__declspec(allocate("shared")) int num2 = 0; //新增初始化的變數 __declspec(allocate("shared")) int num3; //新增未初始化的變數

注:在向節中新增資料之前必須先建立該節。

3.設定節的屬性

#pragma comment(linker, "/section:shared,rws")

注:節的屬性包括rws,其中r代表read,w代表weite,s代表shared。

使用: #pragma data_seg("shared") hwnd hwnd=null; #pragma data_seg() #pragma comment(linker, "/section:shared,rws")

初始化函式中:

if (hwnd==null) else

2.互斥體法

缺點是無法啟用舊視窗

hobject=createmutex(null,false,_t("互斥體")); if (getlasterror()==error_already_exists)

3.查詢視窗標題法

1.findwindow

初始化函式中

hwnd hwnd=::findwindow(null,_t("findwindow單例項")); if (hwnd!=null) setwindowtext(_t("findwindow單例項"));

2.enumwindows

bool callback myenumwndproc(hwnd hwnd,lparam lparam) ; getwindowtext(hwnd,szcaption,256); if (_tcscmp(_t("enumwindows單例項"),szcaption)==0) return true; }

初始化函式中

enumwindows(myenumwndproc,null); setwindowtext(_t("enumwindows單例項"));

3.getwindow

tchar szcaption[max_path]=; hwnd hwnd=::getwindow(::getdesktopwindow(), gw_child); while(hwnd!=null) hwnd=::getwindow(hwnd, gw_hwndnext); } setwindowtext(_t("getwindow單例項"));

4.列舉程序法

1.定時器一直去監視有沒有相同程序名字,發現則傳送wm_close訊息關閉視窗

2.初始化時列舉程序,配合掛鉤queryinfomation的核心函式,修改自己的程序名字

多開限制的原理

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

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

1,程序 現象 遊戲通過探測遊戲客戶端程序是否已經存在來防止重複開啟。破解方法 1 隱藏程序。可以用工具 hidetoolz,也可以自己寫驅動簡單的做個摘鏈隱藏。2 hook 遊戲遍歷程序的 api。3 修改程序名。拷貝乙份遊戲 exe 檔案的副本,重新命名即可。2,視窗標題 現象 遊戲通過探測遊戲...

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

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