Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (byval Destination As long, byval Source As long, ByVal Length As Long)sub main() dim i as long i=&he803 copymemory &h004A9640,varptr(i),4 end sub
'读内存进程 Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten 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 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 WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, ByVal lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long '得到窗体Rect Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long '刷新窗体Rect Private Declare Function InvalidateRect& Lib "user32" (ByVal hwnd As Long, lpRect As RECT, ByVal bErase As Long) ' 关闭进程句柄 Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private Const PROCESS_ALL_ACCESS = &H1F0FFF '最高权限 Private Const xAddr As Long = &H10056A8 '横坐标地址 Private Const yAddr As Long = &H10056AC '纵坐标地址 Private Const qiAddr As Long = &H8E '选中小棋标志 Private Const mapAddr As Long = &H1005361 '数据起始地址 '0x1005340+0x20+0x01 Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End TypePrivate Const llkSM_add As Long = &H13FEB8 '生命的地址Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Const WM_LBUTTONDOWN = &H201Private Sub Command1_Click() Call Shell("winmine.exe", vbNormalFocus) End Sub Private Sub Command2_Click() Dim hProcess As Long Dim wHwnd As Long Dim pid As Long Dim lf As Long wHwnd = FindWindow(vbNullString, "扫雷") '获得窗体句柄 Call GetWindowThreadProcessId(wHwnd, pid) '取得进程标识符 hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, pid) ' 取得进程句柄 'PROCESS_ALL_ACCESS最高权限 If hProcess = 0 Then MsgBox "未找到游戏!", vbOKOnly + vbInformation Exit Sub End If Dim mx As Long Dim my As Long Dim mn As Long Dim bytMap() As Byte Call ReadProcessMemory(hProcess, ByVal xAddr, my, 4, 0&) Call ReadProcessMemory(hProcess, ByVal yAddr, mx, 4, 0&) If my = 0 Or mx = 0 Then Exit Sub ReDim bytMap(my * 32 - 1) As Byte Call ReadProcessMemory(hProcess, ByVal mapAddr, bytMap(0), my * 32, 0&) Dim I As Long, J As Long
For I = 0 To my - 1 For J = 0 To mx - 1 If bytMap(I * 32 + J) = &H8F Then '标出雷区 Call WriteProcessMemory(hProcess, ByVal (mapAddr + I * 32 + J), ByVal VarPtr(CLng(qiAddr)), 1, 0&) Else lf = SendMessage(wHwnd, WM_LBUTTONDOWN, hProcess, ByVal (mapAddr + I * 32 + J)) End If Next Print Next
Dim tR As RECT Call GetClientRect(wHwnd, tR) '得到扫雷窗口 Call InvalidateRect(wHwnd, tR, True) '刷新扫雷窗口 Call CloseHandle(hProcess) ' 关闭进程句柄 End Sub扫雷的外挂,绝对好用,里面就有怎么写入内存地址
dim i as long
i=&he803
copymemory &h004A9640,varptr(i),4
end sub
请问大侠:那个varptr(i)好像没有定义?
请教请教,谢谢先!
'读内存进程
Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten 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 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 WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, ByVal lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
'得到窗体Rect
Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
'刷新窗体Rect
Private Declare Function InvalidateRect& Lib "user32" (ByVal hwnd As Long, lpRect As RECT, ByVal bErase As Long)
' 关闭进程句柄
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Const PROCESS_ALL_ACCESS = &H1F0FFF '最高权限
Private Const xAddr As Long = &H10056A8 '横坐标地址
Private Const yAddr As Long = &H10056AC '纵坐标地址
Private Const qiAddr As Long = &H8E '选中小棋标志
Private Const mapAddr As Long = &H1005361 '数据起始地址
'0x1005340+0x20+0x01
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End TypePrivate Const llkSM_add As Long = &H13FEB8 '生命的地址Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_LBUTTONDOWN = &H201Private Sub Command1_Click()
Call Shell("winmine.exe", vbNormalFocus)
End Sub
Private Sub Command2_Click()
Dim hProcess As Long
Dim wHwnd As Long
Dim pid As Long
Dim lf As Long
wHwnd = FindWindow(vbNullString, "扫雷") '获得窗体句柄
Call GetWindowThreadProcessId(wHwnd, pid) '取得进程标识符
hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, pid) ' 取得进程句柄 'PROCESS_ALL_ACCESS最高权限
If hProcess = 0 Then
MsgBox "未找到游戏!", vbOKOnly + vbInformation
Exit Sub
End If
Dim mx As Long
Dim my As Long
Dim mn As Long
Dim bytMap() As Byte
Call ReadProcessMemory(hProcess, ByVal xAddr, my, 4, 0&)
Call ReadProcessMemory(hProcess, ByVal yAddr, mx, 4, 0&)
If my = 0 Or mx = 0 Then Exit Sub
ReDim bytMap(my * 32 - 1) As Byte
Call ReadProcessMemory(hProcess, ByVal mapAddr, bytMap(0), my * 32, 0&)
Dim I As Long, J As Long
For I = 0 To my - 1
For J = 0 To mx - 1
If bytMap(I * 32 + J) = &H8F Then
'标出雷区
Call WriteProcessMemory(hProcess, ByVal (mapAddr + I * 32 + J), ByVal VarPtr(CLng(qiAddr)), 1, 0&)
Else
lf = SendMessage(wHwnd, WM_LBUTTONDOWN, hProcess, ByVal (mapAddr + I * 32 + J))
End If
Next
Print
Next
Dim tR As RECT
Call GetClientRect(wHwnd, tR) '得到扫雷窗口
Call InvalidateRect(wHwnd, tR, True) '刷新扫雷窗口
Call CloseHandle(hProcess) ' 关闭进程句柄
End Sub扫雷的外挂,绝对好用,里面就有怎么写入内存地址
权限的什么问题 暂时还没碰到过 类似这样的操作都是拿驱动办事. 呵呵 提问之前 还是建议LZ 先搜索吧.
这样的问题 BAIDU GOOLE上 一大堆
Call GetWindowThreadProcessId(wHwnd, pid) '取得进程标识符
hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, pid) ' 取得进程句柄 'PROCESS_ALL_ACCESS最高权限 Call WriteProcessMemory(hProcess, ByVal (mapAddr + I * 32 + J), ByVal VarPtr(CLng(qiAddr)), 1, 0&) 不是写的很清楚了啊