想做个游戏修改器,请教用VB怎么修改游戏程序的内存?(欲修改的内存地址已知)最好有个例程。

解决方案 »

  1.   

    http://www.71wg.com/soft/3362.htm 内存修改器源代码VB 去百度搜   修改内存 vb  n多的东西
      

  2.   

    修改静态内存游戏的的用api函数,我看着教程做过一个很容易的,就是动态修改内存的不好弄,得用到指针,我也一直没弄出来。
      

  3.   

    给点分让俺也高兴高兴吧,还没得过分呢
    面以制作一个Window流行的游戏"蜘蛛纸牌"为例制作一个内存修改器一,数据的查找
    1.运行游戏,开局,这时分数是500,操作是0
    2.随便移一条牌,分数变成499,操作变为1
    3.切换到FPE2001,在"目标游戏"中输入499,开始查找
    4.新建一个任务,输入1,查找
    5.回到游戏中,,再移动一个牌,,这时分数变成498,操作变成2
    6.再次回到FPE,在第二个任务中(刚才查找1的那个)中输入2,查找
    7.在第一个任务中输入498,查找
    8.在第6步中第7步中如果找到的结果不止一个,那么回到第5步,直到结果是一个为止
    9,假设在第6步中找到的地址是1000h,第7步中的地址是2000h(后辍h表示是十六进制)二,开始制作修改器
    因为在读写内存,所以要用到如下的API,
    为了查看方便,,请把下面两条横线之间的内容复制到VB里再看Option Explicit'1.查找窗口
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    '2.取得进程ID
    Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
    '3.打开进程
    Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
    '4.把数值写入内存
    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
    '5.从内存中读取数值
    Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
    '6.关闭打开的线程句柄
    Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
    '7.一个操作内存的权力常数
    Private Const PROCESS_ALL_ACCESS = &H1F0FFF
    '以上7个项目可以从API浏览器中复制,,但可能会有一点不同,,建议复制上面的代码'8.一个保存游戏进程ID的变量
    Private hProcess As Long'下面的函数用于查找游戏
    Function FindGame() As Boolean
    Dim PID As Long, Gamehwnd As Long
    FindGame = False
    Gamehwnd = FindWindow(vbNullString, "蜘蛛") '查找游戏的句柄
    If (Gamehwnd = 0) Then Exit Function '如果找不到(例如游戏未运行)就退出函数
    GetWindowThreadProcessId Gamehwnd, PID '取得进程ID
    hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, PID) '以全部权力打开进程
    If (hProcess = 0) Then Exit Function '打开进程失败
    FindGame = True '成功!!
    End Function
    '回到VB的窗口设计模式,按如下的图布置好控件
     
    '把Commmand1,Command2的Caption分别改为 读取 和 写入
    '把Text1的Text设为空白
    '下面的功能只能改分数,,如要改操作步数,,请自行尝试
    Private Sub Command1_Click()
    Dim retV%, r&
    'Dim retV%, r&=Dim retV As Integer, r As Long
    If FindGame Then
    r = ReadProcessMemory(hProcess, &H1000, retV, 2, 0)'参数说明
    'hProcess就是刚才打开的进程ID
    '&H1000就是刚才找到的分数的地址,注意十六进制在VB里的写法
    'retV用来接受从内存中读得的数值
    '2是表示读两个字节
    '0是什么??我也不清楚,反正设为0就是了If r = 0 Then
    MsgBox "读取内存不成功!"
    Else
    Text1 = retV
    End If
    End If
    End SubPrivate Sub Command2_Click()
    Dim r&
    If FindGame Then
    r = WriteProcessMemory(hProcess, &H1000, CInt(Val(Text1)), 2, 0)
    '参数与上面的基本相同
    'cInt(Val(Text1))是防止输入的过程有误,,例如,输入了字母,,如果不处理程序就会出错
    If r = 0 Then
    MsgBox "写内存不成功!"
    Else
    MsgBox "OK"
    End If
    End If
    End Sub回到游戏,,随便移动一张牌看看!用VB做修改器就这么简单!
      

  4.   

    使用API:先用“OpenProcess”打开进程;
    再用“VirtualProtect”修改权限;'-----------特别重要------------。
    用“ReadProcessMemory”读出内存的值;
    再用“WriteProcessMemory”改写内存的值;
    再用“VirtualProtect”恢复权限;
    再用“CloseHandle”关闭句柄。
      

  5.   

    guoyangyisuan(过氧乙酸) 的超级傻瓜教程对我太合适了,十万分的感谢!!!要的就是这个^-^