国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網(wǎng)站運營 > 教你用易語言如何制作游戲輔助

教你用易語言如何制作游戲輔助

時間:2023-07-05 21:42:02 | 來源:網(wǎng)站運營

時間:2023-07-05 21:42:02 來源:網(wǎng)站運營

教你用易語言如何制作游戲輔助:

外掛開發(fā)第一步——找游戲內(nèi)存地址

說道找游戲內(nèi)存地址,偏移地址,這可能是整個游戲外掛開發(fā)中最難的一步,因為一個大型的網(wǎng)絡(luò)游戲,可能一個技能或者血條的內(nèi)存基址可能會偏移很多次,最后才得到一個內(nèi)存地址也叫物理地址。那么,這里有個問題來了,我們?yōu)槭裁匆壹寄芑蛘哐獥l的內(nèi)存基址?不是直接修改物理地址就行了嗎?這樣是不行的,因為物理地址是會變動的;舉個例子,每次關(guān)閉游戲重新啟動以后,游戲進程是會變動的,同樣的,游戲代碼在內(nèi)存中的存放位置,因為游戲結(jié)束以后,釋放掉了內(nèi)存地址,這個內(nèi)存地址可能會被其他程序所占用,所以是會變動的;當(dāng)你關(guān)閉游戲重新進入以后,游戲的技能或者血條在內(nèi)存中的物理地址就變了。但是,游戲技能或者血條的內(nèi)存基址是不會變動的,在內(nèi)存中的物理地址不管怎么變動,內(nèi)存基址都不會變動。那么內(nèi)存基址和物理地址之間是一種什么樣的關(guān)系呢?看下面這個公式:

物理地址 = 一級偏移地址 + 偏移地址

一級偏移地址 = 二級偏移地址 + 偏移地址

二級偏移地址 = 三級偏移地址 + 偏移地址

三級偏移地址 = 游戲技能基址 + 偏移地址

如上公式,一個游戲的物理地址是等于這個游戲的基址加上偏移地址的,所以,想要每次重新進入游戲都能夠找到準確的物理地址進行修改內(nèi)存地址的值,達到外掛的目的的話,就必須找到這個物理地址當(dāng)前對應(yīng)的偏移地址和基址,只有這樣才能夠確保每次登陸游戲都能夠修改物理地址的值。下面,就通過《植物大戰(zhàn)僵尸》這款經(jīng)典的單機游戲來演示一下找這款游戲的內(nèi)存基址的過程。

首先,介紹一款找游戲內(nèi)存基址的工具Cheat Engine簡稱CE,Cheat Engine是一款內(nèi)存修改編輯工具 ,它允許修改游戲或軟件內(nèi)存數(shù)據(jù),以得到一些其他功能。它包括16進制編輯,反匯編程序,內(nèi)存查找工具。與同類修改工具相比,它具有強大的反匯編功能,且自身附帶了外掛制作工具,可以用它直接生成外掛。好了,這個工具的具體介紹有興趣的去百度,這里也就是百度了一下,簡單的說了一下這個工具的作用,下面,打開植物大戰(zhàn)僵尸,打開CE,在CE中找到植物大戰(zhàn)僵尸,附加到CE中去,如圖所示:

游戲附加到OD以后,看自己想修改哪兒的內(nèi)容,就去找對應(yīng)的內(nèi)存基址,怎么找呢?比如修改無限陽光吧;首先,看一下最開始的陽光是多少?比如這里,開局陽光是50,就在CE中數(shù)值一項輸入50,掃描類型選擇精確數(shù)值在數(shù)值類型選擇4字節(jié)然后點擊首次搜索,這里不懂為什么這樣選擇的,自己百度科普一下基礎(chǔ)知識。如圖所示:

如上圖所示,出來了這么多的地址,究竟哪一個是我們想要的物理地址呢?接下來就需要在游戲中改動一下陽光的值,然后點擊再次搜索,結(jié)果就會出來了,如圖所示:

如上第二幅圖所示,我們想要的物理地址就出來了,把這個地址添加到地址列表中去,然后修改一下陽光的值,確認一下是不是想要的地址,不過這里要注意,在修改的時候,我們需要點擊列表地址中我們拉下來的這一行的數(shù)值這一欄,其他是修改地址和字節(jié)類型用的,不要亂動,如圖所示:

