本人的CALL
在論壇混了這麼久 發一個自己找CALL的心得
有些東西,你不做就是不知道有什麼不同
以後努力,爭取做出個像樣的外掛
==========================================================================
VB學習CALL 注入,需要的工具 ODBG --動態調試工具
CE--查找記憶體工具。
最好能夠先學會用CE 查找基底位址。。。。。。。。。。。。。
然後,通過對記憶體的操作,達到某中要求 在配合CALL實現自動
常用的工具(有幾個鏈結的,自己找下)
=========================================================================
首先得有一個彙編類
第一個VB CALL 調用上面的彙編類
{用完美(大陸版本)做例子的}
第一個彙編的CALL 不會找位址,直接要了一個位址的。
主程序
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Long, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesRead As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Const PROCESS_ALL_ACCESS = &H1F0FFF
Dim pid As Long
Dim asm2 As New clsASM
'================================================================================================
'無參數的6次找到
Private Sub Command1_Click()
'打坐的CALL
Dim hWnd As Long
hWnd = FindWindow("ElementClient Window", "Element Client")
GetWindowThreadProcessId hWnd, pid
Dim asm As New clsASM
With asm
'
asm
.Pushad
'.Mov_EAX Val(Text1.Text)
.Mov_EBX &H5BB3D0
'
CALL elementc.005BB3D0
.Call_EBX
.Popad
'
popad
.Ret
End With
'
end
asm.Run_ASM pid
End Sub
第二個CALL
是在 OD堶掖q過查找第一個知道的位址
CUP介面中常數查找 ”005BB3D0“
發現是個跳轉區域,猜測 ---------可能有個站起的CALL
於是用附近的一個位址 ”005BB410“
這樣就是第二個CALL了
Private Sub Command2_Click()
'站起的CALL
Dim hWnd As Long
hWnd = FindWindow("ElementClient Window", "Element Client")
GetWindowThreadProcessId hWnd, pid
Dim asm As New clsASM
With asm
'
asm
.Pushad
'.Mov_EAX Val(Text1.Text)
.Mov_EBX &H5BB410
'CALL elementc.005BB410
.Call_EBX
.Popad
'
popad
.Ret
End With
'
end
asm.Run_ASM pid
End Sub
第三個CALL 也是無參數的 普通打怪的CALL
由於前面兩個 在OD中 我都是按6次CTR+F9得到的
我想第三個可能也是這樣的吧
這是我第一次自己找到的
步驟
先運行OD
然後在OD中打開文件”Element Client.exe"
導入之後,按F9 運行。
不一會到了遊戲登陸介面
輸入帳號、密碼 確定
然後就出現錯誤
按SHIFT+F9 忽略。。。
有錯誤就忽略
進入選角色介面
進入遊戲,又出現錯誤
又按幾個SHIFT+F9 忽略。。。
終於進入遊戲中
先在遊戲中動作幾下
找個好地方,運動幾下,然後走到怪物附近,選中怪物。
然後在OD中下斷 命令行 “bp send"[備註:封包中斷點]---本人是這樣理解的
(這個中斷點是每幾秒會斷一次的,通信用的 所以動作要快。)
下斷之後,等OD斷下,按F8 ,F9 讓遊戲運行起來(可能要多按幾次也說不定)
然後馬上進入遊戲介面,按快捷鍵”1“
這樣遊戲就被斷下(這堛`意:要是你動作了(可能怪物移動了,你要走動在打),你斷的地方可能不同)
多試幾次
然後 在0D中從中斷點開始
ctr+F9 按兩次跳出系統領空(即:OD標題上面的內容變化為Element Client)(本人這堥潀腹^
然後先嘗試 繼續按4次(+上面2次共6次)分析此處的代碼(為什麼6次,可能無參數的CALL大部分是6次吧)
發現上面有個無參數CALL 記下其調用的地址
Private Sub Command3_Click()
'-------普通打怪的CALL(快捷1)
Dim hWnd As Long
hWnd = FindWindow("ElementClient Window", "Element Client")
GetWindowThreadProcessId hWnd, pid
Dim asm As New clsASM
With asm
'
asm
.Pushad
.Mov_EBX &H5BAC70
'
CALL
.Call_EBX
.Popad
'
popad
.Ret
End With
'
end
asm.Run_ASM pid
End Sub
編程測試。。。。。。
第四個CALL 留位子 就是喊話CALL
經過兩天的測試,今天又直接要了個位址(是兩個位址)終於完成這個CALL
也知道了 CALL中基址的引用。[不能光是CALL位址還有基址]
也是第一個有參數的CALL
Private Sub Command6_Click()
'自動喊話CALL-----(ADRESS=H59AA70
W2I_BASE= 987E1C
)
Dim hWnd As Long
hWnd = FindWindow("ElementClient Window", "Element Client")
GetWindowThreadProcessId hWnd, pid
Dim SpeekBase As Long
Dim NeiRong As String
NeiRong = "組我呀,我不會組隊?"
hWnd = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
SpeekBase = VirtualAllocEx(hWnd, ByVal 0&, (Len(NeiRong) + 1) * 2, &H1000, &H40) '申請記憶體(釋放我還不會自己找代碼吧)
WriteProcessMemory hWnd, ByVal SpeekBase, ByVal StrPtr(NeiRong), (Len(NeiRong) + 1) * 2, 0&
CloseHandle hWnd
Dim asm As New clsASM
Const W2i_base = &H987E1C '---------------總基本位址
Const address = &H59AA70
'------------CALL地址
With asm
.Pushad
.Push SpeekBase
.Push 0 '(0普通,1世界,2組隊)
.Mov_EAX_DWORD_Ptr W2i_base '總基址以後自己換
.Mov_ECX_DWORD_Ptr_EAX_Add &H20
.Mov_EBX address 'CALL地址的以後自己換
.Call_EBX
.Popad
.Ret
End With
'釋放記憶體
asm.Run_ASM pid
End Sub |