admin管理员组

文章数量:1531791

2023年12月24日发(作者:)

这篇说说VB6/怎么快速制作游戏修改器并获得模块基址。

由于VB6不支持做64位游戏的修改器,而现在的游戏内容和容量越来越大,电脑硬件配置越来越高端。32位游戏已经满足不了现在的游戏的开发环境要求而会慢慢向64位过渡。所以用支持64位的比用VB6要方便得多。

首先是的游戏修改器制作方法。先运行,新建一个项目,,再选中新建一个窗体,再在右边的资源管理器中双击“MY Project”,进入左边选项的第二项点击进入,再点左边最下方的选项,找到并改目标程序为支持任何位数的游戏的CPU类型即可完成配置。

考虑到让小白新手和看代码如看天书的朋友方便阅读,我把定义名都改了一下,老手莫喷。以下是Windows Media Player 程序修改全代码举例,大家可以直接复制粘贴即可使用

以下为做的修改器代码,请各位自己进行更改或操作。

form上7个控件,2个textbox和3个commandbutton 和2个listbox和1个timer,以下为代码:

Public Class Form1

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal A As String, ByVal B As String) As Long

Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal A As Long, ByRef B As Long) As Long

Public Declare Function OpenProcess Lib "kernel32" (ByVal A As Long, ByVal B As Long, ByVal C As Long) As Long

Public Declare Function ReadProcessMemory Lib "kernel32" (ByVal A As Long, ByVal B As Long, ByRef C As Long, ByVal D As Long, ByVal

E As IntPtr) As Long

Public Declare Function WriteProcessMemory Lib "kernel32" (ByVal A As Long, ByVal B As Long, ByRef C As Long, ByVal D As Long, ByRef

E As IntPtr) As Long

Public myProcesses() As Process

Public myProcess As Process

Dim fw As String

Dim pid As Long

Dim hp As Long

Public Sub W(ByVal B As Long, ByVal C As Long, ByVal D As Long) '定义写入

WriteProcessMemory(hp, B, C, D, )

End Sub

Public Function R(ByVal B As Long, ByVal D As Long) As Long '定义读取

Dim Value As IntPtr

ReadProcessMemory(hp, B, Value, D, )

R = Value

End Function

'以上为定义内容,不要变动。以下为实际操作内容,红色字体部分请根据自己所需进行修改,黑色字体不用改动。

Private Sub Timer1_Tick(ByVal sender As , ByVal e As rgs) Handles

fw = FindWindow(Nothing, "Windows Media Player") '程序窗口名

GetWindowThreadProcessId(fw, pid)

hp = OpenProcess(&HFFFF, False, pid)

End Sub

Private Sub Button1_Click(ByVal sender As , ByVal e As rgs) Handles

W(&H500000, 3000, 4) 'W=写入内容(要修改的地址,3000为要修改的数值,需要改写的内存值的位数)

End Sub

Private Sub Button2_Click(ByVal sender As , ByVal e As rgs) Handles

= R(&H500000, 4) 'R=读取内容(要读取内容的地址,需要读取数值的位数)

End Sub

Private Sub Button3_Click(ByVal sender As , ByVal e As rgs) Handles

'获取模块基址

= ""

= ""

()

()

If pid <> 0 And fw <> 0 And hp <> 0 Then

fw = FindWindow(Nothing, "Windows Media Player") '程序窗口句柄名称

GetWindowThreadProcessId(fw, pid)

()

myProcesses = cesses()

For Each ess In myProcesses

(sName)

Next

()

Dim I As Integer

For I = 0 To - 1

(myProcesses(I).Id)

If (I) = pid Then

= I '窗口所得pid与对应进程位置列表的pid对应则显示出来

End If

Next

= "模块基址:" & Hex(myProcesses().Modules(0).ng())

End If

End Sub

End Class

接下来是VB6

form上5个控件,1个textbox和3个commandbutton 和1个timer,以下为代码:

Option Explicit

'定义API

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal a As String, ByVal B As String) As Long

Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal a As Long, ByRef B As Long) As Long

Private Declare Function OpenProcess Lib "kernel32" (ByVal a As Long, ByVal B As Long, ByVal C As Long) As Long

Private Declare Function CloseHandle Lib "kernel32" (ByVal a As Long) As Long

Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal a As Long, ByVal B As Long, ByRef C As Long, ByVal d As Long, ByVal E

As Long) As Long

Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal a As Long, ByVal B As Long, ByRef C As Long, ByVal d As Long, ByRef E

As Long) As Long

'定义基址

Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal a As Long, ByVal B As Long) As Long

Private Declare Function Module32First Lib "kernel32" (ByVal a As Long, B As MODULEENTRY32) As Long

Private Declare Function GetModuleFileNameExA Lib "" (ByVal a As Long, ByVal B As Long, ByVal C As String, ByVal d As Long) As

Long

'定义句柄,进程

Dim fw As Long

Dim pid As Long

Dim hp As Long

'模块快照

Private Type MODULEENTRY32

dwSize As Long

th32ModuleID As Long

th32ProcessID As Long

GlblcntUsage As Long

ProccntUsage As Long

modBaseAddr As Long

modBaseSize As Long

hModule As Long

szModule As String * 256

szExePath As String * 1024

End Type

'模块快照

Public Function GetModuleAdd(pid As Long, ModuleName As String) As Long

Dim m As MODULEENTRY32

Dim k As Long

k = CreateToolhelp32Snapshot(8, pid)

= Len(m)

Module32First k, m

GetModuleAdd = eAddr

If pid = 0 Then

GetModuleAdd = 0

End If

CloseHandle (k)

End Function

'定义写入

Public Sub W(ByVal B As Long, ByVal C As Long, ByVal d As Long)

Call WriteProcessMemory(hp, B, C, d, 0)

End Sub

'定义读取

Public Function R(ByVal B As Long, ByVal d As Long) As Long

Dim Value As Long

Call ReadProcessMemory(hp, B, Value, d, 0)

R = Value

End Function

'以下为控件操作

Private Sub Timer1_Timer()

fw = FindWindow(vbNullString, "Windows Media Player") '输入要修改的进程的窗口名

Call GetWindowThreadProcessId(fw, pid)

hp = OpenProcess(&HFFF, False, pid)

End Sub

'读取内容(地址,位数)

Private Sub Command1_Click()

= R(&H500000, 4)

End Sub

'写入内容(地址,数值,位数)

Private Sub Command2_Click()

Call W(&H500000, 3000, 4)

End Sub

'获取基址

Private Sub Command3_Click()

= "exe文件基址:" & Hex(GetModuleAdd(pid, ""))

End Sub

本文标签: 游戏内容模块基址对应