VB修改游戏内存 about <红警大战2共和国之辉>
金钱地址:A1E0C4+24C 用易语言写很简单,但是写出来的程序不能装逼有木有→_→,拉进PEID吓死一大片的扫描结果,所以本屌写了这篇关于VB修改内存的教程。
说明:读者必须要会使用VB!
首先 你需要知道几个API WriteProcessMemory ;向指定进程内存地址中写入数据 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名称为 Text1 CommandButton 名称为 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 then MsgBox “1=1”,0,”提示” Else MsgBox “1<>1”,0,”提示” End if OK了 还有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=0 MsgBox “进程打开失败”,48,”警告” ‘弹出一个信息框 Else ‘否则 ‘内存写入代码编写区 End if 我们来回忆一下内存写入的过程 读取基址的值——加上偏移——得出地址——写入 那么我们先用ReadProcessMemory函数来读取
Dim hwnds as Long ‘定义名称为hwnds类型为Long的变量 hwnds=OpenProcess(2035711,0,Clng(Text1.text)) ‘打开指定进程,并返回进程句柄 If hwnds = 0 then ‘如果hwnds=0 MsgBox “进程打开失败”,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 Long Private 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 Long Private 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, 0 End If
End Sub 我画的界面如下: 代码截图 由于第一次写这类文章有什么不对的地方欢迎指出
|