秘境1殺怪?jǐn)?shù)量的修改
游戲是用lua腳本處理這數(shù)據(jù)的,它存儲(chǔ)的形式其實(shí)是一個(gè)雙浮點(diǎn)數(shù),所以我們先把搜索的數(shù)值類型改為“雙浮點(diǎn)”,進(jìn)秘境后先搜索0,殺一怪后再搜索1,一般就能搜索出數(shù)值存儲(chǔ)地址。
如果想簡(jiǎn)單修改,直接修改這地址的數(shù)值就行了。我們繼續(xù)吧,要實(shí)現(xiàn)殺一只怪就能下秘境2層。繼續(xù)對(duì)此地址下斷,看誰(shuí)改寫它,最終我們能找出是以下語(yǔ)句:
lua51vc12.dll+2B10 - 89 68 04? ? ? ? ? ? ? - mov [eax+04],ebp { ebp =? 浮點(diǎn)數(shù),殺一只 +0.125 }
這是lua腳本語(yǔ)句,如果要修改它,我們應(yīng)該按共用函數(shù)的形式來(lái)處理。
通過(guò)對(duì)此語(yǔ)句下斷追蹤,我們獲悉,它是殺怪得經(jīng)驗(yàn)函數(shù)這個(gè)函數(shù)里調(diào)用的調(diào)用lua腳本

下面是調(diào)用lua腳本語(yǔ)句的具體地址:
gamesvr.exe+CD2B0 - FF 15 2C967F00? ? ? ? - call dword ptr [gamesvr.exe+18962C]?
所以第一個(gè)腳本可以是這樣:
[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)
label(flag_mjing1)? // 標(biāo)志
registersymbol(flag_mjing1)
newmem:
mov [flag_mjing1],1
originalcode:
call dword ptr [gamesvr.exe+18962C]
mov [flag_mjing1],0
exit:
jmp returnhere
flag_mjing1:
db 00 00 00 00
"gamesvr.exe"+CD2B0:
jmp newmem
nop
returnhere:
[DISABLE]
dealloc(newmem)
"gamesvr.exe"+CD2B0:
call dword ptr [gamesvr.exe+18962C]
第2個(gè)腳本:
[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)
newmem:
mov ecx,[flag_mjing1]
test ecx,ecx
je originalcode
cmp ebp,40490000? ?// 50.00 雙浮點(diǎn)的后4位的數(shù)值
jae originalcode
mov ebp,40490000
originalcode:
mov ecx,[edx+ecx*8]
mov [eax+04],ebp
exit:
jmp returnhere
"lua51vc12.dll"+2B0D:
jmp newmem
nop
returnhere:
?
[DISABLE]
dealloc(newmem)
"lua51vc12.dll"+2B0D:
mov ecx,[edx+ecx*8]
mov [eax+04],ebp
//Alt: db 8B 0C CA 89 68 04
需要注意的地方就是:
腳本的啟用順序是第1個(gè),然后是第2個(gè)
修改數(shù)量時(shí),操作的雙浮點(diǎn)數(shù),不是寫8個(gè)字節(jié),它只寫后面的4個(gè)字節(jié)