VB6.0超级模块-内存操作篇-含特征码搜索和HOOK跳转构造

简介:除了 特征码搜索和构造HOOK跳转,还有基本的多级指针读写。也就是用了这些函数以后就可以修改游戏的变量和反汇编代码了。当然也可以读取游戏的变量数值。

'获取窗口句柄
'参数是游戏进程名 或 窗口类名 或 窗口标题

Function GetWindowHwnd(ByVal WindowClassVsWindowText As String) As Long '


'获取进程PID
'参数是游戏进程名 或 窗口类名 或 窗口标题

Function GetPid(ByVal WindowClassVsWindowTextExeName As String) As Long

'获取窗口句柄
'参数是游戏进程名 或 窗口类名 或 窗口标题

Function GetProcessHwnd(ByVal WindowClassVsWindowTextExeName As String) As Long '获窗口句柄

'获取进程句柄
'参数是游戏进程名 或 窗口类名 或 窗口标题
'a=GetProcessHwnd("天地玄门")

Function GetProcessHwnd(ByVal WindowClassVsWindowTextExeName As String) As Long '获窗口句柄


'写入反汇编对应的字节集 , 比如
'参数1 '参数是游戏进程名 或 窗口类名 或 窗口标题
'参数2 反汇编代码地址
'参数3 反汇编字节集
'VB超级模块.WriteAsmByte ("天地玄门","6A9EC0","90 90 90 90 90 90 90")
'VB超级模块.WriteAsmByte ("天地玄门","Game.dll*4E32","90 90 90 90 90 90 90")

Function WriteAsmByte(ByVal WindowClassVsWindowTextExeName As String, ByVal PeCodeAdr As String, ByVal AsmByte As String) As String


构造 JMP 跳转
'参数1 目标游戏进程名或窗口名 或窗口类名,
'参数2 目标进程的HOOK点的代码地址
'参数3 My函数的代码地址
'CALL  JmpCode ("天地玄门","4D9EC0","6A0000" )

Function JmpCode(ByVal WindowClassVsWindowTextExeName As String, ByVal PeCodeAdr As String, ByVal MyCodeAdr As String) As String '不含申请内存的

'搜索特征码
'A=FindAsm ("天地玄门","50000-6A9EC0" , "2b f3 89 b7 60 55 00 00")
'参数1是 游戏进程名或者窗口名或窗口类名
'参数2是 搜索范围
'参数3是 特征码-字节集

Function FindAsm(ByVal WindowClassVsWindowTextExeName As String, ByVal AddrRange As String, ByVal AsmCodeByte As String) As String

'读取4字节整数  a = ReadLong ("天地玄门", "6A9EC0+768+5560")
'读取4字节整数  a = ReadLong ("天地玄门", "Game.dll*43AE+768+5560")
'参数1:游戏进程名或者窗口名或窗口类名
'参数2:可以是 多级指针结构,也可以单独1个内存地址

Function ReadLong(ByVal WindowClassVsWindowTextExeName As String, ByVal ProcesAddr As String) As Long '读取4字节整数

'读取2字节的整数
'参数1:游戏进程名或者窗口名或窗口类名
'参数2:可以是 多级指针结构,也可以单独1个内存地址
'读取2字节整数  a = ReadInteger ("天地玄门", "6A9EC0+768+5560")
'读取2字节整数  a = ReadInteger ("天地玄门", "Game.dll*43AE+768+5560")

Function ReadInteger(ByVal WindowClassVsWindowTextExeName As String, ByVal ProcesAddr As String) As Integer
'读取1字节的整数
'参数1:游戏进程名或者窗口名或窗口类名
'参数2:可以是 多级指针结构,也可以单独1个内存地址
'读取1字节整数  a = ReadByte ("天地玄门", "6A9EC0+768+5560")
'读取1字节整数  a = ReadByte ("天地玄门", "Game.dll*43AE+768+5560")

Function ReadByte(ByVal WindowClassVsWindowTextExeName As String, ByVal ProcesAddr As String) As Byte

  '写入4字节的整数
'参数1:游戏进程名或者窗口名或窗口类名
'参数2:可以是 多级指针结构,也可以单独1个内存地址
'参数3:写入的数值
'读取4字节整数  a = WriteLong ("天地玄门", "6A9EC0+768+5560",100)
'读取4字节整数  a = WriteLong ("天地玄门", "Game.dll*43AE+768+5560",100)

Sub WriteLong(ByVal WindowClassVsWindowTextExeName As String, ByVal ProcesAddr As String, ByVal vas As Long)

'写入2字节的整数
'参数1:游戏进程名或者窗口名或窗口类名
'参数2:可以是 多级指针结构,也可以单独1个内存地址
'参数3:写入的数值
'写入2字节整数  CALL  WriteInteger ("天地玄门", "6A9EC0+768+5560",100)
'写入2字节整数   CALL   WriteInteger ("天地玄门", "Game.dll*43AE+768+5560",100)

Sub WriteInteger(ByVal WindowClassVsWindowTextExeName As String, ByVal ProcesAddr As String, ByVal vas As Integer)