如上圖所示,這就是我們想要的物理地址,這里我們可以鎖定這個內(nèi)存地址的值,一直是100或者200或者更多。只需要點擊前面激活這一欄選中就行了,從而達到鎖定陽光值的效果。但是當(dāng)關(guān)閉游戲,重新進入,這個地址就沒用了,又需要重新找。所以,這里就需要找到真正的陽光值的基址和偏移地址,那么,怎么找呢?我們找到這個物理地址以后,就右鍵,選擇找出是什么改寫了這個地址也就是快捷鍵F6這個名字每個版本的漢化效果都不一樣的,這里就會彈出一個窗口,是空白,然后我們再到游戲中改變陽光的值,看看這個空白窗口中出現(xiàn)的代碼,如圖所示:

如上圖三所示,分析這兩條代碼,看見最終都指向了一個指針數(shù)值17C88118,然后我們分析一下這兩條代碼什么意思,相信稍微懂一點匯編語言的人都能夠看懂。首先分析一下mov [edi+00005560],esi這條指令,我們在詳細信息中看見,寄存器esi中的代碼是000026DE這個值換算成十進制剛好是9950,那么這個9950是怎么來的呢?其實就是剛剛我在做上一步的時候,說了要變動游戲中的陽光值,所以我先直接把陽光值修改成了10000,然后種了一個石頭,剛好是50,所以陽光值發(fā)生了變化,這條指令mov [edi+00005560],esi就是把寄存器esi的9950的陽光值放入edi+00005560這個地址中去,這個地址是誰呢?其實這個地址就是剛剛找出來的物理地址,剛好滿足前面的公式:物理地址 = 陽光基址地址 + 偏移地址不信的朋友可以自己加一下算一算,用寄存器edi里面的指針數(shù)值17C88118加上偏移地址00005560看看是不是等于陽光物理地址17C8D678。接下看看add [eax+00005560],ecx這條指令,add指令是相加的意思,前面的mov是賦值或者移動的意思,這條代碼的意思就是,把ecx寄存器中的值加入[eax+00005560]這個地址中的值當(dāng)中去,再看看寄存器eax的地址是多少?剛好又是17C88118這個指針數(shù)值,那么,我們就可以確定一個事情,那就是17C88118這個指針數(shù)值,肯定是上一級的地址的指針數(shù)值,那么上一級要么是基址,要么還是一個不偏移地址,這個需要進一步來確認。怎么確認呢?這里不是出來了17C88118這個指針數(shù)值嘛,再次放到CE中搜索一波,看看這個值對應(yīng)的地址是多少,看看出來的是一個動態(tài)地址還是靜態(tài)地址,這里需要普及一個知識點,在CE中,黑色的地址表示動態(tài)地址,綠色的表示靜態(tài)地址,那好,丟到CE中搜索,這里這個值是十六進制的,所以在搜索的時候,需要勾選搜索框前面的hex,也就是十六進制搜索的意思,這里填好以后點擊新的掃描,首次掃描如圖所示:

這里可以看見結(jié)果為56個地址,這么多,我們怎么來確認究竟是哪個呢?可以看見還有很多紅色的地址。其實,這里的紅色的地址,是一直在改變的地址,我們不用管它,直接點擊再次掃描,把這些紅色的過濾掉,然后看看還剩下的地址有哪些,如圖所示:

多次點擊再次掃描以后發(fā)現(xiàn)不管怎么點擊都剩下來了52個結(jié)果,然后看了一下這些結(jié)果中并沒有綠色的靜態(tài)地址,并且其他地址開頭幾位都比較像,唯獨如圖所示兩個地址比較特殊,這兩個可能就是我們需要的地址了,后來我也去百度了一波,結(jié)果所說的是這種開頭比較像的是數(shù)組,也就是說,遇到這種,基本都不是我們需要的地址,直接放棄,把這兩個特殊的拉進下邊的地址列表,開始分析,雙擊地址這一欄,在出來的更改地址窗口中復(fù)制下這個地址,然后再勾選指針選項,在出來的內(nèi)容框中填寫入剛剛復(fù)制的地址,在上面的內(nèi)容框中寫入剛剛找到的00005560這個偏移地址,得到的結(jié)果剛好是陽光的物理地址,最后的陽光值也正好和當(dāng)前的陽光值一樣,并且,這兩個地址都是一樣的,而且都是動態(tài)地址,如圖所示:

