李靜雅,魏 紅
(1.長(zhǎng)治學(xué)院計(jì)算機(jī)系,山西 長(zhǎng)治 046011; 2.太原科技大學(xué),山西 太原 030024)
?
*1植物大戰(zhàn)僵尸游戲輔助原理研究及實(shí)現(xiàn)
李靜雅1,魏紅2
(1.長(zhǎng)治學(xué)院計(jì)算機(jī)系,山西 長(zhǎng)治 046011; 2.太原科技大學(xué),山西 太原 030024)
〔摘要〕針對(duì)“植物大戰(zhàn)僵尸”游戲后面關(guān)卡設(shè)計(jì)過(guò)于困難,消磨了玩家興趣,受眾人群少的問(wèn)題,提出基于游戲功能研究該游戲輔助.通過(guò)CE和OD分析游戲中陽(yáng)光值、金幣值、植物冷卻時(shí)間等游戲數(shù)據(jù)的存儲(chǔ)基址后,利用C++和win32編程實(shí)現(xiàn)游戲輔助.輔助實(shí)現(xiàn)后,可以在游戲運(yùn)行過(guò)程中,依據(jù)玩家游戲進(jìn)度的需要隨時(shí)修改游戲中的數(shù)據(jù),攻擊僵尸時(shí)僵尸全屏顯示且子彈重疊等功能.游戲輔助增強(qiáng)玩家的攻擊力,降低游戲難度,提高游戲的耐玩度.語(yǔ)音控制輔助的功能,更好地提升了輔助的易用性.
〔關(guān)鍵詞〕游戲輔助;基址;語(yǔ)音控制;CE
0引言
電腦游戲一種新的娛樂(lè)方式進(jìn)入人們生活,成為人們緩解壓力的方式之一.“植物大戰(zhàn)僵尸”是2009年以來(lái)最受玩家喜愛(ài)的策略類(lèi)塔防游戲,玩家通過(guò)種植多種不同植物,收獲陽(yáng)光,金幣,向僵尸發(fā)子彈等操作,有效阻擋僵尸的入侵,保衛(wèi)家園.不同的僵尸種類(lèi),不同的場(chǎng)景,稀奇的玩法構(gòu)成多種游戲模式,增加游戲的可玩性,但游戲靠后關(guān)卡很難通過(guò),玩家會(huì)逐漸失去興趣.本文研究設(shè)計(jì)實(shí)現(xiàn)本款游戲的輔助,可以在玩家游戲過(guò)程中,根據(jù)玩家的需要,適時(shí)降低游戲某環(huán)節(jié)的難度,幫助玩家順利通過(guò)關(guān)卡,使玩家盡情享受游戲的場(chǎng)景和通關(guān)樂(lè)趣,勞累時(shí)緩解壓力.更好激發(fā)玩家的興趣.還可以通過(guò)游戲輔助的設(shè)計(jì)方便快速找出游戲的漏洞,更好地實(shí)現(xiàn)游戲的保護(hù).
1游戲輔助相關(guān)技術(shù)與軟件
1.1反匯編技術(shù)
游戲輔助功能的實(shí)現(xiàn),是要通過(guò)設(shè)計(jì)軟件修改游戲軟件中的相關(guān)數(shù)據(jù),算法和代碼進(jìn)而改變游戲中的數(shù)據(jù)值.由于游戲的源代碼無(wú)法得到,因此要對(duì)游戲分析和數(shù)據(jù)修改,就需要使用反匯編[1,2].游戲程序一般采用高級(jí)語(yǔ)言編寫(xiě)然后通過(guò)相應(yīng)的編譯程序生成可以在計(jì)算機(jī)上執(zhí)行的機(jī)器語(yǔ)言程序.采用反匯編技術(shù)就是將機(jī)器語(yǔ)言程序反編譯成匯編語(yǔ)言或該機(jī)語(yǔ)言程序[3,4],然后通過(guò)CE或者OD工具,分析反匯編出來(lái)的匯編語(yǔ)言程序,尋找需要修改的數(shù)據(jù)所在程序中的位置,修改數(shù)據(jù).
1.2Microsoft Speech SDK
游戲輔助設(shè)計(jì)為了便于輔助功能的使用,可以采用語(yǔ)音控制輔助功能執(zhí)行.用于在Windows平臺(tái)上的語(yǔ)音應(yīng)用程序和語(yǔ)音引擎開(kāi)發(fā)的軟件包可以使用微軟公司的Microsoft Speech SDK[5],該軟件包主要包括兼容32位的語(yǔ)音應(yīng)用程序編程接口(Speech Application Programming Interface, SAPI)、微軟語(yǔ)音合成引擎(TTS)及微軟連續(xù)語(yǔ)音識(shí)別引擎(CSR),可以實(shí)現(xiàn)語(yǔ)音識(shí)別,本文采用SAPI實(shí)現(xiàn)語(yǔ)音輔助功能.
1.3Cheat Engine 內(nèi)存修改軟件
本文采用Cheat Engine開(kāi)源的內(nèi)存修改輔助工具,它包括16進(jìn)制編輯,反匯編程序,內(nèi)存查找工具等功能,可以查找并修改植物大戰(zhàn)僵尸游戲的內(nèi)存數(shù)據(jù),軟件具有強(qiáng)大的反匯編功能.運(yùn)行軟件后,需打開(kāi)游戲進(jìn)程,對(duì)需要修改的游戲數(shù)據(jù)值進(jìn)行搜索,可以得到相應(yīng)內(nèi)存地址,之后回到游戲中,在游戲運(yùn)行過(guò)程中,這個(gè)搜索的游戲數(shù)據(jù)會(huì)隨游戲的運(yùn)行改變,改變后,讓CE多次搜索改變中的值,直到鎖定需要修改數(shù)據(jù).
2游戲輔助的總體設(shè)計(jì)
基于PC端的“植物大戰(zhàn)僵尸”游戲輔助界面應(yīng)該簡(jiǎn)單友好,玩家易使用操作,設(shè)計(jì)應(yīng)采用與游戲相同,玩家熟知的術(shù)語(yǔ),采用中文界面,系統(tǒng)可擴(kuò)充,易維護(hù).
游戲輔助是玩家在玩“植物大戰(zhàn)僵尸游戲”時(shí)隨時(shí)幫助玩家增加游戲中的陽(yáng)光值,金幣值,了解僵尸的數(shù)量和狀態(tài),在僵尸數(shù)量很多時(shí),簡(jiǎn)化游戲中種植植物收獲陽(yáng)光值的時(shí)間或增強(qiáng)植物攻擊僵尸的威力等,來(lái)不定時(shí)降低游戲的難度,幫助玩家連續(xù)通過(guò)多級(jí)關(guān)卡,使玩家體驗(yàn)不同模式,不同關(guān)卡游戲的場(chǎng)景,享受通關(guān)帶來(lái)了成就感,緩解壓力.因此,游戲輔助需要實(shí)時(shí)顯示并修改游戲當(dāng)前的陽(yáng)光值和金幣值;能夠通過(guò)輔助取消種植植物的間隔,無(wú)間斷種植需要的植物,并可以在一塊土地上重復(fù)種植多個(gè)植物;玩家不需要自己收集陽(yáng)光和金幣,通過(guò)輔助可以自動(dòng)收集;需要實(shí)現(xiàn)連續(xù)多顆子彈同時(shí)發(fā)射攻擊僵尸,可以讓逐漸出現(xiàn)的僵尸一起出現(xiàn),用戶及時(shí)了解本級(jí)僵尸的數(shù)量;在全屏游戲時(shí),輔助的功能無(wú)法方便使用,需要切換界面來(lái)控制輔助軟件,語(yǔ)音控制功能的實(shí)現(xiàn)可輕松方便地使用輔助.“植物大戰(zhàn)僵尸”游戲輔助的功能結(jié)構(gòu)如圖1所示.
圖1 游戲輔助功能圖
3游戲輔助的實(shí)現(xiàn)
3.1游戲陽(yáng)光值基址的分析
游戲輔助是對(duì)游戲中的數(shù)據(jù)根據(jù)用戶的需要及時(shí)進(jìn)行修改,在修改數(shù)據(jù)時(shí),不能影響游戲的運(yùn)行,使游戲轉(zhuǎn)換到更易于玩家的獲勝的狀態(tài)繼續(xù)游戲.輔助的實(shí)現(xiàn)是首先要知道可以對(duì)游戲中的哪些數(shù)據(jù)進(jìn)行修改,游戲中數(shù)據(jù)是多少,存儲(chǔ)在內(nèi)存的哪個(gè)單元中,單元地址是什么,然后在對(duì)該地址下的數(shù)據(jù)進(jìn)行相應(yīng)的操作.游戲使用的是動(dòng)態(tài)內(nèi)存,每次運(yùn)行游戲時(shí),分配給游戲的內(nèi)存地址都不會(huì)一樣,因此,需要找出游戲中數(shù)據(jù)的基址,即不改變的游戲數(shù)據(jù)的真實(shí)地址,才可以正確地對(duì)游戲中的數(shù)據(jù)進(jìn)行修改.“植物大戰(zhàn)僵尸”游戲中的數(shù)據(jù)主要是有陽(yáng)光值、金幣值等,本文以陽(yáng)光值基址的分析為例說(shuō)明.
找到游戲中陽(yáng)光值的內(nèi)存地址,但內(nèi)存地址在每次重新加載游戲時(shí)是會(huì)改變的,對(duì)該地址下的數(shù)據(jù)進(jìn)行修改,只能滿足當(dāng)次游戲時(shí)陽(yáng)光值修改成功,一旦關(guān)閉游戲重新開(kāi)始,修改該地址下的陽(yáng)光值,游戲中的陽(yáng)光值就不能被修改.因此要找到陽(yáng)光值的基址,不隨游戲加載改變的存放陽(yáng)光值的地址,關(guān)鍵是把圖2所示的基址1地址,偏移量1、2找到.
基址1地址,偏移量1、偏移量2找到后根據(jù)公式可以得到游戲中的陽(yáng)光值:
基址2=(基址1)+偏移量 1;
陽(yáng)光值的內(nèi)存地址=(基址2)+偏移量2;
陽(yáng)光值=(陽(yáng)光值的內(nèi)存地址)
圖2 尋找基址圖
使用工具CheatEngine6.4簡(jiǎn)體中文版可以尋找游戲中數(shù)據(jù)的基址.運(yùn)行CE后將“植物大戰(zhàn)僵尸游戲”進(jìn)程附加進(jìn)CE程序,開(kāi)始尋找需要數(shù)據(jù)(陽(yáng)光值為例)的基址,掃描是多次反復(fù)的過(guò)程,通過(guò)不斷修改陽(yáng)光值,得到當(dāng)前陽(yáng)光值的地址,尋找是什么改寫(xiě)這個(gè)地址,可得到若干條改寫(xiě)陽(yáng)光值數(shù)據(jù)的匯編代碼,根據(jù)代碼找到偏移地址1和2,其中偏移地址的查找如圖3(a)所示,將得到的陽(yáng)光值基址和偏移地址添加到CE的Add address中,就可以得到陽(yáng)光值的真正地址,利用程序?qū)@個(gè)地址下的數(shù)據(jù)進(jìn)行修改,就可以隨時(shí)改變游戲中的陽(yáng)光值.本例研究中的陽(yáng)光值基址為:偏移地址1是:5560H;偏移地址2是:768H;則陽(yáng)光值的真正地址如圖3(b)所示.
(a)偏移地址(b)陽(yáng)光值的地址圖3 游戲中陽(yáng)光值的真正地址分析
3.2游戲輔助的實(shí)現(xiàn)
基于PC端的“植物大戰(zhàn)僵尸”游戲輔助采用Win32中定義窗口類(lèi)并給相應(yīng)的屬性賦值創(chuàng)建了主窗口,如圖4所示.
圖4 游戲輔助主界面
主窗口中的控件使用CreateWindow[5.6]的方法創(chuàng)建.采用Windows的消息機(jī)制運(yùn)行,將控件的創(chuàng)建放在消息循環(huán)中的WM_CREATE中,由于游戲中的當(dāng)前陽(yáng)光值和金幣值需要實(shí)時(shí)顯示,因此需要給這兩個(gè)標(biāo)簽分別設(shè)置定時(shí)器.
輔助實(shí)現(xiàn)了窗口界面,獲取游戲運(yùn)行時(shí)的句柄和ID等相關(guān)信息是游戲輔助程序編寫(xiě)的關(guān)鍵,通過(guò)Windows提供的API函數(shù)FindWindow()[5]GetWindowThreadProcessID()[4]等方法來(lái)實(shí)現(xiàn).在游戲進(jìn)程時(shí)首先需要提升游戲輔助程序的訪問(wèn)權(quán)限,這樣游戲輔助才可以直接訪問(wèn)游戲的內(nèi)存空間.
輔助獲取了游戲的進(jìn)程信息,獲取游戲中需要修改數(shù)據(jù)的數(shù)值后,再對(duì)數(shù)據(jù)進(jìn)行修改,陽(yáng)光值,金幣值的修改和顯示是在使用CE工具得到基址后實(shí)現(xiàn)的,采用WriteProcessMemory()[5,7]方法寫(xiě)入游戲中,修改其值.對(duì)于免CD功能是將植物種植的時(shí)間間隔變?yōu)?,即可以不間斷地種植植物,將影響CD時(shí)間狀態(tài)的相關(guān)匯編字節(jié)存儲(chǔ)后,寫(xiě)入游戲的CD時(shí)間基址匯總,實(shí)現(xiàn)在陽(yáng)光值充足的情況下無(wú)間隔無(wú)限種植植物.輔助還實(shí)現(xiàn)了自動(dòng)收集陽(yáng)光值金幣值,植物重疊種植,全屏顯示全部僵尸等功能,功能齊全,使用方便.
輔助可以通過(guò)語(yǔ)音來(lái)控制實(shí)現(xiàn)的功能,玩家可以在全屏模式下玩游戲,需要輔助時(shí),只需要說(shuō)出輔助的功能,相應(yīng)的功能即可生效.
4結(jié)論
本文研究實(shí)現(xiàn)“植物大戰(zhàn)僵尸”游戲的輔助,探討游戲輔助實(shí)現(xiàn)中游戲數(shù)據(jù)的基址尋找方案,是輔助實(shí)現(xiàn)的關(guān)鍵.游戲運(yùn)行時(shí)的句柄和ID信息的獲取是針對(duì)性實(shí)現(xiàn)各游戲輔助的基礎(chǔ).輔助實(shí)現(xiàn)后,功能齊全,使用簡(jiǎn)單便捷,降低了游戲通關(guān)難度,使玩家盡享游戲場(chǎng)景樂(lè)趣和通關(guān)的滿足.游戲玩家選擇關(guān)卡的功能和輔助界面的美化還需后續(xù)進(jìn)一步完善.
參考文獻(xiàn):
[1]刑瑞.C++反編譯技術(shù)研究與應(yīng)用[D].南京:南京大學(xué),2012
[2]高海濤.游戲外掛與反外掛技術(shù)的研究與應(yīng)用[D].內(nèi)蒙古:內(nèi)蒙古大學(xué),2014
[3]黃文彬.游戲反外掛系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].北京:中國(guó)科學(xué)院大學(xué),2013
[4]胡政.C++逆編譯中模板庫(kù)函數(shù)識(shí)別研究[D].合肥:中國(guó)科學(xué)技術(shù)大學(xué),2006
[5]葛子昂,周靖.Windows核心編程[M].第五版.北京:清華大學(xué)出版社,2008,198-227
[6]仰燕蘭,金曉雪,葉樺.ASP.NET AJAX框架研究及其在Web開(kāi)發(fā)中的應(yīng)用[J].計(jì)算機(jī)應(yīng)用與軟件,2011,28(6):195-198
[7]王文東,李竹林,尚建人.匯編語(yǔ)言與C語(yǔ)言的混合程序設(shè)計(jì)技術(shù)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2006,16(8):18-20
"Plants VS Zombies" Auxiliary Principle and its Implementation
LI Jingya1, WEI Hong2
( 1.Computer Department, Changzhi University, Changzhi 046011;2.Taiyuan University of Science & Technology, Taiyuan 030024, China)
〔Abstract〕For the problems of plants vs zombies games which were too difficult in later levels to spend a lot of interest in players and reduced the amount of players, an assistance based on the game function was studied. Through CE and OD to analyze game store address of game data including the value of sunlight, gold value, plant cooling time and so on, the C++ and win32 programming language were used to implement the auxiliary function. When the program implemented, some function could be achieved. Such as players could modify game data at any time on the basis of their need in the game process, zombies full-screen displayed and bullets overlapped when zombies were under attack. The assistance enhanced the players’ attack power, reduced the difficulty of the game and improved the pleasure of game. Especially using the auxiliary function of voice control in the game, the usability of assistance had been greatly improved.
〔Key words〕game auxiliary; base address; speech control;CE
*收稿日期:2015-12-14
作者簡(jiǎn)介:李靜雅(1982-),女,山西長(zhǎng)治人,碩士,長(zhǎng)治學(xué)院計(jì)算機(jī)系講師,主要從事智能信息處理研究.
〔文章編號(hào)〕1672-2027(2016)01-0039-04〔中圖分類(lèi)號(hào)〕TP311
〔文獻(xiàn)標(biāo)識(shí)碼〕A
太原師范學(xué)院學(xué)報(bào)(自然科學(xué)版)2016年1期