反外掛的原理
我感覺與什麼類比鍵盤滑鼠沒有關聯下面我來介紹一些反外掛方法以及解決方案
主動防禦:
取得外掛記憶體特徵 進程名稱 外掛標題以及外掛的視窗類別名外掛向遊戲注入DLL的名稱外掛對遊戲產生的鉤子~判斷有關遊戲用到的系統DLL是否被修改
NP注入保護法
他的反外掛方式就是向我們每個進程插入一個DLL 用DLL來判斷裡面的代碼是否危及到遊戲~
解決方案就是向我們自己的外掛安裝一個DLLHOOK使他的DLL無法插入我們的進程以得到保護
標題保護法
遊戲判斷每個視窗的標題是否附帶他規定的關鍵字眼如果帶則判斷為外掛
解決方案就是自定一個演算法在外掛每次啟動時隨機標題
注入保護法
遊戲判斷外掛向遊戲注入的進程名稱~ 這點沒必要去修改名稱直接在DLL內隱藏進程既可
類名保護法
現在很多遊戲的反外掛已經涉及到對外掛的視窗類別名進行判斷~例如魔獸就是~只要你的程式視窗類別名涉及到他規定的關鍵字就為外掛不管你是不是 這就是大家常見的沒有開外掛也被封
記憶體特徵保護法
遊戲的反外掛會取得你的記憶體特徵(就像殺毒軟體取得病毒關鍵代碼一樣)
解決方案很多 提升你的進程許可權使他無法察看你的外掛記憶體~ 加花到你的關鍵記憶體特徵處使遊戲判斷失誤 等等....
進程名稱
這個就很常見了..比如你開起一個名為 "外掛.exe" 那沒得說了肯定就封
解決方案就是將他改位系統進程名稱 svchost.exe 或者瑞星 Rising.exe 其他的也可以~(我就用Rising.exe 哈哈
系統DLL判斷法
有時候對於遊戲的反外掛你要修改系統的一些DLL才可以~~所以遊戲就會判斷這個DLL是否被修改~從而達到反外掛
這個我還沒有什麼解決方案 ~他的判斷方式很多 大小 CRC 一系列的
被動防禦:
遊戲運行時開啟APIHOOK 攔截API資訊使API執行無效~ 保護遊戲記憶體使其無法被調試或被調試則出錯
有關反APIHOOK
本節要介紹如何反APIHOOK的原理與實現。
遊戲使用了驅動攔截進程的建立,為每個進程都加入一個DLL檔案。這個DLL裡會對當前進程中大量的關健API進行HOOK處理。一旦發現該進程調用的API有危害及遊戲的進程時就會進行過濾處理。原理上與上節的全域鉤子+APIHOOK實現的進程保護差不多。
也就是說APIHOOK就是過濾我們對一些特殊的關健API調用。
為了能實現反APIHOOK功能,我們有必要對APIHOOK這個實現原理有由瞭解
什麼是APIHOOK?
通過某些手段能夠控制住目標進程對某些API功能的調用,我們稱為APIHOOK
APIHOOK有哪些方式?
常見的HOOK API調用的實現方式有兩種。
一種是找到該API在記憶體的入口地址,修改其入口前八位元組資料為了一彙編的 jmp xxxxxxxx 無條件跳轉指令,使其調用該API時會跳到指定的另一處函數入口處,即與這個API有著相同的參數與傳回值的回調處理常式
第二種是在進程的輸入表(IAT表)找到儲存在這裡的要調用的那個API地址,修改這個地址,使程式在輸入表裡找該API地址時取的是我們修改後的回調程式入口地址。
上面的兩種方式,其實第二種不必去考濾,因為程式要調用某個API可以不通過輸入表。第一種修改入口前八位元組才是最重要的,因為只要程式要調用這個API,必然得從它的入口地址進入。
解決方案
在進程建立時就先把一些關健的將要使用的API入口處八位元組資料讀出儲存,然後在每次要調用這些API時,把這原儲存的八位元組資料都寫回去。這樣一來,遊戲對我們的API入口處攔截就失敗了。
但有一點需要注意的,我們的程式必需得在遊戲之前運行才可以。如果遊戲以我們之前已經運行了的話,就晚了,那時你儲存下來的八位元組資料早就被遊戲動過手腳了的。而且,對於這種被修改過的資料你儲存下來後,若該遊戲結束運行了時,你還去恢複API入口並調用這些API的話,會出現非法操作的。
遊戲記憶體保護法
提升進程許可權使得外掛無法編輯遊戲的記憶體以達到反外掛
或者是你修改了他的記憶體就報錯
這個地解決方案就是利用底層技術(這個我就不詳細介紹了,考慮到遊戲的平衡)