如上圖所示,這兩個地址加上偏移地址都可以得到陽光物理地址,那么哪個才是我們所需要的真正的一級偏移地址呢?這里就需要我們對這兩個地址進行詳細的分析了,同樣的右鍵-找出是什么訪問了這個地址,也就是快捷鍵的F5,這里一定不要搞混淆了,前面是找出是什么改寫了這個地址,不一樣的!我們進去以后也是和前面一樣出來一個窗口,但是這兩個窗口里面的內(nèi)容就不一樣了,第一個地址0264A400在F5找出是什么訪問了這個地址以后的窗口中會出現(xiàn)內(nèi)容,但是第二個地址0956BD3C在出現(xiàn)的窗口里面是一片空白,所以,這兩個地址中,0264A400才是我們要找的真正的一級偏移地址,如圖所示:

如上第二幅圖所示,找到了真正的一級偏移地址0264A400后,訪問這個地址的窗口中看這些代碼指令,通過對比,發(fā)現(xiàn)這些代碼都指向同一個指針數(shù)值02649C98且都有偏移地址00000768,如圖所示:

如上圖所示,既然所有的代碼都指向了同一個指針數(shù)值02649C98那么就繼續(xù)按照前面找一級偏移地址的辦法,丟到CE中,繼續(xù)新的十六進制搜索,搜索指針數(shù)值02649C98以后得到如下圖所示的結(jié)果:

如上圖所示,一共搜索到923個地址,而且還有幾個綠色的靜態(tài)地址,這里我們就可以嘗試一下了,看看這幾個綠色的靜態(tài)地址究竟是不是我們想要的陽光基址,同樣的原理,我們把幾個綠色的靜態(tài)地址拉到地址列表中,在地址這一欄雙擊,在出來的更改地址窗口中復(fù)制下這個地址,然后再勾選指針選項,在出來的內(nèi)容框中填寫入剛剛復(fù)制的地址,在上面的內(nèi)容框中寫入剛剛找到的00000768這個偏移地址,然后再點擊添加偏移在出來的內(nèi)容框中輸入剛剛第一次找到的00005560這個偏移地址,得到的結(jié)果剛好是陽光物理地址和陽光當(dāng)前的值,并且這幾個靜態(tài)地址的結(jié)果都是一樣的。這里需要說明一下,為什么這里要填寫兩個偏移地址,因為剛剛第一次找到的是一級偏移地址,這次是二級偏移地址了,所以,這里

陽光物理地址 = 一級偏移地址 + 偏移地址

一級偏移地址 = 陽光基址 + 偏移地址

陽光物理地址 =陽光基址 + 第一次的偏移地址 + 第二次的偏移地址

如圖所示:

如上四幅圖所示,四個靜態(tài)地址最終結(jié)果都是一樣的,都可以用作陽光基址,那么就隨便取一個就行。這樣,陽關(guān)的基址和偏移地址就找到了,陽光的基址和偏移地址如下:

陽光基址:006A9EC0

一級偏移:00000768

二級偏移:00005560

這里可能有人會問,一級偏移地址不是我們第一次找出來的地址嗎?你這里的一級偏移不應(yīng)該是00005560嗎?對,也不對,我這里所說的一級偏移不是一級偏移地址的偏移,而是基于陽光基址的一級偏移,可以理解為從陽關(guān)基址開始,第一次偏移是00000768第二次偏移才是00005560,這樣做主要是為了方便后面寫代碼。好了,這就是找游戲基址的思路,同樣的道理,還可以找植物冷卻時間,不過找冷卻時間思路不太一樣,因為冷卻時間我們不知道具體的值,可以通過找未知的初始化值的方式來找,也可以通過字節(jié)的方式來找,具體詳見百度,我這里只是把找游戲內(nèi)存基址的思路和過程中怎么分析的給寫了出來,免得后人掉坑,比如我在找植物冷卻時間的時候,就掉了一個坑,我是通過字節(jié)的方式來找來找的,通過植物冷卻的時候為0,冷卻好了為1找到了物理地址以后,在找一級偏移地址的時候,忘記把搜索方式字節(jié)換為4字節(jié)型了,找了半天沒找到!其他思路是一樣的!

外掛開發(fā)第二步——修改游戲內(nèi)存地址的值

