1. 程式人生 > >遊戲Call技術-繫結主執行緒呼叫CALL技術(反遊戲檢測call)

遊戲Call技術-繫結主執行緒呼叫CALL技術(反遊戲檢測call)

我們在寫call呼叫遊戲程序裡call時候,經常外掛執行工作一段時間後,遊戲就會斷線或崩潰掉,但是經過檢查,
發現自己呼叫CALL的程式碼又沒發現寫錯誤,這到底是怎麼呢?{:100_162:}
其實這些是現在遊戲的一些遊戲反外掛檢測導致的,並不是我們呼叫call的程式碼沒寫對,
現在的遊戲呼叫自己遊戲程序裡的各種CALL,都是遊戲自己的主執行緒來執行的,如果不是遊戲的主執行緒呼叫CALL,
就會奔潰或遊戲掉線,

所以我們的外掛程式都是在遊戲程序裡建立新的執行緒來執行我們的程式碼的,建立來執行緒不是遊戲的主執行緒,
只是遊戲程序裡的子執行緒,如果遊戲會對CALL呼叫時候檢測是不是自己程序的主執行緒來執行的,
就會認為是非法呼叫CALL的外掛程式,所以就會斷掉自己的網路,來阻止我們外掛操作遊戲!{:100_172:}

下面為了生動點讓大家瞭解這裡面的道理,我們來設計一個模擬遊戲程式.exe
模擬遊戲程式.exe 的程式碼如下:
反遊戲call檢測
裡面設定一個測試函式,這個函式在被呼叫時候
會判斷是自己程序裡的主執行緒執行的,還是外界其他程式建立執行緒(非自己主執行緒)來執行呼叫的。然後做出相關提示
來真實模擬遊戲以自身主執行緒來執行自己程序內函式的效果,
如發現不是自己程序主執行緒呼叫函式,就彈出警告(相當於遊戲崩潰或掉線)
再貼上呼叫模擬遊戲程式.exe 裡面的測試函式,的呼叫函式.exe程式碼:
bbs.dult.cn
呼叫函式.exe 就相當於我們的外掛程式,呼叫指定程序裡的函式CALL功能,這裡我演示了2種除錯方式
一種是普通呼叫我們的程式碼,一種是繫結遊戲(模擬遊戲程式.exe)主執行緒來呼叫我們的程式碼。
好了,我們來看測試效果:
獨立團論壇


執行後,我們發現,當我們的外掛(呼叫函式.exe)以普通方式呼叫遊戲(模擬遊戲程式.exe)程序裡的CALL時候,
遊戲發現不是自己程序主執行緒去執行的,就彈出了警告資訊框(相當於遊戲自動掉線或崩潰),
而發現是自己主執行緒來去執行的,就正常執行!

.子程式 呼叫函式E, 整數型, 公開, 執行指定程序中某個函式入口,返回函式執行後的EAX值.
.引數 程序控制代碼, 整數型, , -1=自身程序.欲呼叫的函式所在程序控制代碼
.引數 函式地址, 整數型, ,
.引數 函式引數, 整數型, 可空 陣列, 空=無引數,可以提供多引數.OD分析CALL指令往上推算,離CALL最近為引數[1].再往上是 引數[2]…
.引數 暫存器, 型別_暫存器, 可空, 可以設定各個CPU暫存器的值,注意 不支援設定 EBP,ESP,ST浮點數 這些暫存器.
.引數 繫結執行緒, 整數型, 可空, 提供繫結執行緒的執行緒控制代碼,程式碼將在該執行緒環境執行.空=0=自程序時在現執行緒下執行,跨程序將建立遠執行緒執行
.引數 取消保護, 邏輯型, 可空, 預設=假=採用SEH異常保護機制,真=不使用異常保護.若保護後CALL無效,再試試取消保護.

呼叫函式E
命令可以繫結目標程序裡指定的執行緒ID,來執行我們的程式碼,這樣就可以有效的躲避對CALL呼叫的執行緒檢測了,
但是如果遊戲有Lua的話,使用時候要避免與遊戲本身中的lua事件岔開呼叫時間,否則遊戲自己主執行緒執行lua時候,
你再這個時候進行搶佔遊戲主執行緒去執行你的call程式碼,就會導致遊戲崩潰,所以每次CALL的時候,最好間隔時間呼叫!

如果是外掛是DLL,那麼在DLL裡要繫結執行緒執行程式碼的話,可以使用 模組6.5裡面的 執行緒_呼叫 ()命令即可!

最後說一句:
不是我軍不夠強大,只怪遊戲太狡詐,以各種手段來阻止我們外掛,但是道高一尺魔高一丈,
只要知道了遊戲的檢測把戲.我們就有方法來對待{:100_157:}!
本節原始碼的: http://bbs.dult.cn/thread-10534-1-1.html