- 浏览: 467141 次
- 性别:
- 来自: 广州
-
最新评论
-
lhgyy00:
很好,回去好好研究下,3Q
博客资源与博客工具大全 -
ljl.java:
♦
你会遇到几段恋情?很准的哦~ -
ljl.java:
♦
你会遇到几段恋情?很准的哦~ -
jzzwy:
你这个red5是什么版本 Iterator<IConne ...
red5获取在线用户列表 -
81365341:
看着标题“red5配置详解”点进来的,结果没看到一句和配置有关 ...
red5配置详解
一 模块代码
复制内容到剪贴板
代码:
Option Explicit
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Const PROCESS_ALL_ACCESS = &H1F0FFF '参数决定了对进程的存储权限,使用完全控制
Public Declare Function ReadProcessMemory Lib "kernel32.dll" ( _
ByVal hProcess As Long, _
ByVal lpBaseAddress As Long, _
ByRef lpBuffer As Any, _
ByVal nSize As Long, _
ByRef lpNumberOfBytesWritten As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
二 窗体代码
复制内容到剪贴板
代码:
Option Explicit
Dim Hwd As Long '存放窗体句柄
Dim pid As Long '存放进程ID
Dim hProcess As Long '存放进程句柄
Dim H As Long '存放二级指针
Dim buffer As Long '存放一级指针
Dim HP As Integer '存放血量
Dim MP As Integer '存放魔法值
Dim JY As Integer '存放经验值
Dim MaxMp As Integer '存放魔法上限
Dim MaxHp As Integer '存放血量上限
Dim DJ As Integer '人物等级
Private Sub Form_Load()
Hwd = FindWindow(vbNullString, "Element Client") '读取HWND
If Hwd = 0 Then
MsgBox "游戏未运行!!!!!", , "游戏未运行"
End If
GetWindowThreadProcessId Hwd, pid '获取进程标识符
hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, pid) '将进程标识符做为参数,返回目标进程PID的句柄,得到此句柄后即可对目标进行读写操,PROCESS_ALL_ACCESS表示完全控制,权限最大
If hProcess = 0 Then
MsgBox "不能打开进程!!!!!", , "打开进程错误"
Exit Sub
End If
HwdLab.caption=”游戏窗体句柄:” & Hwd
PidLab.caption=”游戏进程ID:” & Pid
ProLab.caption=”游戏进程句柄:” & hProcess ‘这几句,我是为了自己调试用的,方 便随时了解一些信息的
buffer = Val(Text1.Text) '赋值初始化一级指针,这是我自己电脑上找到的,所以就不贴 出来了,可能每个人的都不同吧~我是直接把
End Sub
Private Function ncnr(lpADDress As Long) As Long ' 声明一些需要的变量,注意类型必须为LONG,偶开始在网上找回来的时候,是Integer的,试了半天都通不过~~~~后来改了这才通过的~~原因就是 Integer的数值容量太少,内存中存的溢出了
Dim hwnd As Long ' 储存 FindWindow 函数返回的句柄
Dim pHandle As Long ' 储存进程句柄
hwnd = FindWindow(vbNullString, "Element Client") ' 取得进程标识符,双开的话最好把"Element Client"用变量代替,这样方便更改窗体后直接用
GetWindowThreadProcessId hwnd, pid ' 使用进程标识符取得进程句柄
pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid) ' 在内存地址中读取数据
ReadProcessMemory pHandle, lpADDress, ByVal VarPtr(ncnr), 4, 0& ' 关闭进程句柄
CloseHandle hProcess ‘记得一定要释放内存,不然,呵呵,你等着VB崩溃吧
End Function
Private Sub Timer1_Timer() ‘我设的interval是100
H = ncnr(buffer) '读内存得到一级指针
AzhiZen.caption=Hex(H) ‘方便自己直观的看内存变化
H = ncnr(H + 36) '读内存得到二级,+号后面的数值是偏移量十六进制24转成十进制的数,以下都相同
BzhiZen,caption=Hex(H) ‘方便自己直观的看内存变化
HP = ncnr(H + 596) '得到血量值
MP = ncnr(H + 600) '得到魔法值
JY = ncnr(H + 604) '得到经验值
MaxMp = ncnr(H + 624) '得到魔法上限
MaxHp = ncnr(H + 620) '得到血量上限
DJ = ncnr(H + 588) '得到人物等级
HPLab.Caption = "人物血量值: " & HP & " / " & MaxHp
MPlab.Caption = "人物魔法值: " & MP & " / " & MaxMp
JYlab.Caption = "人物经验值: " & JY & " / " & "暂时未知"
DJlab.Caption = "人物等级数: " & DJ & " 级"
End Sub
个人认为,难就在ReadProcessMemory pHandle, lpADDress, ByVal VarPtr(ncnr), 4, 0&这里,偶试了好久,才弄明白
我的理解如下:
Public Declare Function ReadProcessMemory Lib "kernel32.dll" ( _
ByVal hProcess As Long, _ ‘游戏进程句柄,也就是上面找到的hProcess,一定要是LONG型
ByVal lpBaseAddress As Long, _’不用讲了,你需要读取的内存地址
ByRef lpBuffer As Any, _’API解释是缓存区,偶简单的认为就是说你要设一个变量,作为读取出指定地址lpBaseAddress里的内容后的存放地方,其实这句最好改为 ByVal lpBuffer As long来用,所以,你直接声明一个变量dim xxx as long ,然后直接在这里填XXX就行了
ByVal nSize As Long, _需读取的字节数,偶是用的4字节
ByRef lpNumberOfBytesWritten As Long) As Long ‘作用不明,看到大家都是用的0&
呵呵,水平不高,见谅~~~~~有错的地方大家指教
其它数值正在查找中,怪物血条是找到了,可是找不到它的一级指针,他每次用三个指针来表示,在游戏中一直不变,当你小退后再回来,全变了,正在用OD调试中~~~~~~~~~
偶找到的一级指针是:&H008BC2A4,
各偏移量
红:指针+&H254
蓝:指针+&H258
经验"指针+&H25C
等级:指针+&H24C
蓝上限:指针+&H270
红上限:指针+&H26C
代码段在内存中好像是0454xxxx那块,都连在一起
还有两个+268,+260,不知道作什么用的,返回值是0
复制内容到剪贴板
代码:
Option Explicit
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Const PROCESS_ALL_ACCESS = &H1F0FFF '参数决定了对进程的存储权限,使用完全控制
Public Declare Function ReadProcessMemory Lib "kernel32.dll" ( _
ByVal hProcess As Long, _
ByVal lpBaseAddress As Long, _
ByRef lpBuffer As Any, _
ByVal nSize As Long, _
ByRef lpNumberOfBytesWritten As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
二 窗体代码
复制内容到剪贴板
代码:
Option Explicit
Dim Hwd As Long '存放窗体句柄
Dim pid As Long '存放进程ID
Dim hProcess As Long '存放进程句柄
Dim H As Long '存放二级指针
Dim buffer As Long '存放一级指针
Dim HP As Integer '存放血量
Dim MP As Integer '存放魔法值
Dim JY As Integer '存放经验值
Dim MaxMp As Integer '存放魔法上限
Dim MaxHp As Integer '存放血量上限
Dim DJ As Integer '人物等级
Private Sub Form_Load()
Hwd = FindWindow(vbNullString, "Element Client") '读取HWND
If Hwd = 0 Then
MsgBox "游戏未运行!!!!!", , "游戏未运行"
End If
GetWindowThreadProcessId Hwd, pid '获取进程标识符
hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, pid) '将进程标识符做为参数,返回目标进程PID的句柄,得到此句柄后即可对目标进行读写操,PROCESS_ALL_ACCESS表示完全控制,权限最大
If hProcess = 0 Then
MsgBox "不能打开进程!!!!!", , "打开进程错误"
Exit Sub
End If
HwdLab.caption=”游戏窗体句柄:” & Hwd
PidLab.caption=”游戏进程ID:” & Pid
ProLab.caption=”游戏进程句柄:” & hProcess ‘这几句,我是为了自己调试用的,方 便随时了解一些信息的
buffer = Val(Text1.Text) '赋值初始化一级指针,这是我自己电脑上找到的,所以就不贴 出来了,可能每个人的都不同吧~我是直接把
End Sub
Private Function ncnr(lpADDress As Long) As Long ' 声明一些需要的变量,注意类型必须为LONG,偶开始在网上找回来的时候,是Integer的,试了半天都通不过~~~~后来改了这才通过的~~原因就是 Integer的数值容量太少,内存中存的溢出了
Dim hwnd As Long ' 储存 FindWindow 函数返回的句柄
Dim pHandle As Long ' 储存进程句柄
hwnd = FindWindow(vbNullString, "Element Client") ' 取得进程标识符,双开的话最好把"Element Client"用变量代替,这样方便更改窗体后直接用
GetWindowThreadProcessId hwnd, pid ' 使用进程标识符取得进程句柄
pHandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid) ' 在内存地址中读取数据
ReadProcessMemory pHandle, lpADDress, ByVal VarPtr(ncnr), 4, 0& ' 关闭进程句柄
CloseHandle hProcess ‘记得一定要释放内存,不然,呵呵,你等着VB崩溃吧
End Function
Private Sub Timer1_Timer() ‘我设的interval是100
H = ncnr(buffer) '读内存得到一级指针
AzhiZen.caption=Hex(H) ‘方便自己直观的看内存变化
H = ncnr(H + 36) '读内存得到二级,+号后面的数值是偏移量十六进制24转成十进制的数,以下都相同
BzhiZen,caption=Hex(H) ‘方便自己直观的看内存变化
HP = ncnr(H + 596) '得到血量值
MP = ncnr(H + 600) '得到魔法值
JY = ncnr(H + 604) '得到经验值
MaxMp = ncnr(H + 624) '得到魔法上限
MaxHp = ncnr(H + 620) '得到血量上限
DJ = ncnr(H + 588) '得到人物等级
HPLab.Caption = "人物血量值: " & HP & " / " & MaxHp
MPlab.Caption = "人物魔法值: " & MP & " / " & MaxMp
JYlab.Caption = "人物经验值: " & JY & " / " & "暂时未知"
DJlab.Caption = "人物等级数: " & DJ & " 级"
End Sub
个人认为,难就在ReadProcessMemory pHandle, lpADDress, ByVal VarPtr(ncnr), 4, 0&这里,偶试了好久,才弄明白
我的理解如下:
Public Declare Function ReadProcessMemory Lib "kernel32.dll" ( _
ByVal hProcess As Long, _ ‘游戏进程句柄,也就是上面找到的hProcess,一定要是LONG型
ByVal lpBaseAddress As Long, _’不用讲了,你需要读取的内存地址
ByRef lpBuffer As Any, _’API解释是缓存区,偶简单的认为就是说你要设一个变量,作为读取出指定地址lpBaseAddress里的内容后的存放地方,其实这句最好改为 ByVal lpBuffer As long来用,所以,你直接声明一个变量dim xxx as long ,然后直接在这里填XXX就行了
ByVal nSize As Long, _需读取的字节数,偶是用的4字节
ByRef lpNumberOfBytesWritten As Long) As Long ‘作用不明,看到大家都是用的0&
呵呵,水平不高,见谅~~~~~有错的地方大家指教
其它数值正在查找中,怪物血条是找到了,可是找不到它的一级指针,他每次用三个指针来表示,在游戏中一直不变,当你小退后再回来,全变了,正在用OD调试中~~~~~~~~~
偶找到的一级指针是:&H008BC2A4,
各偏移量
红:指针+&H254
蓝:指针+&H258
经验"指针+&H25C
等级:指针+&H24C
蓝上限:指针+&H270
红上限:指针+&H26C
代码段在内存中好像是0454xxxx那块,都连在一起
还有两个+268,+260,不知道作什么用的,返回值是0
发表评论
-
TEA算法的VB实现代码的使用说明
2008-12-30 11:28 1948自从公开了TEA算法的VB代码之后一直有人追问我如何调用这两个 ... -
TEA算法的VB实现代码
2008-12-30 11:02 1658前些日子不少人都要挂QQ,有客户需求就自然有人去研究,所以不少 ... -
QQ通讯协议
2008-12-30 10:56 4210协议说明: 协议由报文� ... -
hoxede的QQ填充算法和TEA 加解密的python实现
2008-12-30 10:31 2921""" The MIT Lic ... -
如何从 Visual Basic 中调用 GetNetworkParams / GetAdapter
2008-12-30 09:52 17351. 启动一个新的 Visual Basic 标准 EX ... -
VB调用GetAdaptersInfo 的正确方法
2008-12-30 09:51 2751网上的教程没有一个能在多网卡或多IP下用的,总是在 Cop ... -
VB做的EXE文件设参数
2008-12-29 12:26 1231这个其实很简单 在 Private Sub Form_L ... -
VB常用字符串函数
2008-12-29 12:26 15051. ASC(X),Chr(X):转换字� ... -
VB常用函数
2008-12-29 12:25 23321. Time 返回系统时钟的当前时间。 Date 返回 ... -
VB使用*.res资源文件
2008-12-29 12:23 1697你一定也常常因苦于无法组织自己程序中大量的picture,而头 ... -
在不同的模式下实现定时关闭计算机
2008-12-29 12:20 890Option Explicit Const SM_CLEANB ... -
强制关闭指定QQ号
2008-12-29 12:19 1349'添加 Text1 Command1 ... -
怎么编程把用户名,密码提交到网页上的登录页?
2008-12-29 12:06 1477首先在程序中加入Webbrowser控件并加入引用 Micro ... -
在XP/2K 任务管理器的进程列表中隐藏当前进程
2008-12-29 12:05 1276新建一个模块,把以下代码复制进去,然后在load中调用即可实现 ... -
用VB制作IE工具条自定义按钮
2008-12-29 12:04 1219Private Sub UserControl_Resize( ... -
Webbrowser(Internet 控件)属性方法事件一览表
2008-12-29 11:56 4830想找个Webbrowser控件的详细使用手册,网上找了好久,都 ... -
使用vbs下载文件
2008-12-29 11:52 1574使用vbs下载文件 iLocal=LCase(Wscript. ... -
如何用VB制作半透明窗体?
2008-12-29 11:51 1720函数SetLayeredWindowAttributes ... -
vb api 控制 任务栏 桌面 托盘。。
2008-12-29 11:45 2115VB无疑是最先进的编程� ... -
VB程序实现文件拖放功能
2008-12-26 10:25 16311.新建一个模块,写入以 ...
相关推荐
VB 读写内存是一种常见的游戏修改技术,通过读取和写入游戏进程的内存来实现游戏修改的目的。下面将详细介绍 VB 实现读写内存的知识点。 一、FindWindow 函数 FindWindow 函数用于查找指定的窗口句柄,它需要两个...
标题:"VB读写内存的几个API" 描述:"简单的介绍几个VB的API函数,用来读写程序内存" 在VB(Visual Basic)编程环境中,通过特定的API(Application Programming Interface)函数,开发者能够实现对运行中程序的...
描述中提到“vb 实现物理内存地址的读写操作,代码简单,适合研究用”,暗示了这个项目可能包含一个简单的VB程序,该程序能够读取和修改内存地址中的数据,这可能用于教学或研究目的,帮助开发者了解如何在VB环境中...
进程A创建共享内存并写入数据,然后进程B打开相同的共享内存,读取并处理数据。通过这种方式,两个独立的VB程序可以有效地进行数据交换。 需要注意的是,共享内存的管理和同步至关重要。为了防止数据冲突,可以使用...
例如,定义API函数,然后打开目标进程,尝试读取或写入特定内存地址的数据,最后关闭进程句柄。 6. **内存搜索**:描述中提到的“类似CE”指的是类似于 Cheat Engine 的功能。Cheat Engine 是一款流行的游戏修改...
在VB(Visual Basic)编程中,读写内存是一项高级技术,通常用于与系统进行低级别的交互,例如修改程序运行时的变量值、调试或者优化性能。这个话题涉及到几个关键的知识点,包括内存管理、指针操作以及WinAPI调用。...
- 共享内存是一种高效的IPC方法,因为它允许进程直接读写相同内存区域,无需通过操作系统内核进行数据传输。 - 在VB中,可以利用Windows API函数(如CreateFileMapping和MapViewOfFile)创建和映射共享内存区域。 ...
4. **VB读写内存**: VB通过驱动程序实现跨进程内存读写,这通常涉及使用诸如`WriteProcessMemory`和`ReadProcessMemory`等API函数。由于VB在用户模式下运行,不能直接对其他进程内存操作,驱动程序提供了一个桥梁...
在VB(Visual Basic)编程环境中,内存搜索是一个高级技术,用于在程序运行时查找特定内存地址的数据。这个“vb内存搜索模块指定内存搜索”标题暗示我们正在讨论一个专门设计用于VB应用程序的内存搜索功能,这可能是...
2. **数据读写**: 通过类模块提供的方法读取或写入共享内存,确保数据同步和正确性。 3. **进程间同步**: 如果有多个进程访问共享内存,需要使用同步机制,如互斥量(Mutex)或信号量(Semaphore),防止数据冲突。 ...
标题"VB通过驱动读写内存的例子.rar"暗示了这个压缩包包含了一个示例项目,该项目展示了如何使用VB来创建一个驱动程序,该驱动能够直接读取和写入内存。这通常需要高级的系统编程知识,因为直接操作内存可能会影响...
在VB(Visual Basic)编程环境中,读写注册表是一项常见的任务,用于存储应用程序的配置信息、用户设置或者系统状态等数据。注册表是Windows操作系统中的一个重要数据库,它管理着系统和应用程序的配置信息。了解...
5. **MODBUS通信流程**:VB6.0程序首先构造MODBUS请求报文,包括设备地址、功能码、寄存器地址和数量等信息,然后通过串口(RS-232/485)或TCP/IP发送给MODBUS设备。设备接收到请求后执行相应的操作,并返回响应报文...
我这个不是其他人那个只有函数,没有函数调用的实例,这个实例主要以(以植物大战僵尸中文版)进行了内存的读写操作,介绍了OpenProcess、WriteProcessMemory,ReadProcessMemory、CloseHandle这四个API的用法
7. **垃圾收集**:VB.NET引入了自动垃圾收集机制,可以自动回收不再使用的对象所占用的内存,但在VB6(不支持垃圾收集)中,开发者需要手动管理内存。 8. **内存优化**:通过合理设计数据结构,减少不必要的内存...
VB内存读写模块,不需要你频繁的读写,一句话即可。 例如:msgbox a.读取内存4字节长整数(mhwnd,"[714dbc]+13c8")
网上和csdn上很多关于vb.net获取内存总量的代码,无非wmi,API,以及一些vb6的,虽然vb6和.net有通用的地方,但还不能直接就用。反正我没找到一个直接拷贝粘贴就能用的。 我上传的压缩包里是vb.net工程,运行后label...
在VB(Visual Basic)编程中,读写内存是一项高级技术,通常用于与操作系统进行低级交互,例如直接操作硬件寄存器、调试程序或者优化数据处理。VB本身并不直接支持内存操作,但可以通过API(应用程序接口)调用来...
总之,VB中读写Word复杂表格涉及多个步骤,包括初始化Word应用、打开文档、定位表格、读取或写入数据以及清理资源。通过熟练掌握Word对象模型,你可以高效地处理任何复杂表格任务。在实际项目中,根据具体需求,可能...
在VB6(Visual Basic 6)编程环境中,获取MAC(Media Access Control)地址是一项常见的任务,这主要用于系统识别、网络设备通信以及特定的网络管理功能。MAC地址是网络硬件设备的物理地址,如网卡(NIC)的唯一...