其實,這一步就比較簡單了,比如陽光的值,找到了以后,我們每次上游戲,直接在CE的地址列表框中手動添加地址,把像上面我們驗證這幾個基址的時候一樣,把基址,偏移地址填寫好,然后在數(shù)值這一欄雙擊,修改數(shù)值成為我們想要的陽光值就可以了,冷卻就把數(shù)值改為1即可,這一步就不用過多的提及了!

外掛開發(fā)第三步——編寫游戲外掛

其實編寫外掛只有會寫程序的人都知道該怎么弄了,只要找出來想要的功能的內(nèi)存基址,偏移等,直接在程序中寫上讀取和寫入內(nèi)存地址就行了,下面就是我寫的植物大戰(zhàn)僵尸的外掛的源碼,簡單的分析一波:

.程序集 窗口程序集_啟動窗口

.程序集變量 進程ID, 整數(shù)型

.程序集變量 a, 整數(shù)型

.子程序 __啟動窗口_創(chuàng)建完畢, , , 窗口創(chuàng)建完畢就利用時鐘事件獲取陽光值并輸出

進程ID = 取進程ID (“PlantsVsZombies.exe”)

時鐘1.時鐘周期 = 999

.子程序 _時鐘9_周期事件

標(biāo)簽提示信息.左邊 = 標(biāo)簽提示信息.左邊 - 2

.如果真 (標(biāo)簽提示信息.左邊 = -300)

標(biāo)簽提示信息.左邊 = 300

.如果真結(jié)束

.子程序 _時鐘1_周期事件, , , 獲取陽光值并輸出

.局部變量 讀陽光基址, 整數(shù)型

.局部變量 讀偏移地址一, 整數(shù)型

.局部變量 陽光物理地址, 整數(shù)型

讀陽光基址 = 讀內(nèi)存整數(shù)型 (進程ID, 十六到十 (“006A9EC0”), )

讀偏移地址一 = 讀內(nèi)存整數(shù)型 (進程ID, 讀陽光基址 + 十六到十 (“768”))

陽光物理地址 = 讀內(nèi)存整數(shù)型 (進程ID, 讀偏移地址一 + 十六到十 (“5560”), )

標(biāo)簽當(dāng)前陽光值.標(biāo)題 = “當(dāng)前陽光值:” + 到文本 (陽光物理地址)

.子程序 _編輯框輸入陽光值_獲得焦點, , , 設(shè)置輸入框在被獲取焦點以后情況編輯框內(nèi)容

編輯框輸入陽光值.內(nèi)容 = “”

.子程序 _按鈕增加陽光_被單擊, , , 增加陽光值

.局部變量 取陽光基址, 整數(shù)型

.局部變量 取偏移地址一, 整數(shù)型

.局部變量 取陽光物理地址, 整數(shù)型

取陽光基址 = 讀內(nèi)存整數(shù)型 (進程ID, 十六到十 (“006A9EC0”), )

取偏移地址一 = 讀內(nèi)存整數(shù)型 (進程ID, 取陽光基址 + 十六到十 (“768”))

取陽光物理地址 = 讀內(nèi)存整數(shù)型 (進程ID, 取偏移地址一 + 十六到十 (“5560”), )

a = 到整數(shù) (編輯框輸入陽光值.內(nèi)容)

寫內(nèi)存整數(shù)型 (進程ID, 取偏移地址一 + 十六到十 (“5560”), 取陽光物理地址 + a)

.子程序 _按鈕減少陽光_被單擊

.局部變量 取陽光基址, 整數(shù)型

.局部變量 取偏移地址一, 整數(shù)型

.局部變量 取陽光物理地址, 整數(shù)型

取陽光基址 = 讀內(nèi)存整數(shù)型 (進程ID, 十六到十 (“006A9EC0”), )

取偏移地址一 = 讀內(nèi)存整數(shù)型 (進程ID, 取陽光基址 + 十六到十 (“768”))

取陽光物理地址 = 讀內(nèi)存整數(shù)型 (進程ID, 取偏移地址一 + 十六到十 (“5560”), )

a = 到整數(shù) (編輯框輸入陽光值.內(nèi)容)

寫內(nèi)存整數(shù)型 (進程ID, 取偏移地址一 + 十六到十 (“5560”), 取陽光物理地址 - a)

.子程序 _按鈕鎖定陽光值_被單擊, , , 鎖定陽光值

