戰(zhàn)士刀刀烈火的實(shí)現(xiàn)
[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)
newmem:
originalcode:
call gamesvr.exe+96EB0
push 0
push pkg
mov ecx,esi
call gamesvr.exe+77020
exit:
jmp returnhere
pkg:
db 24 00 00 00 E9 03 00 00 00 00 00 00 20 00 00 00 08 00 00 00 13 00 0A 00 06 00 07 00 00 00 00 00 00 00 00 00
"gamesvr.exe"+96381:
jmp newmem
returnhere:
gamesvr.exe+770CC:
nop 2
"gamesvr.exe"+770EA:
jmp gamesvr.exe+7715D
"gamesvr.exe"+77167:
jmp gamesvr.exe+77190
"gamesvr.exe"+771A2:
jmp gamesvr.exe+771A8
"gamesvr.exe"+7746A:
nop 6
"gamesvr.exe"+77665: //烈火CD限制1
nop 6
"gamesvr.exe"+76E72: //烈火CD限制2
jmp gamesvr.exe+76E86
[DISABLE]
dealloc(newmem)
"gamesvr.exe"+96381:
call gamesvr.exe+96EB0
//Alt: db E8 2A 0B 00 00
"gamesvr.exe"+770EA:
jae gamesvr.exe+7715D
call gamesvr.exe+8D680
//Alt: db 73 71 E8 8F 65 01 00
"gamesvr.exe"+77167:
jae gamesvr.exe+77190
mov eax,ecx
sub eax,[edi+000043E8]
//Alt: db 73 27 8B C1 2B 87 E8 43 00 00
"gamesvr.exe"+771A2:
je gamesvr.exe+771A8
cmp ecx,eax
jb gamesvr.exe+77156
//Alt: db 74 04 3B C8 72 AE
"gamesvr.exe"+7746A:
je gamesvr.exe+77156
//Alt: db 0F 84 E6 FC FF FF
"gamesvr.exe"+77665:
je gamesvr.exe+7A562
"gamesvr.exe"+76E72:
jae gamesvr.exe+76E86
push gamesvr.exe+19D1E0
//Alt: db 73 12 68 E0 D1 4A 00
gamesvr.exe+770CC:
nop 2
jne gamesvr.exe+770D7
上面是一個(gè)綜合的測試腳本,能實(shí)現(xiàn)99疊加版戰(zhàn)士刀刀自動(dòng)烈火。我以前只做過按技能鍵即能放烈火,這種自動(dòng)烈火是第一次嘗試。只因有M友(游戲修改愛好者)說,要客戶端改烈火效果才可以,我想不能是這樣吧,后面就嘗試,弄出了這個(gè)腳本。
過程不多說了,就是反復(fù)下斷追蹤代碼,多開追蹤器,比較哪里跳過去,就暴力改之。后面一長串地址改跳轉(zhuǎn),均是處理技能或烈火CD的,因?yàn)榇蠖嗵D(zhuǎn)也是其它技能所共用的,我也沒深入去做測試,所以本腳本只能說是測試用的,真正拿來玩游戲,可沒保障。
另1個(gè),自定義代碼注入地址是處理C端”砍“動(dòng)作數(shù)據(jù)包之后,這個(gè)函數(shù)也是共用函數(shù),還包括處理人物移動(dòng)等等,所以也是正常游戲不可靠的原因之二。
總之,大家以學(xué)習(xí)心態(tài)來測試吧。
我這里只著重說一下自定義代碼。
call gamesvr.exe+96EB0? ?
這是原代碼,沒什么說的,就是處理C端有關(guān)移動(dòng)或物理砍怪、挖肉之類的動(dòng)作申請。
push 0
push pkg? ? ? ? ? ? ? ?// C端發(fā)過來的指令
mov ecx,esi? ? ? ? ? ?// 人物地址
call gamesvr.exe+77020
gamesvr.exe+77020? 這個(gè)call 是游戲處理技能施放的
第2個(gè)參數(shù):?是申請放技能的時(shí)間戳(時(shí)間點(diǎn)),為0時(shí),服務(wù)器則取系統(tǒng)當(dāng)前的時(shí)間戳。
時(shí)間戳不是我們常用的多少分多少秒,而是以支行程序的電腦為準(zhǔn)備,就是每臺電腦在通電后,Cpu就產(chǎn)生一條運(yùn)行的時(shí)間線,在這”時(shí)間線“上的一個(gè)點(diǎn),就是時(shí)間戳,兩點(diǎn)時(shí)間戳就能計(jì)算出具體時(shí)長,單位是毫秒,比如判斷傳送間隔15秒? cmp eax,#15000。
第1參數(shù): 是C端發(fā)過來的數(shù)據(jù)包,已解密,大家可以仿照著自定義數(shù)據(jù)包,也可以下斷后再放技能,自己通過寄存器或堆棧瀏覽相應(yīng)地址以復(fù)制數(shù)據(jù)。上面代碼是客戶端申請放烈火的指令,所有請求或動(dòng)作,包括移動(dòng),使用物品等等,都是先向服務(wù)器發(fā)送指令申請,服務(wù)器處理有效申請后,又回饋給C端,然后C端又處理這回饋的數(shù)據(jù)包,加以修正。比如玩聯(lián)機(jī),你網(wǎng)絡(luò)不好,跑圖時(shí)經(jīng)常就會(huì)向走瞬移回去,這就是數(shù)據(jù)不匹配,給強(qiáng)行修正了,這數(shù)據(jù)是以服務(wù)器上的為準(zhǔn)的。
24 00 00 00 E9 03 00 00 00 00 00 00 20 00 00 00 08 00 00 00 13 00 0A 00 06 00 07 00 00 00 00 00 00 00 00 00
分析指令包,熟悉了可以自己依著偏移構(gòu)建:
24? ?=? 數(shù)據(jù)包總長度? 24 byte? ?記住包含 ”24“ 這個(gè) 第1個(gè)字節(jié)。
E9 03? =? 指令類別? ? ? ?這個(gè)就是放技能
20? ? ? ?=? ?人物 tag? ? ? 類似物品tag, 是全服務(wù)器區(qū)分”物體“的標(biāo)志。?
不知道tag含義的,可以去群里看看基礎(chǔ)教程視頻。
08? ? ? ?=? ?指令小類別,? 我沒記那么多,有興趣自己試
13? ? ?? = 人物橫坐標(biāo)
0A? ? ? ?=? 人物縱坐標(biāo)
06? ? ? ? = 技能編號
07? ? ? ?=? 人物的朝向? ? ? 取值范圍是 0-7? 共8個(gè)方向