冰楓論壇
標題:
技能注入call求助
[打印本頁]
作者:
ningmeng
時間:
2021-11-8 01:22
標題:
技能注入call求助
上個版本有位大大新發布了一個新的技能注入的方法,但注入之後是普攻,所以我嘗試去分析他
其中有一段
call 0311ECC0
mov ebx,[eax+04]
mov ecx,[04386E60]
lea eax,[esp-0C]
push 01
push 00
push 00
push 00
push eax
push [skillid]
mov [esp-0C],00000000
push ebx
call 00A11BC0
.....省略
我認為是從這段遊戲的源碼改寫的
call 0311ECC0
cmp dword ptr [ebp-0C],00
mov eax,[eax+04]
mov [ebp-08],eax
........省略
mov ecx,[04386E60]
lea eax,[ebp-04]
push 01
push 00
push 00
push 00
push eax
mov eax,[ebp+08]
mov [ebp-04],00000000
push [eax]
push [ebp-08]
call 00A11BC0
......省略
我在想是否是技能id沒寫進去
TWMS 222.2
Label1:
mov dword ptr [edi+00016660],技能代碼
//------------------------------------
mov ecx,[03DCF220]
lea eax,[temp+10]
push 01
push 00
push 00
push 00
push eax
push [edi+00016660]
mov [temp+10],00000000
push [temp+08]
call 0084ECF0
結合以前版上的歷史數據,我嘗試修改
mov eax,[skillid]
mov dword ptr [edi+000130E4],eax
push [edi+000130E4]
發現還是普攻,那麼就不是id沒push進去的問題。
我試著將原有的寫法,改為我認為應該是遊戲調用的寫法,但遊戲一下閃退了。
花了一段時間,我嘗試去辨認,push進去的其它值
lea eax,[esp-0C]
push 01
push 00
push 00
push 00
push eax
push [skillid]
mov [esp-0C],00000000
push ebx // 我认为是正确的
call 00A11BC0
那麼問題應該是在[esp-0C]這裡
我想求助的是
,我是否是往正確的方向上走,注入之後普攻的問題是否是[esp-0C],注入之後是普攻的問題是什麼導致的?
作者:
麗麗
時間:
2021-11-8 09:00
本帖最後由 麗麗 於 2021-11-8 09:02 編輯
是的,我这边游戏没更新,只能给你个老版本的 更新下就可以用了
这个是根据yutsaihsieh大佬 222版本发的那个写的,hook点是随便找了个游戏中会运行到的api
// TwMS v237.1 ICS SkillInjection
[ENABLE]
Alloc(SkillInjection_ICS_ForwardTable,1024)
Alloc(temp,128)
RegisterSymbol(SkillInjectionSW)
Alloc(SkillInjectionSW,4)
RegisterSymbol(SkillInjectionDelay)
Alloc(SkillInjectionDelay,4)
RegisterSymbol(Skill_Injection_ID_List)
Alloc(Skill_Injection_ID_List,64)
RegisterSymbol(LastSkillID)
Alloc(LastSkillID,4)
Alloc(Timer,4)
Alloc(Count,4)
RegisterSymbol(Count)
Alloc(Skill_Injection_ID_Counter,4)
RegisterSymbol(Skill_Injection_ID_Counter)
Label(InitSkillInjection)
Label(SkillInjection_ICS)
Label(Chk_Status)
Label(SkillInjection)
Label(L1)
Label(SkillInjectionExit)
//--------------------------------------------------------------------------------//
Skill_Injection_ID_List:
//dd skillid below
dd 01E84BF6 // 32001014 死神
dd 01E9CEAA // 32100010 死神契約I
dd 01E9F5C1 // 32110017 死神契約II
dd 01EA1CD3 // 32120019 死神契約III
dd 00 //end of list
//--------------------------------------------------------------------------------//
SkillInjectionDelay:
DD 28
SkillInjectionSW:
DD 1
Timer:
DD 0
Skill_Injection_ID_Counter:
DD 0
temp:
DD 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
SkillInjection_ICS_ForwardTable:
cmp [esp],01A8A868
jne USER32.ScreenToClient
cmp [SkillInjectionSW],01
jne USER32.ScreenToClient
mov [esp],SkillInjection_ICS
jmp USER32.ScreenToClient
InitSkillInjection:
cmp dword ptr [eax],0
je SkillInjectionExit
add eax,4
inc [Skill_Injection_ID_Counter]
jmp InitSkillInjection
SkillInjection_ICS:
pushad
mov eax,Skill_Injection_ID_List
cmp [Skill_Injection_ID_Counter],0
je InitSkillInjection
//------------------------------------//
Chk_Status:
mov eax,[041F8D30]
test eax,eax
je SkillInjectionExit
mov eax,[050C3978]
mov [LastSkillID],eax
mov eax,[050BD6A0]
cmp [eax+4],2
jg SkillInjectionExit
mov eax,[050BCAD0]
mov eax,[eax+14]
mov eax,[eax+000191D8+40]
cmp eax,1
jl SkillInjectionExit
call 02E11170
mov edx,eax
sub edx,[Timer]
cmp edx,[SkillInjectionDelay]
jl SkillInjectionExit
mov [Timer],eax
mov ecx,[Skill_Injection_ID_Counter]
mov [Count],ecx
jmp SkillInjection
//------------------------------------//
SkillInjection:
mov dword ptr [temp+08],00000000
mov dword ptr [temp+10],00000000
//------------------------------------
mov edi,[041F8D30]
mov ecx,[041F8A3C]
lea eax,[temp]
push eax
call 03044850
cmp dword ptr [temp+04],00
mov eax,[eax+04]
mov [temp+08],eax
je L1
push 00
lea ecx,[temp]
call 00492F70
mov [temp+04],00000000
//------------------------------------
L1:
mov ecx,[Count]
dec ecx
mov ecx,[Skill_Injection_ID_List+ecx*4]
mov dword ptr [edi+00012368],ecx
//------------------------------------
mov ecx,[041F8A38]
lea eax,[temp+10]
push 01
push 00
push 00
push 00
push eax
push [edi+00012368]
mov [temp+10],00000000
push [temp+08]
call 009F1E50
//------------------------------------
push 00
push 00
push 00
push 00
push 00
push 00
push 01
push 00
push 00
push 00
push 00
push 00
push 00
push 00
push 00
push 00
push 00
push 00
push eax
push [temp+10]
mov ecx,edi
call 02C4D840
mov [edi+00012368],00000000
dec [Count]
cmp [Count],0
jne SkillInjection
//------------------------------------
SkillInjectionExit:
popad
jmp 01A8A868
050BF274:
DD SkillInjection_ICS_ForwardTable
[DISABLE]
050BF274:
DD USER32.ScreenToClient
複製代碼
作者:
ningmeng
時間:
2021-11-9 01:45
讓來我試著回答我之前的問題,之前那位大大發的寫法有一點小問題,所以注入之後才會變成普攻。
既然之前的入參是 [esp - 14] , 那麼後面就不應該寫[esp - 0C],而是[esp - 04],並且沒有往edi中放入技能id,導致最後一個call push進去的edi裡面的技能id為0,所以最後打出來是普攻。
收穫還是很多,技能注入不會有一個標準的寫法,它可以hook任何api調用,或者更極端一點可以寫個線程調用,可以控制它的調用頻率或使用技能次數,並不是固定地一秒33次,而可以是更多次。
push 00
push 00
push 00
push 00
push 00
push 00
push ? ?
push 00
push 00
push 00
push ? ?
push? ?
push 01
push 00
push 00
push 00
push 00
push 00
push ecx
push edx
mov ecx,edi
遊戲裡的源碼,問號的地方都是沒有固定值的,可以填一些別的值,也是很有趣的一個地方。
此貼終結
作者:
ningmeng
時間:
2021-11-10 22:35
更新一下我的错误,堆栈里保存的第一个出参,和第二个出参的位置间隔是8,所以,在push进call里的时候,两个数字相差8即可,需要保证保存出参的内存的干净,然后将skill放进edi即可
作者:
v168
時間:
2021-11-10 22:56
ningmeng 發表於 2021-11-10 22:35
更新一下我的错误,堆栈里保存的第一个出参,和第二个出参的位置间隔是8,所以,在push进call里的时候,两 ...
分析的很詳細,可惜我還是更新不出來
歡迎光臨 冰楓論壇 (https://bingfong.com/)
Powered by 冰楓