`
hereson2
  • 浏览: 467141 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

VB读取武林外传内存地址

阅读更多
一 模块代码
复制内容到剪贴板
代码:
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
分享到:
评论

相关推荐

    VB 实现读写内存教程

    VB 读写内存是一种常见的游戏修改技术,通过读取和写入游戏进程的内存来实现游戏修改的目的。下面将详细介绍 VB 实现读写内存的知识点。 一、FindWindow 函数 FindWindow 函数用于查找指定的窗口句柄,它需要两个...

    VB读写内存的几个API

    标题:"VB读写内存的几个API" 描述:"简单的介绍几个VB的API函数,用来读写程序内存" 在VB(Visual Basic)编程环境中,通过特定的API(Application Programming Interface)函数,开发者能够实现对运行中程序的...

    pconline1482308810420_vb内存_物理读写_vb实现物理内存的读写操作_

    描述中提到“vb 实现物理内存地址的读写操作,代码简单,适合研究用”,暗示了这个项目可能包含一个简单的VB程序,该程序能够读取和修改内存地址中的数据,这可能用于教学或研究目的,帮助开发者了解如何在VB环境中...

    VB程序间共享内存

    进程A创建共享内存并写入数据,然后进程B打开相同的共享内存,读取并处理数据。通过这种方式,两个独立的VB程序可以有效地进行数据交换。 需要注意的是,共享内存的管理和同步至关重要。为了防止数据冲突,可以使用...

    VB_内存读写_visualbasic_VB源码_

    例如,定义API函数,然后打开目标进程,尝试读取或写入特定内存地址的数据,最后关闭进程句柄。 6. **内存搜索**:描述中提到的“类似CE”指的是类似于 Cheat Engine 的功能。Cheat Engine 是一款流行的游戏修改...

    vb读写内存vb读写内存

    在VB(Visual Basic)编程中,读写内存是一项高级技术,通常用于与系统进行低级别的交互,例如修改程序运行时的变量值、调试或者优化性能。这个话题涉及到几个关键的知识点,包括内存管理、指针操作以及WinAPI调用。...

    VB进程通信-内存共享

    - 共享内存是一种高效的IPC方法,因为它允许进程直接读写相同内存区域,无需通过操作系统内核进行数据传输。 - 在VB中,可以利用Windows API函数(如CreateFileMapping和MapViewOfFile)创建和映射共享内存区域。 ...

    VB驱动级内存读写,不用DLL,直接加载*.sys文件

    4. **VB读写内存**: VB通过驱动程序实现跨进程内存读写,这通常涉及使用诸如`WriteProcessMemory`和`ReadProcessMemory`等API函数。由于VB在用户模式下运行,不能直接对其他进程内存操作,驱动程序提供了一个桥梁...

    vb内存搜索模块指定内存搜索

    在VB(Visual Basic)编程环境中,内存搜索是一个高级技术,用于在程序运行时查找特定内存地址的数据。这个“vb内存搜索模块指定内存搜索”标题暗示我们正在讨论一个专门设计用于VB应用程序的内存搜索功能,这可能是...

    VB进程间内存映像共享、进程间通讯

    2. **数据读写**: 通过类模块提供的方法读取或写入共享内存,确保数据同步和正确性。 3. **进程间同步**: 如果有多个进程访问共享内存,需要使用同步机制,如互斥量(Mutex)或信号量(Semaphore),防止数据冲突。 ...

    VB通过驱动读写内存的例子.rar_内存驱动_驱动 读写_驱动内存读写_驱动读写

    标题"VB通过驱动读写内存的例子.rar"暗示了这个压缩包包含了一个示例项目,该项目展示了如何使用VB来创建一个驱动程序,该驱动能够直接读取和写入内存。这通常需要高级的系统编程知识,因为直接操作内存可能会影响...

    vb读写注册表_vb读写注册表_

    在VB(Visual Basic)编程环境中,读写注册表是一项常见的任务,用于存储应用程序的配置信息、用户设置或者系统状态等数据。注册表是Windows操作系统中的一个重要数据库,它管理着系统和应用程序的配置信息。了解...

    MODBUS VB读写寄存器_Vb6.0modbus_

    5. **MODBUS通信流程**:VB6.0程序首先构造MODBUS请求报文,包括设备地址、功能码、寄存器地址和数量等信息,然后通过串口(RS-232/485)或TCP/IP发送给MODBUS设备。设备接收到请求后执行相应的操作,并返回响应报文...

    vb.net2010内存读写实例.rar

    我这个不是其他人那个只有函数,没有函数调用的实例,这个实例主要以(以植物大战僵尸中文版)进行了内存的读写操作,介绍了OpenProcess、WriteProcessMemory,ReadProcessMemory、CloseHandle这四个API的用法

    VB-DLL和内存管理

    7. **垃圾收集**:VB.NET引入了自动垃圾收集机制,可以自动回收不再使用的对象所占用的内存,但在VB6(不支持垃圾收集)中,开发者需要手动管理内存。 8. **内存优化**:通过合理设计数据结构,减少不必要的内存...

    VB内存读写模块

    VB内存读写模块,不需要你频繁的读写,一句话即可。 例如:msgbox a.读取内存4字节长整数(mhwnd,"[714dbc]+13c8")

    vb.net 获取 内存总量、使用量、可用量

    网上和csdn上很多关于vb.net获取内存总量的代码,无非wmi,API,以及一些vb6的,虽然vb6和.net有通用的地方,但还不能直接就用。反正我没找到一个直接拷贝粘贴就能用的。 我上传的压缩包里是vb.net工程,运行后label...

    vb 读写内存

    在VB(Visual Basic)编程中,读写内存是一项高级技术,通常用于与操作系统进行低级交互,例如直接操作硬件寄存器、调试程序或者优化数据处理。VB本身并不直接支持内存操作,但可以通过API(应用程序接口)调用来...

    vb 读写WORD复杂表格

    总之,VB中读写Word复杂表格涉及多个步骤,包括初始化Word应用、打开文档、定位表格、读取或写入数据以及清理资源。通过熟练掌握Word对象模型,你可以高效地处理任何复杂表格任务。在实际项目中,根据具体需求,可能...

    VB6 获取mac地址

    在VB6(Visual Basic 6)编程环境中,获取MAC(Media Access Control)地址是一项常见的任务,这主要用于系统识别、网络设备通信以及特定的网络管理功能。MAC地址是网络硬件设备的物理地址,如网卡(NIC)的唯一...

Global site tag (gtag.js) - Google Analytics