VB6.0制作游戏内存修改器【标题一定要长不然没人看→_→】
VB修改游戏内存 about <红警大战2共和国之辉>金钱地址:A1E0C4+24C用易语言写很简单,但是写出来的程序不能装逼有木有→_→,拉进PEID吓死一大片的扫描结果,所以本屌写了这篇关于VB修改内存的教程。
说明:读者必须要会使用VB!
首先你需要知道几个APIWriteProcessMemory ;向指定进程内存地址中写入数据ReadProcessMemory ;从指定进程内存地址中读取数据OpenProcess ;打开一个进程,返回进程的进程句柄
VB6.0中声明如下:‘注意:ReadProcessMemory函数和WriteProcessMemory函数的声明和API浏览器中的有所不同附注:ByVal关键字表示形参,ByRef关键字表示实参(易语言的传址,相当于传递过去了一个指针)
Private Declare Function WriteProcessMemory Lib "kernel32" Alias "WriteProcessMemory" (ByVal hProcess As Long,ByVal lpBaseAddress As Long, ByRef lpBuffer As Long, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long ‘Private关键字用来声明一个窗体级别的API,也可以使用Public关键字来声明一个全局API,但是需要把声明放进模块中。
Private Declare Function ReadProcessMemory Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Long,ByVal lpBaseAddress As Long, ByRef lpBuffer As Long, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" Alias "OpenProcess" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long声明截图如下(局部截图,因为我没有换行)接下来我们要开始漫漫编程之路了。我们先在窗体上画出几个控件一个TextBox(易语言中的编辑框) 和一个 CommandButton(易语言中的按钮)TextBox用来让用户输入游戏的进程PID(我承认我懒了,不会自己写个取进程PID函数),按钮用来控制写入内存TextBox名称为 Text1CommandButton 名称为 Command1先了解几个VB函数\关键字Clng 将指定类型强制转换为Long类型(易语言的到整数()) 语法:Clng(“123”) 把string类型(易语言的文本型)”123”数据转为long数据类型的123(易语言的整数型)MsgBox 显示一个消息框(易语言的信息框()) 语法:MsgBox “内容”,0,”标题”Dim (关键字) 定义一个变量 语法 : Dim i as long (Dim 变量名 as 数据类型) 定义一个名称为i类型为long的变量If .... Else ....条件控制语句 语法If 1=1 thenMsgBox “1=1”,0,”提示”ElseMsgBox “1<>1”,0,”提示”End ifOK了还有1个事件要知道Click (被单击时触发该事件)双击你在界面上画好的CommandButton即可进入该事件的代码编写区现在我们在这个事件里面开始写代码首先声明一个Long类型变量用来储存进程句柄Dim hwnds as Long ‘定义名称为hwnds类型为Long的变量hwnds=OpenProcess(2035711,0,Clng(Text1.text)) ‘打开指定进程,并返回进程句柄然后我们最好加上判断进程打开成功与否的代码Dim hwnds as Long ‘定义名称为hwnds类型为Long的变量hwnds=OpenProcess(2035711,0,Clng(Text1.text)) ‘打开指定进程,并返回进程句柄If hwnds = 0 then ‘如果hwnds=0MsgBox “进程打开失败”,48,”警告” ‘弹出一个信息框Else ‘否则‘内存写入代码编写区End if我们来回忆一下内存写入的过程读取基址的值——加上偏移——得出地址——写入那么我们先用ReadProcessMemory函数来读取
Dim hwnds as Long ‘定义名称为hwnds类型为Long的变量hwnds=OpenProcess(2035711,0,Clng(Text1.text)) ‘打开指定进程,并返回进程句柄If hwnds = 0 then ‘如果hwnds=0MsgBox “进程打开失败”,48,”警告” ‘弹出一个信息框Else ‘否则‘内存写入代码编写区Dim base as Long ‘定义整数型变量储存基址Dim second as Long ‘定义整数型变量储存最终地址ReadProcessMemory hwnds,10608836, base, 4, 0 ‘10608836是A1E0C4的十进制Second=base + 588 ‘588是24C的十进制WriteProcessMemory hwnds,second,1000000,4,0 ‘写入内存End if下面贴出完整代码Private Declare Function ReadProcessMemory Lib "kernel32.dll" (ByVal hProcess As Long, ByVal lpBaseAddress As Long, ByRef lpBuffer As Long, ByVal nSize As Long, ByVal lpNumberOfBytesWritten As Long) As LongPrivate Declare Function WriteProcessMemory Lib "kernel32.dll" (ByVal hProcess As Long, ByVal lpBaseAddress As Long, ByRef lpBuffer As Long, ByVal nSize As Long, ByVal lpNumberOfBytesWritten As Long) As LongPrivate Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Option Explicit
Private Sub Command1_Click()
Dim hwnds As Long hwnds = OpenProcess(2035711, 0, CLng(Text1.Text))If hwnds = 0 Then MsgBox "进程打开失败!", 48, 0 Else Dim base As Long Dim second As Long ReadProcessMemory hwnds, 10608836, base, 4, 0 second = base + 588 WriteProcessMemory hwnds, second, 1000000, 4, 0End If
End Sub我画的界面如下:代码截图由于第一次写这类文章有什么不对的地方欢迎指出
小手一抖沙发到手
好骚气,学习了
学习了{:5_189:}
霸气。谢谢楼主!!学习了。
VB大神,膜拜!!
这个感觉不错,膜拜大神啊!
好像很早就有了吧?
情哥 发表于 2015-5-9 19:03
好像很早就有了吧?
然而你可以随便去网上找找看VB修改内存的教程,很多都是误导新手→_→
谢谢楼主,学习了
这个可以局域网么?