能夠利用JAVA來編游戲外掛,這真的是一個讓人很感興趣的話題。
在討論這個題目之前,我們首先來給不玩網絡游戲的人補一下課,首先網絡游戲的概念大家應該都是知道了,從蝦米最早接觸的文字MUD《重出江湖》,一直到現在大紅大紫的魔獸世界等游戲,都是網游。如果更精確的說,蝦米認為應該是那些通過廣域網來進行的游戲,沒人會把局域網里的紙牌叫做是網游吧?那么所謂的外掛就是針對網絡游戲開發的一款軟件,功能是截獲從客戶端發往服務器的數據,模擬玩家的操作,以達到更快升級、更塊賺錢的目的。外掛從游戲類型來說,可以分為兩種,一種是用于本地數據修改的。相信地球上的程序員都玩過《暗黑破壞神》也都用過修改器。其實修改器就可以叫做外掛。因為它修改了本地的數據;另一種是用于網絡數據修改的,最常見的手段就是截獲、修改數據包以欺騙服務器。例如,一個1級的菜鳥本來傷害只有10點,但是可以修改發往服務器的數據包,把傷害修改為任意值,玩拳皇的人也許碰到過這種情況,被對方一個輕拳就打廢了,很有可能就是這個原因。(所舉的例子理論上可行,大多數情況你的外掛還沒開發完成就會被官方封號了)。
簡單的知識我們先講到這里,在討論用java編外掛之前,還有一個話題要討論,那就是外掛的工作原理或方式。上面的講的那個例子其實已經把外掛的工作原理和盤托出:1、模擬玩家操作;2、分析并獲取本地內存中游戲的數據;3、將修改的數據發往服務器(針對網絡游戲而言)。但是現在各個運營商防外掛的水平都很高,如果是修改過的數據包那么服務器會不接受,甚至會被判定為使用非法外掛而封號的。在這里舉一個場景例子:你在打怪的時候,你的血會不斷的減少,怪物被殺死后還會掉落物品,那么外掛就應該獲取到你的血值和是否有物品掉落以及掉落的坐標,然后觸發相應的鼠標時間去喝藥或撿東西。注意,在這里我們沒有討論利用按鍵精靈去實現外掛。因為我一直認為單純依靠界面坐標去定位操作的程序不能稱之為外掛
現在我們來討論一下用JAVA開發外掛。開發過外掛的人都知道,開發外掛所使用的一般都是VC,VB,語言方面大多是c++,vb,dephl,這是因為中國的網絡游戲99.9%都是運行在windows環境下的,因此就要調用windows的api,在這方面,上述開發語言有著得天獨厚的優勢。另一方面,用vc,vb開發的外掛,可以直接在windows宿主下運行,但是java卻不行,JAVA是需要JRE才能運行的。我相信沒人原因為了使用一款幾十KB的外掛去裝一個幾十M的JAVA運行環境吧。但是從技術上,我認為JAVA是完全可以用于開發外掛的。
首先,JAVA完全具備分析內存的功能,不過我還不知道怎么做(汗一下)。JAVA程序運行的效率和性能可能是低于C++,但是目前的主流配置跑游戲的時候再跑個JAVA虛擬機是不成問題的。甚至利用JAVA讀取內存的數據,還可以發揮JAVA本身的優勢。其次,JAVA的網絡編程功能強大,獲取數據封包不是什么難題,但是要解析封包那就不一樣了,這屬于另一個領域的知識。也許有人會問,JAVA能調用WINDOWS的API嗎?其實我也不確定能不能或者是否可以做到完全調用,但是我相信,這跟人的實力有關系,跟語言是沒關系的。
原文轉自:http://www.anti-gravitydesign.com