`
安之若素
  • 浏览: 144990 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

游戏外挂内存数据读取

阅读更多

源地址:http://hi.baidu.com/probill/blog/item/1d07d11efbd641f01ad576f3.html

网络游戏.每一个数据比如你的血值.MP 值.怪的血值..在内存中是以16进制的形式存放的.而显示给我们看的是10进制的形式显示的,,[16进制转就是123456789ABCDEF,好比 十进制的0123456789,逢16进1,十进制是逢十进1,不想算可以用windows自带的计算器,在附件中有]



网 络游戏几乎全是动态内存存放[大话战国居然不是.那天写辅助工具时发现的],,就是每上线一次,数据在内存中分配位置会变,但是.数据间地址的差值是不变 的.就是所谓的偏移量..我们要做的工作就是要让动态的,转换成静态的,只要找到一个就成了.别的根据偏移量可以知道.步骤如下:

1.我 们进游戏.首先要做的就是找动态内存地址[我以HP值举例],找动态内存的工具软件很多,我推荐金山游侠,FPE,CE,GE等...软件用法很简单.. 就好比你现在的HP值是1000.你先定位好程序.输入1000搜索,会搜到一串地址..然后让自己的血值变(比如穿件加HP的装备,比如是加了50 血),再搜1050,这样试几次就找到了唯一的动态内存地址.[虽然唯一,但一下线就会变的],第一步工作完全了...

2.然后我们要用到调试工具设断点,调试工具很多,比如OD或softice等,我以softice举例:
比 如我们搜索到HP的动态地址是044321A7..我们按CRTL+D呼出SOFICE..下命令设断点BPM 044321A7 W 然后按F5退出进游戏..只要HP值一变.就会跳出调试的界面.比如说位置跳到了001B:0047EB17 mov eax,[edx+000000fc]处..其中..edx是基值[也可以是esi等等],000000fc是一个固定的地址偏移量,每次进游戏在变的就 是基值中的数值.

3.到这..有多种方法可以求得静态地址..一种就是内存注入的方法.网上有很多这类的资料..主要是太麻烦..我就不 写了.我讲我自己的方法.我是用到指针的指针的思想..就是.我们的HP值是存放在一个动态内存地址中..地址其实也是数据..地址也是存放在地址中 的..当然.要基值的地址..所以我们要做的就是找存放基值地址的地址,可以用金山等软件搜索到..不过地址是16进制的..所以要转换成10进制.再找 存放基值地址的地址..比如说找到011076EC.好了.我们的工作完成了...现在就到了怎么写读语句..用C语言写起来很简单..用VB也可以 写..[别人说VB没指针.但并不代表不能用].因为按键是VBS语言.那我就用VB写..当然.我要调用WIN32 API函数

VB调 用API要申明,如下:Ddeclare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
dim edx as long
dim hp as long
ReadProcessMemory nOK, ByVal &H011076EC, edx, 4, 0
ReadProcessMemory nOK, ByVal edx+000000fc, hp, 4, 0
就这样两条语句..hp中的数值就是我们的血值了..非常精准的可以得到..比如我血有1000点.我要在666点时加血..你就可以if hp<666 then keypress "加血的按键"

补充一点..搜索基址的地址是会搜到不少个的..但是一般来说..第一个就是...

 

 

 

------------------------------------------------------------------------------------------------------------------------------

 

源地址:http://www.wgx4.com/article/html/257.html

 

 

从游戏中得到动态内存数据  
            作者:sbsummer  
    刚才我玩了几把疯狂坦克,输了好几盘,觉得无聊就搞搞这个,下面开始说说如何得到游戏中的动态数据(地址改变),以得到疯狂坦克中坦克X坐标为例 
            ------------------------------------------------------------------------------ 
            工具: 
            SoftICE动态调试程序,游戏修改工具(金山游侠),反汇编(W32Dasm),Hex Workshop 
            ------------------------------------------------------------------------------ 
            一、找到内存中坦克X坐标 
            用金山游侠搜索,方法如下(金山游侠的使用我就不说了) 
            把坦克往左移动一些,就搜索“减少”;坦克往右移动,就搜索“增大” 
            反复搜索将会找到一个地址(当然其他游戏可能不止一个),这里是08BFAACC 
            注:动态的内存分配就是下次你如果再次搜索,地址将不再是08BFAACC  
            二、找到那条代码修改了这个数据(X坐标) 
            加载 SoftIce 
            在游戏状态 Ctrl+D 调出SoftIce,输入 BPM 08BFAACC W,这里的W表示如果这个地 址被写将中断 
            回到游戏,移动坦克,左移一下,程序中断,SoftIce指向的上面一句是 
            004640B3 MOV DWORD PTR [ESI+000001A4],EAX 
            这句就是修改坦克坐标的代码,当然右移也能找到一句,这里就不重复了 

            三、修改程序使动态的数据变成静态 
            这里说点题外话,修改程序包括两种,一种是直接修改程序,一种是修改内存中的程序(内存补丁),这里由于我懒,所以用了第一种 
            修改程序: 
            疯狂坦克程序存在Fortress2.dat当中,如果你把这个文件改名为EXE文件一样可以运行,这里我们就把他修改成Fortress2.exe 
            打开W32Dasm反汇编,SHIFT+F12跳到004046B3,你看到这几行 
            004046B3 8986A4010000 MOV DWORD PTR [ESI+000001A4],EAX 
            004046B9 8B8644020000 MOV EAX,DWORD PTR [ESI+00000244] 
            004046BF C744241001000000 MOV [ESP+10],00000001 
            刚才我们说了004046B3是修改X坐标的那条语句,现在我们要让他每次修改完程序就能够把X坐标存储到一个固定的地址 
    现在要让它运行到这里就JMP到一个我们自己的代码的地方,于是在程序的尾部我们找到一段空白的区域00465A52,于是我修改004046BF为代码 JMP  00465A52,机器码为E98E130600,因为这句的长度不够以前的那句长,所以要加入几个NOP,机器码为90,所以我们打开HEX  Workshop修改程序,CTRL+G跳到位移为000046BF的地方,看到了C744241001000000,我们把它修改为E98E130600909090,现在程序将一运行到这里就跳到00465A52运行我们的代码。

            四、实现我们自己的代码,然后跳回 
            我们的代码要做的是把动态变成静态, 
            PUSH EAX 
            MOV EAX,[ESI+000001A4] 
            MOV [00470000],EAX 
            POP EAX 
            JMP 004046C7 
            这样这个数值无论运行多少次,只要你移动(当然右移也要修改)就能在00470000中找到X坐标,这段机器码为50 8B86A4010000  
            A300004700 58 E95BECF9FF 
            忘了说刚才我们把004046BF替换掉的那句MOV [ESP+10],00000001也必须加上,所以打开HEX  
            Workshop,CTRL+G跳到00465A52,修改加入 
            C744241001000000 50 8B86A4010000 A300004700 58 E95BECF9FF 
            这样动态数据就变成了静态 

            ------------------------------------------------------------------------------ 

            现在回顾一下 
            首先搜索坐标地址 
            找到改变这个地址的代码 
            修改代码让他跳到自己的代码中运行 
            在程序的空白段加入自己的代码,当然要补上被替换了的那句,还有修改了寄存器,必须先PUSH,再POP 
            下面的工作就是写一个程序读取这个地址了,我用VC写了一个,顺便贴一下关键代码 

            ------------------------------------------------------------------------------ 
            CProcess m_process; 
            bool m_ret=m_process.FindProcess("FortressII"); 
            if (m_ret) 
            { 
            BYTE tank1xL = m_process.ReadByte(0x00470000); 
            BYTE tank1xR = m_process.ReadByte(0x00470001); 
            WORD tank1x = tank1xL+tank1xR*256; 
            temp = tank1x; 
            str.Format("%d",temp); 
            m_tank1x=str;  
            UpdateData(FALSE); 
            return TRUE; 
            } 
            else return FALSE; 

            ----------------------------------------------------------------------------- 

            CProcess是一个我编写的游戏修改类,以下是部分函数代码: 

            HANDLE CProcess::OpenProcess(char *p_ClassName, char *p_WindowTitle) 
            { 
            HWND hWindow; 
            DWORD pid; 
            hWindow = FindWindow(p_ClassName, p_WindowTitle); 
            if (hWindow) { 
            GetWindowThreadProcessId(hWindow, &pid); 
            return ::OpenProcess(PROCESS_ALL_ACCESS, false, pid); 
            } 
            return NULL; 
            } 
            bool CProcess::FindProcess(char *p_WindowTitle) 
            { 
            if (m_hProcess == NULL) { 
            m_hProcess = this->OpenProcess(NULL, p_WindowTitle); 
            if (m_hProcess) 
            m_bGameRunning = true; 
            return m_bGameRunning; 
            } 
            else 
            return false; 
            } 
            BYTE CProcess::ReadByte(DWORD p_Address) 
            { 
            DWORD bytes; 
            BYTE tmpValue; 
            if (m_bGameRunning) { 
            if (ReadProcessMemory(m_hProcess, (void*)p_Address,  
            (void *)&tmpValue, 1, &bytes) == 0) 
            return 0; 
            else 
            return tmpValue; 
            } 
            return 0; 
            } 

            ----------------------------------------------------------------------------- 

分享到:
评论

相关推荐

    游戏外挂攻防艺术文档加代码

    内存注入允许外挂读取或修改游戏内存中的关键数据,如角色属性、位置信息等。钩子技术则是在系统函数调用时插入自定义代码,以实现对外部行为的监控和控制。DLL注入则是将恶意代码载入到游戏进程中,直接执行非法...

    易语言使用汇编读写内存模块

    在易语言中使用汇编读写内存模块,主要是为了实现一些高效或者底层的功能,例如游戏外挂、系统优化工具等。汇编语言能够提供直接访问内存的能力,这在某些场合下比高级语言更为便捷和快速。下面将详细解释这些模块和...

    易语言模块内存读写66.rar

    了解这些基本概念后,使用易语言的内存读写模块可以实现很多高级功能,例如游戏外挂开发、程序调试、性能优化等。然而,需要注意的是,不恰当的内存操作可能导致程序崩溃或者安全问题,因此在使用时必须谨慎,并遵循...

    电脑程序内存读取工具

    内存读取工具是一种用于分析和调试计算机程序的重要软件,它允许用户查看并操作正在运行的程序在内存中的状态。在编程、逆向工程、安全分析和故障排查等场景下,这样的工具是不可或缺的。本文将深入探讨内存读取工具...

    易语言 内存读写操作.rar

    在易语言中,通过特定的函数和指令,程序员可以实现对内存中数据的直接访问和修改,这对于调试、优化程序,或者开发如游戏外挂等特殊应用具有重要意义。 1. **内存读取**:内存读取是指程序从内存中获取数据。在...

    易语言内存取变量数据地址

    在实际应用中,这些技术常用于游戏外挂开发、内存分析、数据调试等领域。但要注意,不恰当的内存操作可能会导致程序崩溃或数据丢失,因此在使用时必须谨慎。 综上所述,“易语言内存取变量数据地址”是易语言编程中...

    易语言源码内存读写模块1.0.7z

    7. 应用场景:内存读写模块常用于游戏外挂开发、数据解析、内存调试、性能优化等领域。 在易语言的内存读写模块1.0中,可能包含了如下功能: - 内存分配与释放:创建指定大小的内存块并释放不再使用的内存。 - ...

    易语言模块内存读写.rar

    2. 确定要写入的数据和数据类型,确保与原内存数据类型一致,避免数据溢出或错误。 3. 使用相应的内存写入函数,如`_内存写入字节`、`_内存写入整数`等。 4. 写入操作完成后,可能需要验证数据是否已成功修改,以...

    易语言写程序的内存数据源码

    易语言提供了丰富的内建函数和结构来处理内存数据,包括但不限于读取、写入、修改内存中的数据,以及创建和释放内存空间等操作。这些功能在编写游戏外挂、内存修改器或者进行低级系统编程时尤其重要。 内存数据源码...

    易语言源码内存读写.zip

    10. **应用实例**:常见的内存读写应用包括游戏外挂开发、数据包分析、程序调试等。学习这些实例可以加深对内存读写的理解和实践。 通过学习和实践这些知识点,开发者可以更好地掌握易语言的内存读写功能,从而编写...

    C#读写内存打开进程的类.cs

    在编程领域,尤其是在游戏开发和调试中,有时我们需要对运行中的进程进行读写内存操作,以便于测试、调试或者创建一些辅助工具。C#作为.NET框架下的主要编程语言,提供了丰富的API来实现这一功能。本篇文章将深入...

    API内存读写.rar

    总结,API内存读写是编程中的一种重要技术,尤其在系统级编程和游戏外挂开发中常见。理解其原理并掌握在易语言中的应用,能帮助开发者实现更高效、更灵活的程序设计。但同时,我们也要时刻关注其潜在的安全风险,...

    易语言源码内存读写.rar

    这些函数允许程序员高效地处理大量数据,实现高速的数据交换,尤其适用于游戏外挂、软件调试等领域。 内存读写的核心在于指针的使用。在易语言中,指针类型可以指向内存中的任意位置,通过指针我们可以直接读取或...

    易语言源码API内存读写模块.rar

    API(Application Programming Interface)内存读写是编程中常见的技术,用于程序对内存中的数据进行操作,这在游戏外挂、系统底层调试等领域有着广泛的应用。本篇文章将深入探讨易语言中API内存读写模块的相关知识...

    易语言API内存读写源码.rar

    6. 应用场景:探讨内存读写在实际项目中的应用场景,如游戏外挂、性能优化、数据分析等。 通过深入研究这份源码,易语言开发者不仅可以提升对API调用的掌握,还能提高对内存管理的理解,这对于提高编程能力,特别是...

    易语言制作网络游戏内存搜索修改器源码

    网络游戏内存搜索修改器,通常被称为“外挂”或“内存编辑器”,它们通过读取并修改游戏进程中的内存数据来改变游戏状态,如角色属性、金钱数量等。在分析这个源码的过程中,我们可以学习以下几个关键知识点: 1. *...

    VC内存搜索

    在游戏外挂开发中,它常用于查找并修改游戏中的变量值,如角色的生命值、金币数量等。内存搜索通常涉及到内存扫描、内存地址定位和内存读写操作。 二、VC内存搜索的实现原理 1. 内存扫描:这是内存搜索的第一步,...

    易语言简单读写内存源码-易语言

    6. 应用场景:理解并掌握易语言的内存读写技术,可以应用于制作内存修改器(如游戏外挂)、软件逆向工程、调试工具等方面。例如,可以读取游戏的内存数据来修改角色属性,或者读取程序状态来辅助调试。 7. 进阶技巧...

    R0进程保护驱动源码_读写驱动_保护进程_R0进程保护驱动源码_zulu5fi_R0驱动读写

    这在游戏环境中尤为重要,因为游戏开发者可能需要防止作弊者通过修改内存数据来获得不公平的优势。 "zulu5fi"可能是开发者的别名或者项目标识,具体含义可能需要更多上下文才能明确。"R0驱动读写"再次重申了该驱动...

Global site tag (gtag.js) - Google Analytics