1. 程式人生 > >外掛是是怎麽寫的?

外掛是是怎麽寫的?

str event 運行程序 執行 write 空間 gac 事件 沒有

我個人對外掛是非常感興趣的,學習編程也有一段時間了,所以更加好奇外掛是怎麽寫的?

外掛的基本概念:

一般是指在電腦運行中,一個程序通過某種事件觸發而得以掛接到另外一個程序的空間裏(常用的觸發事件有鍵盤觸發,鼠標觸發,消息觸發等),掛接的目的通常是想改變被掛接程序的運行方式

我們都知道遊戲分為單機遊戲網絡遊戲。單機遊戲的外掛只是修改一些遊戲數值,而網絡遊戲的外掛則涉及到網絡數據的拆包與封包。

一、先說一下寫一個外掛需要什麽條件

1、熟練的C語言知識,目前的外掛大部分都是用BC或者是vc寫的,擁有熟練的C語言知識是寫外掛的基本條件。

2、具有很強的匯編基礎。一般遊戲都不可能有原代碼的,必須靠反匯編或者跟蹤的辦法來探索其中的機理 ,所以有強的匯編基礎也是必不可少的條件。

3、熟練掌握跟蹤和調試的工具。有了上面2個條件後,掌握一些工具也是很有必要的跟蹤的工具,softice當然是不二之選,至於反匯編的工具,我推薦用IDA PRO這個工具反匯編出來的代碼結構清晰,非常好讀如果你不具有上面的條件,還是先把基礎打好,再來寫外掛吧,一分耕耘,一分收獲,天下沒有白掉的餡餅的。


二、寫外掛面臨的基本技術問題

1、修改進程的執行代碼。要修改進程的執行代碼,要先取得進程的ID,如果是由外掛程序啟動,返回值裏就有進程ID,如果不是的話,需要用findwindow找到窗口句柄,再用GetWindowProcessID取得進程ID,取得進程ID以後,就可以用writeprocessmemory來修改進程的執行代碼了,使程序按照我們的意願來執行,石器外掛裏的不遇敵、寸步遇敵就是用這樣的方法來實現的。

2、截獲外掛發送和接收的封包。除了通過修改代碼來實現的功能以外,很多的功能都是通過修改封包來實現的,要修改封包,首先要能截獲它。 第一步是要跟蹤出發和收的位置,至於怎麽跟蹤,我以後會提到,找到位置以後,有2個辦法,一是在那個位置加一個jmp語句,跳到你的處理函數位置,處理完後,再跳回來,這種方法要求比較高,需要處理好很多事情,另一種辦法是往那個位置寫條能造成例外的指令,比如int 3,然後用DebugActiveProcess調試遊戲進程,這樣每當遊戲執行到那個位置的時候,就會停下來,到外掛程序裏面去,等外掛程序處理完以後,用ContinueDebugEvent 繼續運行程序。

外掛是是怎麽寫的?