- 浏览: 451101 次
- 性别:
- 来自: 广州
最新评论
-
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 1913自从公开了TEA算法的VB代码之后一直有人追问我如何调用这两个 ... -
TEA算法的VB实现代码
2008-12-30 11:02 1619前些日子不少人都要挂QQ,有客户需求就自然有人去研究,所以不少 ... -
QQ通讯协议
2008-12-30 10:56 4161协议说明: 协议由报文 ... -
hoxede的QQ填充算法和TEA 加解密的python实现
2008-12-30 10:31 2838""" The MIT Lic ... -
如何从 Visual Basic 中调用 GetNetworkParams / GetAdapter
2008-12-30 09:52 16641. 启动一个新的 Visual Basic 标准 EX ... -
VB调用GetAdaptersInfo 的正确方法
2008-12-30 09:51 2685网上的教程没有一个能在多网卡或多IP下用的,总是在 Cop ... -
VB做的EXE文件设参数
2008-12-29 12:26 1145这个其实很简单 在 Private Sub Form_L ... -
VB常用字符串函数
2008-12-29 12:26 14581. ASC(X),Chr(X):转换字 ... -
VB常用函数
2008-12-29 12:25 22631. Time 返回系统时钟的当前时间。 Date 返回 ... -
VB使用*.res资源文件
2008-12-29 12:23 1621你一定也常常因苦于无法组织自己程序中大量的picture,而头 ... -
在不同的模式下实现定时关闭计算机
2008-12-29 12:20 837Option Explicit Const SM_CLEANB ... -
强制关闭指定QQ号
2008-12-29 12:19 1289'添加 Text1 Command1 ... -
怎么编程把用户名,密码提交到网页上的登录页?
2008-12-29 12:06 1420首先在程序中加入Webbrowser控件并加入引用 Micro ... -
在XP/2K 任务管理器的进程列表中隐藏当前进程
2008-12-29 12:05 1218新建一个模块,把以下代码复制进去,然后在load中调用即可实现 ... -
用VB制作IE工具条自定义按钮
2008-12-29 12:04 1168Private Sub UserControl_Resize( ... -
Webbrowser(Internet 控件)属性方法事件一览表
2008-12-29 11:56 4757想找个Webbrowser控件的详细使用手册,网上找了好久,都 ... -
使用vbs下载文件
2008-12-29 11:52 1510使用vbs下载文件 iLocal=LCase(Wscript. ... -
如何用VB制作半透明窗体?
2008-12-29 11:51 1652函数SetLayeredWindowAttributes ... -
vb api 控制 任务栏 桌面 托盘。。
2008-12-29 11:45 2069VB无疑是最先进的编程 ... -
VB程序实现文件拖放功能
2008-12-26 10:25 15121.新建一个模块,写入以 ...
相关推荐
vb读写内存 vb读写内存 vb读写内存
vb 实现物理内存地址的读写操作,代码简单,适合研究用
简单的介绍几个VB的API函数,用来读写程序内存
我这个不是其他人那个只有函数,没有函数调用的实例,这个实例主要以(以植物大战僵尸中文版)进行了内存的读写操作,介绍了OpenProcess、WriteProcessMemory,ReadProcessMemory、CloseHandle这四个API的用法
VB内存读写模块,不需要你频繁的读写,一句话即可。 例如:msgbox a.读取内存4字节长整数(mhwnd,"[714dbc]+13c8")
VB-DLL和内存管理.pdf vb dll 内存
VB读取硬盘序列号VB读取硬盘序列号VB读取硬盘序列号VB读取硬盘序列号VB读取硬盘序列号VB读取硬盘序列号VB读取硬盘序列号VB读取硬盘序列号
vb 读写内存
vb 读写WORD复杂表格,复杂表格,复杂表格。
vb读写注册表源代码 bas文件 可以直接引用
VB读取指定行的文本内容VB读取指定行的文本内容VB读取指定行的文本内容VB读取指定行的文本内容
VB通过驱动读写内存的例子,找了好久才找到的.
网上和csdn上很多关于vb.net获取内存总量的代码,无非wmi,API,以及一些vb6的,虽然vb6和.net有通用的地方,但还不能直接就用。反正我没找到一个直接拷贝粘贴就能用的。 我上传的压缩包里是vb.net工程,运行后label...
Visual Basic 内存特征码搜索源码 类似CE
程序间共享内存,用于数据交换,非常强大的示例,解决你进程间数据共享的问题 不错,解决了传输问题,可以共享N个字符串。整数等类型 改造一下,进程通讯就可以用了 我用它做串口数据共亭。。不错。。 挺好用的我...
VB.net使用ReadProcessMemory读取各种类型的数据,如String、Single、Double、int等。。。 写内存的代码相对简单,给大家用来练手。 为了类型转换费了老大劲。。。 后来才发现原来很简单。杯具。。
vb做的一个中断程序并修改内存地址的源码,可以做成内存注册机
VB读取记事本无乱码并赋值给string型变量 VB读取记事本无乱码并赋值给string型变量
VB6 获取mac地址,仅供学习使用