㈠ 怎麼做DNF輔助軟體
首先聲明:這個是在抄別人的,希望能幫到你。
一、先說一下寫一個外掛需要什麼條件
1、熟練的C語言知識
目前的外掛大部分都是用BC或者是Delphi或者是vc寫的,擁有熟練的C語言知識是寫外掛的基本條件!
2、具有很強的匯編基礎
一般游戲都不可能有原代碼的,必須靠反匯編或者跟蹤的辦法來探索其中的機理
,所以有強的匯編基礎也是必不可少的條件
3、熟練掌握跟蹤和調試的工具
有了上面2個條件後,掌握一些工具也是很有必要的
跟蹤的工具,softice當然是不二之選,至於反匯編的工具,我推薦用IDA PRO
這個工具反匯編出來的代碼結構清晰,非常好讀
如果你不具有上面的條件,還是先把基礎打好,再來寫外掛吧,一分耕耘,一分收獲,天下沒有白掉的餡餅的
二、寫外掛面臨的基本技術問題
1、修改進程的執行代碼
要修改進程的執行代碼,要先取得進程的ID,如果是由外掛程序啟動,返回值里就有進程ID,如果不是的話,
需要用findwindow找到窗口句柄,再用GetWindowProcessID取得進程ID,取得進程ID以後,就可以用
writeprocessmemory來修改進程的執行代碼了,使程序按照我們的意願來執行,石器外掛里的不遇敵、寸步遇敵
就是用這樣的方法來實現的
2、截獲外掛發送和接收的封包
除了通過修改代碼來實現的功能以外,很多的功能都是通過修改封包來實現的,要修改封包,首先要能截獲它。
第一步是要跟蹤出發和收的位置,至於怎麼跟蹤,我以後會提到,找到位置以後,有2個辦法,一是在那個位置加一
個jmp語句,跳到你的處理函數位置,處理完後,再跳回來,這種方法要求比較高,需要處理好很多事情,另一種辦法
是往那個位置寫條能造成例外的指令,比如int 3,然後用DebugActiveProcess調試游戲進程,這樣每當游戲執行到那個
位置的時候,就會停下來,到外掛程序裡面去,等外掛程序處理完以後,用ContinueDebugEvent 繼續運行程序。
今天先寫這么多,下回將討論外掛的具體功能該怎麼實現
今天來談談地址的調查問題,地址調查是寫外掛中最艱辛,最富有挑戰性的事情,很多朋友問我要外掛的原程序,其實有了外掛原程序,如果你不會調查地址,還是沒用的,
原程序和地址的關系就象武學中招式與內功的關系,沒有內功的招式,只是一個花架子。而內功精深以後,任何普通的招式,都有可能化腐朽為神奇,外掛中的地址分為兩類,一類是程序地址,一類是數據地址。象石器中的雙石器,真彩,不遇敵,寸步遇敵,發送接收封包等,都屬於第一類,而人物坐標,狀態等,都屬於第二類。對於第一類地址,主要依靠softice來
調查地址,對第二類地址,可以用一些游戲工具,比如fpe,game expert,game master等來調查,我一直用game expert,因為我找不到2000下能用的fpe,
各位以前用fpe改游戲的時候,沒想過他也能用來干這個吧
對於第二類數據的調查方法,大部分人都很熟習了,我就不多說了,現在主要來談談第一類數據的詳細調查過程,比如我們要調查發送封包的位置,如何著手呢,客戶端往伺服器要發很多封包,但最簡單的辦法莫過從說話的封包入手,先說一句很長的話,最好是英文,查起來方便,說完以後,用任意一種辦法進入游戲程序的進程空間(比如先用spy查出遊戲程序的窗口句柄,再切換到softice打入bmsg 窗口句柄 wm_lbuttondown,這樣在游戲程序中一點滑鼠就進入了他的進程空間)然後用s命令查出這句話所放的內存地址,記下這個地址,在softice中打入bpm 剛才調查到的地址,這個指令的意思是只要有訪問這個內存的動作,立刻中斷,然後再切換到游戲,說一句話,你會發現softice自動中斷到某一個位置了,從這個位置跟蹤下去,發送封包的位置也就不遠了。
上面所說的都是針對一個全新的游戲程序而言,如果是一個老的程序,有前輩做了大量的工作,還可以用些別的辦法,如反匯編等,來調查。以後游戲版本的更新也是如此,只要把老版本的地址位置附近的代碼記下來,去新版本的代碼裡面search一下,就ok了。
恩,休息一會兒,休息一會兒
我主要對外掛的技術進行分析,至於游戲裡面的內部結構每個都不一樣,這里就不做講解了,我也沒有那麼厲害,所有的都知道,呵呵!
1 首先游戲外掛的原理
外掛現在分為好多種,比如模擬鍵盤的,滑鼠的,修改數據包的,還有修改本地內存的,但好像沒有修改伺服器內存的哦,呵呵!其實修改伺服器也是有辦法的,只是技術太高一般人沒有辦法入手而已!(比如請GM去夜總會,送禮,收黑錢等等辦法都可以修改伺服器數據,哈哈)
修改游戲無非是修改一下本地內存的數據,或者截獲api函數等等,這里我把所能想到的方法都作一個介紹,希望大家能做出很好的外掛來使游戲廠商更好的完善自己的技術.
我見到一片文章是講魔力寶貝的理論分析,寫的不錯,大概是那個樣子.
下來我就講解一下技術方面的東西,以作引玉之用
2 技術分析部分
1 模擬鍵盤或滑鼠的響應
我們一般使用UINT SendInput(
UINT nInputs, // count of input events
LPINPUT pInputs, // array of input events
int cbSize // size of structure
);api函數
第一個參數是說明第二個參數的矩陣的維數的,第二個參數包含了響應事件,這個自己填充就可以,最後是這個結構的大小,非常簡單,這是最簡單的方法模擬鍵盤鼠
標了,呵呵
注意:這個函數還有個替代函數:
VOID keybd_event(
BYTE bVk, // 虛擬鍵碼
BYTE bScan, // 掃描碼
DWORD dwFlags,
ULONG_PTR dwExtraInfo // 附加鍵狀態
);和
VOID mouse_event(
DWORD dwFlags, // motion and click options
DWORD dx, // horizontal position or change
DWORD dy, // vertical position or change
DWORD dwData, // wheel movement
ULONG_PTR dwExtraInfo // application-defined information
);
這兩個函數非常簡單了,我想那些按鍵精靈就是用的這個吧,呵呵,上面的是模擬鍵盤,下面的是模擬滑鼠的.
這個僅僅是模擬部分,要和游戲聯系起來我們還需要找到游戲的窗口才行,或者包含快捷鍵,就象按鍵精靈的那個激活鍵一樣,我們可以用GetWindow函數來枚舉窗口,也可以用Findwindow函數來查找制定的窗口(注意還有一個FindWindowEx),FindwindowEx可以找到窗口的子窗口,比如按鈕,等什麼東西.當游戲切換場景的時候我們可以用FindWindowEx來確定一些當前窗口的特徵,從而判斷是否還在這個場景,方法很多了,比如可以GetWindowInfo來確定一些東西,比如當查找不到某個按鈕的時候就說明游戲場景已經切換了,等等辦法.有的游戲沒有控制項在裡面,這是對圖像做坐標變換的話,這種方法就要受到限制了.這就需要我們用別的辦法來輔助分析了.
至於快捷鍵我們要用動態連接庫實現了,裡面要用到hook技術了,這個也非常簡單,大家可能都會了,其實就是一個全局的hook對象然後SetWindowHook就可以了,回調函數都是現成的,而且現在網上的例子多如牛毛,這個實現在外掛中已經很普遍了.如果還有誰不明白,那就去看看msdn查找SetWindowHook就可以了.
這個動態連接庫的作用很大,不要低估了哦,它可以切入所有的進程空間,也就是可以載入到所有的游戲裡面哦,只要用對,你會發現很有用途的!
這個需要你復習一下win32編程的基礎知識了,呵呵,趕快去看書吧!
2截獲消息
有些游戲的響應機制比較簡單,是基於消息的,或者用什麼定時器的東西,這個時候你就可以用攔截消息來實現一些有趣的功能了.
我們攔截消息使用的也是hook技術,裡麵包括了鍵盤消息,滑鼠消息,系統消息,日誌等,別的對我們沒有什麼大的用處,我們只用攔截消息的回調函數就可以了,這個不會讓我寫例子吧,其實這個和上面的一樣,都是用SetWindowHook來寫的,看看就明白了很簡單的.
至於攔截了以後做什麼就是你的事情了,比如在每個定時器消息裡面處理一些我們的數據判斷,或者在定時器裡面在模擬一次定時器,那麼有些數據就會處理兩次,呵呵,後果嘛,不一定是好事情哦,呵呵,不過如果數據計算放在客戶端的游戲就可以真的改變數據了,呵呵,試試看吧!用途還有很多,自己想也可以想出來的,呵呵!
3攔截socket包
這個技術
難度要比原來的高很多哦,要有思想准備.
首先我們要替換winSock.dll或者winsock32.dll,我們寫的替換函數要和原來的函數一致才行,就是說它的函數輸出什麼樣的,我們也要輸出什麼樣子的函數,而且參數,參數順序都要一樣才行,然後在我們的函數裡面調用真正的winSock32.dll裡面的函數就可以了
首先:我們可以替換動態庫到系統路徑
其次:我們應用程序啟動的時候可以載入原有的動態庫,用這個函數LoadLibary
然後定位函數入口用GetProcAddress函數獲得每個真正socket函數的入口地址
當游戲進行的時候它會調用我們的動態庫,然後從我們的動態庫中處理完畢後才跳轉到真正動態庫的函數地址,這樣我們就可以在裡面處理自己的數據了,應該是一切數據.呵呵!
興奮吧,攔截了數據包我們還要分析之後才能進行正確的應答,不要以為這樣工作就完成了,呵呵!還早呢,等分析完畢以後我們還要模擬應答機制來和伺服器通信,一個不小心就會被封號,呵呵,嗚~~~~~~~~我就被封了好多啊!
分析數據才是工作量的來源呢,游戲每次升級有可能加密方式會有所改變,因此我們寫外掛的人都是亡命之徒啊,被人娛樂了還不知道,呵呵!(聲明我可沒有賺錢,我是免費的)
好了,給大家一個不錯的起點,這里有完整的替換socket源代碼,呵呵!
http://www.vchelp.net/vchelp/zsrc/wsock32_sub.zip
4截獲api
上面的技術如果可以靈活運用的話我們就不用截獲api函數了,其實這種技術是一種補充技術.比如我們需要截獲socket以外的函數作為我們的用途,我們就要用這個技術了,其實我們也可以用它直接攔截在socket中的函數,這樣更直接.
現在攔截api的教程到處都是,我就不列舉了,我用的比較習慣的方法是根據輸入節進行攔截的,這個方法可以用到任何一種操作系統上,比如98/2000等,有些方法不是跨平台的,我不建議使用.這個技術大家可以參考windows核心編程裡面的545頁開始的內容來學習,如果是98系統可以用window系統奧秘那個最後一章來學習.
好了方法就是這么多了,看大家怎麼運用了,其它的一些針對性的技巧這里我就不說了,要不然會有人殺了我的,呵呵!
記住每個游戲的修改方法都不一樣,如果某個游戲數據處理全部在伺服器端,那麼你還是別寫外掛了,呵呵,最多寫個自動走路的外掛,哈哈!
數據分析的時候大家一定要注意,不要輕易嘗試和伺服器的連接,因為那有很危險,切忌!等你掌握了大量的數據分析結果以後,比較有把握了在試試,看看你的運氣好不好,很有可能會成功的哦,呵呵!
其實像網金也瘋狂的那種模擬客戶端的程序也是不錯的,很適合office的人用,就看大家產品定位了.
好了不說了,大家努力吧!切忌不要被游戲廠商招安哦,那樣有損
㈡ 什麼是掛如何製作的
外掛是指某些人利用自己的電腦技術專門針對一個或多個網路游戲,通過改變網路游戲軟體的部分程序,製作而成的作弊程序。現在隨著游戲官方對外掛的抵制,游戲本身也有了超強的自動檢測外掛的功能,但製作外掛的技術也不斷提高著,現在最流行的就是在游戲中用封包和抓包工具對游戲伺服器提交假的數據從而改變游戲人物能力。 另外,外掛也指:單位形的作戰武器系統在其原本的作戰單位上添加附加的用於輔助作戰單位作戰的工具、器具。選擇一款目標游戲製作網游外掛的第一步就是選定一款游戲。目標游戲不是亂選的,裡面也有很多講究。第一點,選擇自己熟悉的游戲類型。如果你之前已經做過網游外掛,那選擇一款類似的游戲會給你節省很大的時間,如果是第一次製作的話,那也選一款自己熟悉的游戲類型。第二點,盡量不要選擇熱門的游戲,因為熱門的游戲往往意味著競爭對手的增多,除非你對自己的技術以及營銷手段很有信心。第三點,不要小看玩家人數少的游戲,游戲規模小,競爭也小。一款游戲,只要你能形成吃獨食的場面,再加上營銷搞得好的話,其中的利潤將超過你的想像。但要注意,最好不要碰上因為游戲規模過小導致游戲廠商把游戲關閉的衰事。第四點,盡量選擇尚在測試期內的游戲,這使得你有充足的時間製作外掛,同時也要觀察該款游戲在市面上是否有其他外掛出現。這樣等游戲正式上線時,你的外掛也差不多可以推出了。2 目標網游初步分析1 確定要製作的網游外掛類型目標網游選定好之後,你首先要做的第一件事就是確定你要製作的網游外掛類型。網游外掛雖然統稱為外掛,但細分的話可以分為以下二類:內掛和離線外掛。內掛就是在游戲內呼出的網游外掛,它依賴於網遊客戶端,所使用到的技術主要包括滑鼠和鍵盤的模擬,內存特殊變數區域的搜索,或者是掛鉤游戲沖旁的收包函數和模擬游戲的發包函數。離線外掛就是指不依賴於客戶端,能獨立模擬客戶端和游戲伺服器進行通訊的網游外掛。離線外掛的實現方式只有一種,就是模擬網遊客戶端的收包和發包過程。總體而言,內掛的整體製作難度比離線外掛要簡單一些,但離線外掛製作要比內掛更有趣,而且用起來也更方便,不必啟動龐大的客戶端程序。所以下面主要是以離線外掛的製作流程為主進行講解網路截包工具(Microsoft Network Monitor)的使用簡介目標網游的初步分析最主要的工作是分析游戲初始階段網遊客戶端和伺服器之間的數據通訊。這一階段主要是指從輸入用戶名和密碼開始登錄游戲到玩家人物出現在游戲場景中散滲橡這個階段。這是開始階段最關鍵的一個步驟,如果你能夠成功破解網游數據通訊部分的加密,並用DEMO程序成功模擬整個喊塵登錄過程,那你幾乎就已經成功了一半了。如果無法破解加密的話,那就需要趕快重新選定一款游戲了。關於初步分析,首先要確定網遊客戶端和伺服器之間的大致通訊過程,最起碼你要知道客戶端連接的是哪一個伺服器,連接的埠是多少,在登錄的過程中發送和接受了幾個包?而要了解這些東西,你就要使用到網路截包工具了。我使用的是Microsoft Network Monitor V3.1來做示範簡單好用。大家可以到下面的網址去下載該軟體。 http://support.microsoft.com/kb/933741/zh-cn下面,我簡單介紹一下該軟體的使用方法。安裝好程序之後,運行程序,點擊【Start Page】頁的【Create a new capture tab】按鈕,創建一個新的數據捕獲會話,點擊工具欄上綠色的開始按鈕,就可以開始捕獲網路數據了各個窗口的作用如下:Network Conversations下面有二項:My Traffic代表本機作為發送方或者接收方參與的網路數據包。選中該項後,Frame Summary中將僅僅列出與本機相關的網路數據包。Other Traffic 則是網路上其他機器之間的網路數據包。因為正好在攔截期內經過本機,所以被順道攔截了下來。Capture Filter 是設定攔截數據時的過濾器。Display Filter 是對攔截結果的過濾設定。Select Networks 是設定需要攔截本機上的那一個網路。Aliases用於設定友好名。Frame Summary 中列出的是符合條件的所有網路數據包Frame Details則是當前選中的網路數據包的詳細結構Hex Details 則是當前選中網路數據包的二進制格式3 分析初始階段C/S網路數據通訊簡單介紹了網路截包工具的使用之後,下面我們就開始初步分析了。在這篇文章里,我以某款網路游戲作為假定目標。(具體是哪一款,大家就不要深究了。)首先在【aliases】窗口中將本地客戶端和游戲伺服器分別命名為:MyComputer和GameServer。注意不要忘了點擊【apply】按鈕。數據包列表就是目標網游從輸入用戶名和密碼登錄游戲到人物出現在游戲中(然後立即退出。)這一階段客戶端和伺服器之間的所有往來的數據包MyComputer è GameServer .S...... 客戶端請求建立連接MyComputer ? GameServer .S..A... 伺服器同意建立連接MyComputer è GameServer ....A... 連接建立以上三個包稱為建立TCP連接的三段式握手。當你調用Socket類的Connect方法時就會產生上面的三個TCP包。下面是連接斷開的過程。MyComputer è GameServer F...A... 客戶端請求斷開連接MyComputer ? GameServer ....A... 伺服器同意斷開請求MyComputer ? GameServer F...A... 伺服器請求斷開連接MyComputer è GameServer ....A... 客戶端同意斷開請求調用Socket類的Disconnect方法時就會產生上面的四個TCP包。在驗證用戶名和密碼的過程中,客戶端和伺服器之間總共連接了二次,所以在之後的外掛程序編寫過程中,我們同樣也要連接二次。TCP Flag為...PA...表示該TCP包內帶有數據,而....A...則是回應包,用於回應上一個包的發送方:我已經收到你上一個包了,它本身不帶數據。所以一般一個...PA...包都有一個對應的....A...包(例如編號為266和269),但如果回應的時候,發現正好有數據要發送,則可以將回應包摻雜在發送包中發送過去(例如編號為273的回應包就摻雜在275這個包內)。下面觀察客戶端和伺服器之間的實際數據往來。1. 客戶端連接到伺服器2. MyComputer ? GameServer 伺服器給客戶端發送7位元組的數據3. MyComputer è GameServer 客戶端給伺服器發送90位元組的數據4. MyComputer ? GameServer 伺服器給客戶端發送65位元組的數據5. MyComputer ? GameServer 伺服器給客戶端發送48位元組的數據6. MyComputer è GameServer 客戶端給伺服器發送48位元組的數據7. MyComputer ? GameServer 伺服器給客戶端發送208位元組的數據8. 伺服器斷開連接9. ……以上就是第一次連接的大致過程。觀察每個包內的具體傳輸數據是沒有意義的,因為網游之間的通訊肯定是加密的,你每次攔截下來的數據都會不一樣。通常游戲伺服器給客戶端發送的第一個包都是KEY包(例如上面的7位元組的包),客戶端在接收到KEY包之後執行相應的數據加密初始化。所以接下來的任務就是根據已掌握的數據通訊規律,對游戲客戶端的加密演算法進行破解了。4 游戲加密演算法破解網路游戲所使用的網路通訊函數肯定也是微軟操作系統所提供的標准API函數,所以通常在接受網路數據的API函數中下一個斷點,當接收到第一個7位元組包時,斷點激活,然後逐漸跟進去,查看游戲客戶端是如何處理該段數據的,然後我們在外掛中依樣畫葫蘆,進行同樣的處理。整個破解過程相當的枯燥無聊,因為面對的都是匯編代碼也涉及本人專長,所以只能大致的說一下。5 DEMO製作破解完成之後,就要製作一個能夠登錄游戲的DEMO了,用於確認游戲加密演算法的破解是否成功。至於選擇何種編程語言和工具製作外掛則沒有限定,常用的如VC,Delphi,VB…等都可以,具體的編程在此就不具體說明了,可以根據個人的喜好所選擇,下面談談網游中數據通訊的基本單位:指令包。所謂指令包就是代表了一個最基本含義的數據包。比如游戲人物向左移動時,游戲客戶端就會向伺服器發送一個指令包(人物走路包),通知伺服器更新游戲人物的坐標。當游戲人物周圍出現一個新的怪物時,伺服器會向客戶端發送一個指令包(怪物出現包),通知客戶端在畫面上繪制出該怪物。所以,可以說指令包就是客戶端和伺服器之間所使用的通訊語言,而外掛的工作就是解析該種語言,然後模擬客戶端和伺服器端進行通訊。各個游戲定義的指令包的格式都不一樣,但一般一個指令包通常含有以下幾個元素:XX XX XX XX XX XX XX ...XX XX 紅色部分通常與該指令包的長度相關。他可能是指整個指令包的長度,也可能是指他餘下部分指令的長度,這需要根據游戲的具體情況來確定。之所以專門要用一定空間來說明指令包的長度,這是由SOCKET通訊的機制所決定的。SOCKET連接建立好之後,通過SOCKET連接讀取到的數據並不是以指令包為分割的。有可能一個TCP包中正好包含一條指令包,也有可能僅僅包含指令包的一部分(如下圖所示)。所以這時候就要根據指令包長度將收到的網路數據截取成單個的指令包。有一點需要指出的是:剛開始的幾個數據包不一定遵循一定的規律,這時候就需要進行特殊處理(因為在開頭,所以也比較好處理),而之後的數據包肯定是遵循指令包格式的,不然就亂套了。XX XX 藍色部分通常稱為指令包標識,用於說明該指令包是屬於哪一種類型。比如怪物攻擊包,玩家的移動包……,游戲客戶端根據收到的相應指令包採取不同的動作。事實上,在客戶端程序的內部就是一個很大的Sw
㈢ 如何用C++製作游戲外掛
我世陪迅們確定要打的NPC數量。這個數量不能很大,原因在於網金的封包長度用一個位元組表示,那麼一個包可以有255個位元組,我們上面分析過,增加一個NPC要增加10個位元組,所以大家算算就知道,打20個NPC比較合適。
然後我們要把客戶端原來的NPC代碼分析計算出來,因為增加的NPC代碼要加上100000哦。再把我們增加的NPC代碼計算出來,並且組合成新的封包,注意代表包長度的位元組要修改啊,然後轉發到伺服器,這一步在編寫程序的時候要注意搜此演算法,不要造成較大延遲。
上面我們欺騙伺服器端完成了,欺騙客戶端就簡單了,^-^
發送了上面的封包後,我們根據新增NPC代碼構造封包馬上發給客戶端,格式就是"F4 44 12 E9 NPC代碼 02 00 00 03 00 00 00
00 00 00",把每個新增的NPC都構造這樣一個包,按順序連在一起發送給客戶端,客戶端也就被我們騙過了,很簡單吧。
以後戰斗中其他的事我們就不管了,盡情地開打吧,呵呵。
上面講的需要一定的編程基礎,但是不難,即使你不會編程,相信你繼續看下去就亂襪會有收獲了。
五:怎麼用計算機語言去寫一個單機代理?
在上一章,我們已經對於代理的原理進行了講解,大家對於代理已經有了一個初步的認識,現在我教大家如何用計算機語言編寫一個自己的代理,我們考慮到簡單明了,我們選用VB,因為用VB編寫代理只需要很少的代碼。
代碼如下:
Private Sub form_Load()
DaiLi.LocalPort = "1234"
Server.RemotePort = "1234"
Server.RemoteHost = "211.100.20.26"
DaiLi.Listen
End Sub
Private Sub DaiLi_ConnectionRequest(ByVal requestID As Long)
Server.Connect
內容太多,寫不下
我這有本教程,挺不錯,和我聯系我給你
㈣ 製作輔助需要什麼
需要精通一款編程軟體,精通匯編語言,精通數據結構,能熟練掌握CE,OD等工具使用方法,能用C++編寫驅動程序(過游戲驅動保護大亮),總之要掌握的很多。
網路游戲,英文名稱為OnlineGame,又稱「在線游戲」,簡稱「網游」。指以銀譽互聯網為傳輸媒介,以游戲運營商伺服器和用戶計算機為處理終端,以游戲客戶端軟體為信息交互窗口的旨在實現娛樂、休閑、交流和取得虛擬成就的具有可持續性的個體性多人在線游戲。
網路游戲區別與單機游戲而言的,是指玩家必須通過互聯網連接來進行多人游戲。一般指由多名玩家通過計算機網路在虛擬的環境下對人物角色及場景按照一定的規則進行操作以達到娛樂和互動目的的游戲產品集合。而單機游戲模式多為人機對戰。因為其不能連入互聯網而玩家與玩家互動性差了很多,滾搏寬但可以通過區域網的連接進行有限的多人對戰。