時鐘2.時鐘周期 = 100

.子程序 _時鐘2_周期事件, , , 鎖定陽光值時鐘事件

.局部變量 鎖定陽光基址, 整數(shù)型

.局部變量 鎖定偏移地址一, 整數(shù)型

.局部變量 鎖定陽光物理地址, 整數(shù)型

鎖定陽光基址 = 讀內(nèi)存整數(shù)型 (進程ID, 十六到十 (“006A9EC0”), )

鎖定偏移地址一 = 讀內(nèi)存整數(shù)型 (進程ID, 鎖定陽光基址 + 十六到十 (“768”))

鎖定陽光物理地址 = 讀內(nèi)存整數(shù)型 (進程ID, 鎖定偏移地址一 + 十六到十 (“5560”), )

寫內(nèi)存整數(shù)型 (進程ID, 鎖定偏移地址一 + 十六到十 (“5560”), 1000)

.子程序 _按鈕取消鎖定陽光_被單擊, , , 取消鎖定陽光值

時鐘2.時鐘周期 = 0

.子程序 _按鈕鎖定冷卻1_被單擊, , , 鎖定冷卻1

時鐘3.時鐘周期 = 100

.子程序 _時鐘3_周期事件, , , 鎖定冷卻1時鐘事件

.局部變量 鎖定冷卻一基址, 整數(shù)型

.局部變量 鎖定冷卻一偏移地址一, 整數(shù)型

.局部變量 鎖定冷卻一偏移地址二, 整數(shù)型

.局部變量 鎖定冷卻一物理地址, 整數(shù)型

鎖定冷卻一基址 = 讀內(nèi)存整數(shù)型 (進程ID, 十六到十 (“006A9F38”), )

鎖定冷卻一偏移地址一 = 讀內(nèi)存整數(shù)型 (進程ID, 鎖定冷卻一基址 + 十六到十 (“768”))

鎖定冷卻一偏移地址二 = 讀內(nèi)存整數(shù)型 (進程ID, 鎖定冷卻一偏移地址一 + 十六到十 (“144”), )

鎖定冷卻一物理地址 = 讀內(nèi)存整數(shù)型 (進程ID, 鎖定冷卻一偏移地址二 + 十六到十 (“70”), )

寫內(nèi)存整數(shù)型 (進程ID, 鎖定冷卻一偏移地址二 + 十六到十 (“70”), 1)

.子程序 _按鈕取消鎖定冷卻1_被單擊, , , 取消鎖定冷卻1

時鐘3.時鐘周期 = 0

.子程序 _按鈕鎖定冷卻2_被單擊, , , 鎖定冷卻2

時鐘4.時鐘周期 = 100

.子程序 _時鐘4_周期事件, , , 鎖定冷卻2時鐘事件

.局部變量 鎖定冷卻二基址, 整數(shù)型

.局部變量 鎖定冷卻二偏移地址一, 整數(shù)型

.局部變量 鎖定冷卻二偏移地址二, 整數(shù)型

.局部變量 鎖定冷卻二物理地址, 整數(shù)型

鎖定冷卻二基址 = 讀內(nèi)存整數(shù)型 (進程ID, 十六到十 (“006A9F78”), )

鎖定冷卻二偏移地址一 = 讀內(nèi)存整數(shù)型 (進程ID, 鎖定冷卻二基址 + 十六到十 (“768”))

鎖定冷卻二偏移地址二 = 讀內(nèi)存整數(shù)型 (進程ID, 鎖定冷卻二偏移地址一 + 十六到十 (“144”), )

鎖定冷卻二物理地址 = 讀內(nèi)存整數(shù)型 (進程ID, 鎖定冷卻二偏移地址二 + 十六到十 (“C0”), )

寫內(nèi)存整數(shù)型 (進程ID, 鎖定冷卻二偏移地址二 + 十六到十 (“C0”), 1)

.子程序 _按鈕取消鎖定冷卻2_被單擊, , , 取消鎖定冷卻2

時鐘4.時鐘周期 = 0

.子程序 _按鈕鎖定冷卻3_被單擊, , , 鎖定冷卻3

時鐘5.時鐘周期 = 100

.子程序 _時鐘5_周期事件, , , 鎖定冷卻3時鐘事件

.局部變量 鎖定冷卻三基址, 整數(shù)型

