简介:除了 特征码搜索和构造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 ProcesAddr 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 |
VB6.0超级模块-内存操作篇-含特征码搜索和HOOK跳转构造
最新推荐文章于 2024-05-19 12:51:42 发布