轉自: https://www.zhihu.com/question/29554522/answer/690084911
作者:任鳥飛
鏈接:https://www.zhihu.com/question/29554522/answer/690084911
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
FPS不光是外掛多,變態功能也多。
那么為什么總是“無法杜絕”這一類變態功能呢?FPS游戲注重游戲體驗,游戲公司為了保證玩家的流暢性和打擊感,將許多重要數據放在本地客戶端進行處理,這就給了外掛開發者有機可乘。如果在關鍵處修改一些邏輯代碼,即可實現多樣性的變態功能,誇張的說,只有你想不到,沒有做不到。
為什么不能徹底解決FPS游戲外掛
cs子彈加速 無限子彈 無后坐力
上一篇我們講到CS無限手雷變態功能,現在講一下CF實現加速功能
FPS游戲,變態外掛總是層出不窮,如飛天、蹲地、無后座力、加速等等。
如下圖變態功能:
全屏飛刀(修改了刀的攻擊距離和傷害)
(網圖侵刪)
秒殺BOSS
加速功能在FPS外掛歷史上,可以說是歷史悠久。從最早的cs,到后來的cf,以及現在的吃雞類游戲無一不受其毒害。那么加速功能為何無法徹底杜絕呢? 這和FPS游戲的特性有關。射擊類游戲封包傳送,采用的大多是以“UDP的方式”,來簡單的了解一些UDP協議,以下是百科給我們的解釋:
UDP的特性:它不屬於連接型協議,因而具有資源消耗小,處理速度快的優點,所以通常音頻、視頻和普通數據在傳送時使用UDP較多,因為它們即使偶爾丟失一兩個數據包,也不會對接收結果產生太大影響。比如我們聊天用的ICQ和QQ就是使用的UDP協議。
從上了解到,UDP傳輸資源消耗小,處理速度快,可以滿足玩家體驗,但是缺點是 不可靠,容易丟包,而“加速 瞬移 飛天”等等功能,都可以通過”變相丟包“實現。
加速可以分為人物加速和武器加速。人物加速,即修改地速,達到移動加速的效果。武器加速即修改武器射速,使原有的射速發生改變。而這種“世人皆知”的原理,游戲公司自然也知曉,那么對其的檢測也極其的嚴格,這個時候不妨嘗試用一些另類的方法實現相同的變態功能。
以cf為例子,開槍的時候,不同的武器會有不同的動作,抖動。那么假設,將開槍動作給去掉或修改其抖動時間,是否也能實現子彈加速效果?實踐是唯一的真理。
由於抖動時間非常短暫,停止了射擊立馬停止了開槍動作,搜索數據較為困難。那么可以寫一個程序,在開槍狀態下講游戲掛起,保存內存數據再進行搜索。所用到的函數如下:
OpenProcess () //取得游戲句柄
ZwSuspendProcess() //通過句柄將其掛起,保存內存狀態。
ZwResumeProcess() //通過句柄恢復掛起,還原內存狀態。
CloseHandle () //釋放句柄
開槍狀態下,將游戲掛起,如下圖。
保存內存狀態后,搜索未知的數值
恢復程序,還原內存狀態后,搜索變動的數值,來回塞選地址
經過反復塞選,得出一個與“開槍動作時間”相關的地址,從理論上來講,只要是與開槍動作相關的地址,都有可能斷到相關的邏輯代碼段。得到地址后,去DO中以DWORD的形式訪問,下斷后進行開槍使其斷下,得到以下代碼段
經多次下段測試,[ESI+52C]為 類似於“動作間隔”的值,開槍射速與其相關,賦值給ebx。
那么這個時候,咱們可以進行修改邏輯代碼。可在此處下HOOK,修改[esi+52c]里的值,從而實現另類子彈加速,也可在此處直接NOP,不讓其賦值給EBX,也可實現加速效果,如下GIF:
----------------------------分割線---------------------------
本人每天需要講課 ,會把每天講的課以文章的形式整理出來。
本文章僅限於交流,如果本文章侵犯了貴公司權益,請聯系我刪除。
點贊是一種鼓勵,轉載是一種美德,分享能給我最大的動力,如有不足之處請予指正。
編輯於 2019-05-22