甲壳素肥料:VB如何替换内存地址的值?

来源:百度文库 编辑:高校问答 时间:2024/05/09 09:45:10
我用CopyMemory替换内存地址的值!可是金山游侠找到的内存地址用那个API替换以后并无效果!哪位大哥能指点一下吧!

主要是使用ReadProcessMemory,WriteProcessMemory这两个函数。一个读一个写。

我这里有一段代码,自己写的,可供参考,仅供学习!
在VB.NET写通过,VB6。0应该也可以。

'API常量
Public Const PROCESS_ALL_ACCESS As Integer = 2035711
'获取连连看游戏窗口句柄
Dim QQllkhwnd As Integer
QQllkhwnd = FindWindow(vbNullString, "QQ连连看")

'判断连连看游戏是否打开
If QQllkhwnd <> 0 Then

'连连看游戏线程ID
Dim ProcessId As Integer
'根据连连看游戏窗口句柄获取对对碰游戏线程ID
l = GetWindowThreadProcessId(QQllkhwnd, ProcessId)
'判断是否获取连连看游戏线程ID
If l <> 0 Then
'根据线程ID打开连连看游戏线程
Dim hRemoteProcess As Integer = OpenProcess(PROCESS_ALL_ACCESS, CInt(True), ProcessId)
'判断是否打开连连看游戏线程
If hRemoteProcess <> 0 Then

'通过读取几个字节来看看是否是可以修改的版本
Dim check_buffer(50) As Byte
l = ReadProcessMemory(hRemoteProcess, &H40B468, check_buffer, 5, 0&)
If l = 0 Or check_buffer(0) <> &H3D Or _
check_buffer(1) <> &HC9 Or _
check_buffer(2) <> &HD5 Or _
check_buffer(3) <> &H66 Or _
check_buffer(4) <> &H1 Then

MsgBox("QQ 连连看版本不同,本程序无法处理!")

Application.Exit()

End If

'修改内存代码,让他忽略检测鼠标硬件单击

' Dim change_address As Integer = &H40B46E
' Dim change_data As String = Chr(0)

'&H40B46E为要修改的地址,chr(0) 是要改成的字节,1表示修改一个字节长度 0& 表示不用
'检测WriteProcessMemory成功写入了多少字节
l = WriteProcessMemory(hRemoteProcess, &H40B46E, Chr(0), 1, 0&)
'判断是否将指定DLL写入指定线程
If l = 0 Then
MsgBox("WriteProcessMemory错误!")
End If
CloseHandle(hRemoteProcess)
' MsgBox("注入成功!")
Else
MsgBox(" 打开线程错误!")
End If

Else
MsgBox("获取线程ID错误!")
End If
Else
MsgBox("请打开连连看游戏!然后再单击 内存补丁 按钮 ")
End If