主頁 > 知識庫 > Seraph 內(nèi)存搜索

Seraph 內(nèi)存搜索

熱門標(biāo)簽:呼叫中心市場需求 地方門戶網(wǎng)站 鐵路電話系統(tǒng) 網(wǎng)站排名優(yōu)化 AI電銷 服務(wù)外包 百度競價(jià)排名 Linux服務(wù)器
一般情況下,為了應(yīng)付游戲的動態(tài)內(nèi)存地址,我們用基址的方式來讀取內(nèi)存,不過前提是可以知道基址。有的游戲,基址是很難分析到的,而且很多游戲加了隱藏和變換,搞的分析起來特別復(fù)雜。這個時候,借助Seraph,我們可以用另一種方式——搜索內(nèi)存。

雖然找不出基址,但是我們可以很輕松的找到一些我們想要的數(shù)據(jù)的直接地址。比如我們在一次游戲的運(yùn)行里,可以用CE找到血的地址是H900010, 血最大值的地址是H900014,MP地址H900020,最大MPH900024。

雖然下一次游戲運(yùn)行時,這些地址都會變,但是我們知道,這些地址互相間的相對地址偏移是不變的。也就是說最大血地址=血地址+4,MP地址=血地址+H10
這樣我們就可以搜索了。舉個例子,我們知道我們的血/最大血/MP/最大MP分別是8000/8000/12000/12000。那么在腳本里,告訴Seraph的內(nèi)存搜索引擎,我們要搜索一個地址,它的值是8000,這個地址+4的值也是8000,這個地址+H10和+H14的值是12000。這樣的地址,一般在游戲里只有一個。
怎么搜索呢?
復(fù)制代碼 代碼如下:

ClearSearchMemoryTable()
AddSearchMemoryItem(H900010, 2, 8000)
AddSearchMemoryItem(H900014, 2, 8000)
AddSearchMemoryItem(H900020, 2, 12000)
AddSearchMemoryItem(H900024, 2, 12000)
if SearchMemory(H000000, Address) then
Print("找到地址:"Address)
end if


注意,以上代碼里,我們調(diào)用AddSearchMemoryItem函數(shù)來設(shè)置一些我們要搜索的條件。
第一個參數(shù)是每個值的地址。不用擔(dān)心這個地址在下一次游戲運(yùn)行時不正確,Seraph搜索只關(guān)心所有添加的搜索項(xiàng)之間的“相對地址”。
第二個參數(shù)是指定類型,2代表四字節(jié)整型。我們同樣可以添加雙字節(jié),浮點(diǎn)數(shù),以及字符串等不同類型。詳見幫助手冊。
第三個參數(shù)就是這個搜索項(xiàng)的值。你必須填入這個數(shù)據(jù)的當(dāng)前值,如果填錯了,就搜不到了。(關(guān)于怎么在腳本里指定當(dāng)前的用于搜索的值,我們之后講)
注意,第一行的ClearSearchMemoryTable()是用于清除上一次添加的搜索項(xiàng)。重新開始一次搜索前我們都要調(diào)一上這個函數(shù)。
添加完了這4個搜索項(xiàng)以后,我們用SearchMemory開始搜索。第一個參數(shù)表示搜索的開始值,我們一般都可以用H000000。第二個參數(shù)值用于返回搜索到的結(jié)果。
搜到的結(jié)果就是第一個搜索項(xiàng)的地址,也就是當(dāng)前血的地址。我們可以保存這個地址,用ReadMemory隨時去讀數(shù)據(jù)。

那么,整體的流程應(yīng)該是:
1. 在參數(shù)設(shè)置里,我們添加一些參數(shù),用于填入搜索的數(shù)據(jù)。告訴用戶在腳本開始前,先設(shè)置這些數(shù)據(jù)。比如,填入自己的血,MP,并在紅藍(lán)滿的時候開始腳本。
2. 在腳本一開始,用GetConfigNumber等函數(shù)取出設(shè)置的值,用以上代碼搜索內(nèi)存,把得到的數(shù)據(jù)保存下來
3. 在腳本運(yùn)行中,用保存下的地址,加上各種我們已經(jīng)知道的偏移量,隨時讀取各項(xiàng)數(shù)據(jù)的值。

小技巧:

怎樣添加搜索項(xiàng)才可以最方便準(zhǔn)確的搜索到我想要的那個唯一的內(nèi)存地址?
當(dāng)然是與角色越相關(guān)越好的。比如角色的各項(xiàng)屬性值。使用更多的搜索項(xiàng)可以有效的防止搜索的不準(zhǔn)確(即搜到不止一個地址),但是也會帶來每次啟動腳本時的麻煩,因?yàn)槲覀儐訒r都要設(shè)置一下搜索值。建議用一些不經(jīng)常變的值,比如,等級,攻擊值等,只有升了級才會變。而血值是經(jīng)常變的。
同時,根據(jù)我們的經(jīng)驗(yàn),角色名字是很好的一個搜索項(xiàng)。如果我們可以分析到角色名字的地址,加在搜索項(xiàng)里(字串型),一般就可以很準(zhǔn)確的搜索到結(jié)果。
一般的游戲角色名是UTF8形式的。我們可能要先將角色名用GBToUTF8函數(shù)轉(zhuǎn)換成UTF8編碼的字串,再用AddSearchMemoryItem添加。

如果有時候我們添加的數(shù)項(xiàng)不夠,或者我們在調(diào)試自己腳本的時候,會搜索到不同的內(nèi)存地址,我們想讓腳本全部輸出,怎么辦?
復(fù)制內(nèi)容到剪貼板
代碼:
AddSearchMemoryItem(...)
AddSearchMemoryItem(...)
...
Address=0
while SearchMemory(Address+1, Address)
  Print("找到地址:"Address)
wend
原理就是從0開始,每搜索到一個地址,先輸出,然后從這個地址+1繼續(xù)往下搜,一直到搜不到為止。

標(biāo)簽:黃山 銅川 蘭州 衡水 仙桃 湖南 崇左 湘潭

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Seraph 內(nèi)存搜索》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266