'写入1字节的整数
'参数1:游戏进程名或者窗口名或窗口类名
'参数2:可以是 多级指针结构,也可以单独1个内存地址
'参数3:写入的数值
'写入1字节整数  CALL  WriteInteger ("天地玄门", "6A9EC0+768+5560",100)
'写入1字节整数   CALL   WriteInteger ("天地玄门", "Game.dll*43AE+768+5560",250)

Sub WriteByte(ByVal WindowClassVsWindowTextExeName As String, ByVal ProcesAddr As String, ByVal vas As Byte)


'写入单精度小数
'参数1:游戏进程名或者窗口名或窗口类名
'参数2:可以是 多级指针结构,也可以单独1个内存地址
'参数3:写入的数

'写入单精度小数字节整数  CALL  WriteSingle ("天地玄门", "6A9EC0+768+5560",100)
'写入单精度小数字节整数   CALL   WriteSingle ("天地玄门", "Game.dll*43AE+768+5560",100)
Sub WriteSingle(ByVal WindowClassVsWindowTextExeName As String, ByVal ProcesAddr As String, ByVal vas As Single)     '修改 4字节浮点数


'写入双进度小数
'参数1:游戏进程名或者窗口名或窗口类名
'参数2:可以是 多级指针结构,也可以单独1个内存地址
'参数3:写入的数值
'写入单精度小数字节整数  CALL  WriteDouble ("天地玄门", "6A9EC0+768+5560",100)
'写入单精度小数字节整数   CALL   WriteDouble ("天地玄门", "Game.dll*43AE+768+5560",100)

Sub WriteDouble(ByVal WindowClassVsWindowTextExeName As String, ByVal ProcesAddr As String, ByVal vas As Double)       '修改 4字节浮点数

'读取单精度小数
'参数1:游戏进程名或者窗口名或窗口类名
'参数2:可以是 多级指针结构,也可以单独1个内存地址
'读取单精度小数字节整数 a=WriteDouble ("天地玄门", "6A9EC0+768+5560",100)
'读取单精度小数字节整数  a= WriteDouble ("天地玄门", "Game.dll*43AE+768+5560",100)

Function ReadSingle(ByVal WindowClassVsWindowTextExeName As String, ByVal ProcesAddr As String) As Single '读取1字节整数

'
'读取双精度浮点数
'参数1:游戏进程名或者窗口名或窗口类名
'参数2:可以是 多级指针结构,也可以单独1个内存地址
'读取双精度浮点数 a=WriteDouble ("天地玄门", "6A9EC0+768+5560",100)
'读取双精度浮点数  a= WriteDouble ("天地玄门", "Game.dll*43AE+768+5560",100)
Function ReadDouble(ByVal WindowClassVsWindowTextExeName As String, ByVal Proces
Addr As String) As Double


'读取Unicode字符串
'参数1:游戏进程名或者窗口名或窗口类名
'参数2:可以是 多级指针结构,也可以单独1个内存地址
'读取Unicode字符串 a=ReadStringUnicode ("天地玄门", "6A9EC0+768+5560",100)
'读取Unicode字符串  a= ReadStringUnicode ("天地玄门", "Game.dll*43AE+768+5560",100)

Function ReadStringUnicode(ByVal WindowClassVsWindowTextExeName As String, ByVal ProcesAddr As String) As String '


'读取 Ansi字符串
'参数1:游戏进程名或者窗口名或窗口类名
'参数2:可以是 多级指针结构,也可以单独1个内存地址
'Ansi字符串 a=ReadStringAnsi ("天地玄门", "6A9EC0+768+5560",100)
'Ansi字符串  a= ReadStringAnsi ("天地玄门", "Game.dll*43AE+768+5560",100)

Function ReadStringAnsi(ByVal WindowClassVsWindowTextExeName As String, ByVal ProcesAddr As String) As String   '读取1字节整数




'获取游戏进程上的某个模块地址
'参数1 进程窗口名、类名或者进程名
'参数2 模块名 ,比如Client.dll 或  Game.dll  或  Game.dat  或  Client.dat

Public Function GetProcessModuleHandle(ByVal WindowClassVsWindowTextExeName As String, ByVal ModuleName As String) As Long

'参数1 进程窗口名、类名或者进程名,参数2 模块名 ,参数3 模块所在的路径关键字 比如 C盘 WINDOWS 目录下的路径 就填写 "WINDOWS" 即可
'这个函数一般不怎么用,一般用上面的 GetProcessModuleHandle 函数就可以了,那么这个函数为啥我要写呢? 因为 有的时候 同模块名 但是路径不同 并且这2个模块 版本也不同,只是模块名相同。这个时候 就需要区分 路径关键字了
'比如d3d9.dll这个 模块 一般 某类进程目录下面有,操作系统C盘上也有。  但是 真正调用的是系统的那个模块
' Dim mymod1 As Long
' mymod1 = GetProcessModuleHandleEx("天地玄门中文版", "d3d9.dll","WINDOWS")


Public Function GetProcessModuleHandleEx(ByVal WindowClassVsWindowTextExeName As String, ByVal ModuleName As String, ByVal DLL_Path As String) As Long



'获取模块地址 用PID
''参数1 进程窗口名、类名或者进程名,参数2 模块名

Public Function GetProcessModuleHandleByPid(ByVal GamePid As String, ByVal ModuleName As String) As Long
VB6.0超级模块模块下载去 技术交流站 www.zai996.com  q1016058890  
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

侠客软件开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值