Ⅰ 編寫游戲輔助需要知識
1、熟練的C語言知識 目前的外掛大部分都是用BC或者是vc寫的,擁有熟練的C語言知識是寫外掛的基本條件 2、具有很強的匯編基礎 一般游戲都不可能有原代碼的,必須靠反匯編或者跟蹤的辦法來探索其中的機理 ,所以有強的匯編基礎也是必不可少的條件 3、熟練掌握跟蹤和調試的工具 有了上面2個條件後,掌握一些工具也是很有必要的 跟蹤的工具,softice當然是不二之選,至於反匯編的工具,我推薦用IDAPRO 這個工具反匯編出來的代碼結構清晰,非常好讀 如果你不具有上面的條件,還是先把基礎打好,再來寫外掛吧,一分耕耘,一分收獲,天下沒有白掉的餡餅的 二、寫外掛面臨的基本技術問題 1、修改進程的執行代碼 要修改進程的執行代碼,要先取得進程的ID,如果是由外掛程序啟動,返回值里就有進程ID,如果不是的話, 需要用findwindow找到窗口句柄,再用GetWindowProcessID取得進程ID,取得進程ID以後,就可以用 writeprocessmemory來修改進程的執行代碼了,使程序按照我們的意願來執行,石器外掛里的不遇敵、寸步遇敵 就是用這樣的方法來實現的 2、截獲外掛發送和接收的封包 除了通過修改代碼來實現的功能以外,很多的功能都是通過修改封包來實現的,要修改封包,首先要能截獲它。 個jmp語句,跳到你的處理函數位置,處理完後,再跳回來,這種方法要求比較高,需要處理好很多事情,另一種辦法 是往那個位置寫條能造成例外的指令,比如int3,然後用DebugActiveProcess調試游戲進程,這樣每當游戲執行到那個 位置的時候,就會停下來,到外掛程序裡面去,等外掛程序處理完以後,用ContinueDebugEvent繼續運行程序。 今天來談談地址的調查問題,地址調查是寫外掛中最艱辛,最富有挑戰性的事情,很多朋友問我要外掛的原程序,其實有了外掛原程序,如果你不會調查地址,還是沒用的, 原程序和地址的關系就象武學中招式與內功的關系,沒有內功的招式,只是一個花架子。而內功精深以後,任何普通的招式,都有可能化腐朽為神奇,外掛中的地址分為兩類,一類是程序地址,一類是數據地址。象石器中的雙石器,真彩,不遇敵,寸步遇敵,發送接收封包等,都屬於第一類,而人物坐標,狀態等,都屬於第二類。對於第一類地址,主要依靠softice來調查地址,對第二類地址,可以用一些游戲工具,比如fpe,gameexpert,gamemaster等來調查,我一直用gameexpert,因為我找不到2000下能用的fpe, 各位以前用fpe改游戲的時候,沒想過他也能用來干這個吧 對於第二類數據的調查方法,大部分人都很熟習了,我就不多說了,現在主要來談談第一類數據的詳細調查過程,比如我們要調查發送封包的位置,如何著手呢,客戶端往伺服器要發很多封包,但最簡單的辦法莫過從說話的封包入手,先說一句很長的話,最好是英文,查起來方便,說完以後,用任意一種辦法進入游戲程序的進程空間(比如先用spy查出遊戲程序的窗口句柄,再切換到softice打入bmsg窗口句柄wm_lbuttondown,這樣在游戲程序中一點滑鼠就進入了他的進程空間)然後用s命令查出這句話所放的內存地址,記下這個地址,在softice中打入bpm剛才調查到的地址,這個指令的意思是只要有訪問這個內存的動作,立刻中斷,然後再切換到游戲,說一句話,你會發現softice自動中斷到某一個位置了,從這個位置跟蹤下去,發送封包的位置也就不遠了。 上面所說的都是針對一個全新的游戲程序而言,如果是一個老的程序,有前輩做了大量的工作,還可以用些別的辦法,如反匯編等,來調查。以後游戲版本的更新也是如此,只要把老版本的地址位置附近的代碼記下來,去新版本的代碼裡面search一下,就ok了。 恩,休息一會兒,休息一會兒