.局部變量 鎖定冷卻三偏移地址一, 整數(shù)型

.局部變量 鎖定冷卻三偏移地址二, 整數(shù)型

.局部變量 鎖定冷卻三物理地址, 整數(shù)型

鎖定冷卻三基址 = 讀內(nèi)存整數(shù)型 (進程ID, 十六到十 (“006AA00C”), )

鎖定冷卻三偏移地址一 = 讀內(nèi)存整數(shù)型 (進程ID, 鎖定冷卻三基址 + 十六到十 (“768”))

鎖定冷卻三偏移地址二 = 讀內(nèi)存整數(shù)型 (進程ID, 鎖定冷卻三偏移地址一 + 十六到十 (“144”), )

鎖定冷卻三物理地址 = 讀內(nèi)存整數(shù)型 (進程ID, 鎖定冷卻三偏移地址二 + 十六到十 (“110”), )

寫內(nèi)存整數(shù)型 (進程ID, 鎖定冷卻三偏移地址二 + 十六到十 (“110”), 1)

.子程序 _按鈕取消鎖定冷卻3_被單擊, , , 取消鎖定冷卻3

時鐘5.時鐘周期 = 0

.子程序 _按鈕鎖定冷卻4_被單擊, , , 鎖定冷卻4

時鐘6.時鐘周期 = 100

.子程序 _時鐘6_周期事件, , , 鎖定冷卻4時鐘事件

.局部變量 鎖定冷卻四基址, 整數(shù)型

.局部變量 鎖定冷卻四偏移地址一, 整數(shù)型

.局部變量 鎖定冷卻四偏移地址二, 整數(shù)型

.局部變量 鎖定冷卻四物理地址, 整數(shù)型

鎖定冷卻四基址 = 讀內(nèi)存整數(shù)型 (進程ID, 十六到十 (“006AA00C”), )

鎖定冷卻四偏移地址一 = 讀內(nèi)存整數(shù)型 (進程ID, 鎖定冷卻四基址 + 十六到十 (“768”))

鎖定冷卻四偏移地址二 = 讀內(nèi)存整數(shù)型 (進程ID, 鎖定冷卻四偏移地址一 + 十六到十 (“144”), )

鎖定冷卻四物理地址 = 讀內(nèi)存整數(shù)型 (進程ID, 鎖定冷卻四偏移地址二 + 十六到十 (“160”), )

寫內(nèi)存整數(shù)型 (進程ID, 鎖定冷卻四偏移地址二 + 十六到十 (“160”), 1)

.子程序 _按鈕取消鎖定冷卻4_被單擊, , , 取消鎖定冷卻4

時鐘6.時鐘周期 = 0

.子程序 _按鈕鎖定冷卻5_被單擊, , , 鎖定冷卻5

時鐘7.時鐘周期 = 100

.子程序 _時鐘7_周期事件, , , 鎖定冷卻5始終事件

.局部變量 鎖定冷卻五基址, 整數(shù)型

.局部變量 鎖定冷卻五偏移地址一, 整數(shù)型

.局部變量 鎖定冷卻五偏移地址二, 整數(shù)型

.局部變量 鎖定冷卻五物理地址, 整數(shù)型

鎖定冷卻五基址 = 讀內(nèi)存整數(shù)型 (進程ID, 十六到十 (“006AA00C”), )

鎖定冷卻五偏移地址一 = 讀內(nèi)存整數(shù)型 (進程ID, 鎖定冷卻五基址 + 十六到十 (“768”))

鎖定冷卻五偏移地址二 = 讀內(nèi)存整數(shù)型 (進程ID, 鎖定冷卻五偏移地址一 + 十六到十 (“144”), )

鎖定冷卻五物理地址 = 讀內(nèi)存整數(shù)型 (進程ID, 鎖定冷卻五偏移地址二 + 十六到十 (“1B0”), )

寫內(nèi)存整數(shù)型 (進程ID, 鎖定冷卻五偏移地址二 + 十六到十 (“1B0”), 1)

.子程序 _按鈕取消鎖定冷卻5_被單擊, , , 取消鎖定冷卻5

時鐘7.時鐘周期 = 0

.子程序 _按鈕鎖定冷卻6_被單擊, , , 鎖定冷卻6

時鐘8.時鐘周期 = 100

.子程序 _時鐘8_周期事件, , , 鎖定冷卻6時鐘事件

.局部變量 鎖定冷卻六基址, 整數(shù)型

.局部變量 鎖定冷卻六偏移地址一, 整數(shù)型

.局部變量 鎖定冷卻六偏移地址二, 整數(shù)型

.局部變量 鎖定冷卻六物理地址, 整數(shù)型

鎖定冷卻六基址 = 讀內(nèi)存整數(shù)型 (進程ID, 十六到十 (“006AA00C”), )

鎖定冷卻六偏移地址一 = 讀內(nèi)存整數(shù)型 (進程ID, 鎖定冷卻六基址 + 十六到十 (“768”))

鎖定冷卻六偏移地址二 = 讀內(nèi)存整數(shù)型 (進程ID, 鎖定冷卻六偏移地址一 + 十六到十 (“144”), )

鎖定冷卻六物理地址 = 讀內(nèi)存整數(shù)型 (進程ID, 鎖定冷卻六偏移地址二 + 十六到十 (“200”), )

寫內(nèi)存整數(shù)型 (進程ID, 鎖定冷卻六偏移地址二 + 十六到十 (“200”), 1)

.子程序 _按鈕取消鎖定冷卻6_被單擊, , , 取消鎖定冷卻6

時鐘8.時鐘周期 = 0

由于是易語言寫的,比較簡單快捷,我大概說一下就好了,就是在外掛軟件啟動以后,我就讀取植物大戰(zhàn)僵尸的游戲進程ID,然后讀取陽光的物理地址,加以輸出顯示,然后在啟動窗口創(chuàng)建完畢的時候還加了一個時鐘,達到實時監(jiān)控陽光值的目的,然后設(shè)置了幾個按鈕,分別是增加陽光、鎖定陽光、鎖定冷卻時間和減少陽光、取消鎖定陽光、取消鎖定冷卻時間。下面分別來說一下幾個按鈕怎么實現(xiàn)功能的。

增加陽光

增加陽光就定義了一個全局變量,變量中獲取輸入框中的值,然后讓陽光物理地址里面的值加上輸入的值,就達到了增加陽光的目的!

減少陽光

減少陽光和增加陽關(guān)的寫法一模一樣,只不過把陽光物理地址里面的值設(shè)置為了減去輸入的值而已,這樣就達到了減少陽關(guān)的目的!

鎖定陽光

鎖定陽光我定義了一個時鐘,設(shè)置時鐘周期為999毫秒,然后設(shè)置了陽光固定值1000。當(dāng)按鈕鎖定陽光被單擊以后,就執(zhí)行這個時鐘的時鐘周期,也就是每隔999毫秒執(zhí)行一次時鐘下面的代碼,也就是執(zhí)行在陽光物理地址中改陽光的值為1000,這樣就達到了鎖定陽光的目的!

取消鎖定陽光

取消鎖定陽光其實就是把鎖定陽光這個時鐘的時鐘周期設(shè)置為0,當(dāng)取消鎖定陽光的按鈕被單擊以后,就執(zhí)行這個時鐘周期事件,時鐘下面的代碼也就不執(zhí)行了,達到了取消陽光鎖定的目的!

后面的鎖定冷卻時間和取消鎖定冷卻時間的原理和上面鎖定陽光和取消鎖定陽光的原理一樣,就不再做詳細的解釋了,因為我這里針對每個欄位的植物做了單獨的冷卻鎖定和取消鎖定,所以代碼比較長,其實在找植物冷卻時間的時候,可以配合OD,直接找到冷卻時間前面的循環(huán)干掉,這樣所有的植物欄的冷卻時間都沒了!

總結(jié)

其實不管是單機游戲也好,還是網(wǎng)絡(luò)游戲也罷,原理都一樣,只不過,可能游戲類型不同,所需要的東西也不一樣,比如射擊類游戲,就需要D3D技術(shù)來做人物透視的定位等等,這個具體的方法,可以百度參考。但是萬變不離其中,都是找內(nèi)存基址,找偏移地址。

希望大家能在文章中獲取到對自己有用的知識! 大家也可以進這個C語言編程學(xué)習(xí)群,C/C++編程學(xué)習(xí)QQ群:214574728 喜歡C/C++的三連關(guān)注走一波,謝謝支持~

關(guān)鍵詞:游戲,輔助,語言

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點擊下載Chrome瀏覽器
關(guān)閉