`
pcajax
  • 浏览: 2174717 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

棋牌类游戏内存外挂制作方法

阅读更多

棋牌类游戏内存外挂(辅助工具)制作方法
游戏外挂的制作方式基本上有三种:
1、
图像判别,这种方式比较简单,缺点是不稳定,不能切换游戏画面。
2、
内存方式,依靠游戏程序在内存中的数据,达到获取和改写游戏数据的目的。
3、
截取网络数据包,分析数据包,得到需要的数据,或发送伪造数据包达到修改游戏的目的。

第一种方式和第二种方式我都实际用过,第三种因为水平的原因没有尝试过。第一种方式适合像“大家来找茬”这样的游戏(我做的是QQ的大家来找茬)。

今天我主要讲一下第二种方式,内存获取方式。以联众的“新版保皇”(5人打的纸牌游戏)游戏为例子。配合CE(Cheat Engine)来查找关键数据。这里提一下CE这款软件,它是一款类似“金山游侠”的查找软件中数据的软件,但功能更强大,可以反汇编,可以查看内存数据,也支持下断点。

制作外挂的目的:
自动记录玩家都出了什么牌,显示外面还剩下哪些牌。(现在的在线纸牌游戏,其他玩家未出的牌是记录在服务器上的,并不在你的内存里,所以你的内存中是没有别人未出的牌的,只有你自己的牌、以及别的玩家打出的牌在内存中)

制作外挂,分析游戏的内存数据需要有一个突破口,那么对于纸牌游戏突破口在哪里?
以往我们用金山游侠改单机游戏的时候,比如要改金钱,首先用金山游侠查一下你现在的金钱数(比如说是1000),然后把你的钱花掉一下,比如变成990,然后在用金山游侠查一下990,这样查几次,就能找到1,2个固定的地址。CE的用法也是这样,支持这样的查找。
纸牌游戏中,有哪些东西是数值性质的呢?想一想,每一轮过后你手上剩下的牌数,每次你打出的牌是多少张,以及牌面(是7,8,还是A,K),包括花色(是红桃还是黑桃或其他)这些都是数值。但有些我们好确定,有些不好确定。比如说花色:红桃在内存中是用什么数值表示的呢?我们不确定;包括牌面,你打出一个6,这个6在内存中是不是6呢?不能确定。比较好确定的是:每个玩家手中还剩下多少牌,每一轮每个玩家打出了几张牌。好的,我们就以玩家手上剩下多少张牌来做为我们的突破口。

游戏一开始,每个玩家(共5个玩家)手上都有33张牌。OK,我们在CE中查找数值33,找出来一大堆,接下来,等待玩家出牌,比如说玩家自己出了两张牌,好的,这时候玩家手上还剩下31张牌,在CE里面查找31,运气好的话会发现只剩下几个地址了,等再出几轮牌,你就能找到和你手中剩余牌数保持一致的地址了,看起来一切尽在掌握,和当年用金山游侠一样VERY EASY。但是,很不幸,你兴奋的记下的这个内存地址和在你关掉联众,再次打开“新版保皇”游戏重新获取到得地址居然不一样了。为什么?

这是因为联众采用的是动态地址来存放游戏数据的。我们必须找到变化背后不变的东西。继续使用我们的好搭档CE。这次我们用到它下断点的功能。


如上图,我们找到存放我们牌数的地址0108C6C4(注意是16进制的),然后点右键,选择“寻找时什么在访问这个地址”,一旦我们出了牌(牌数变化了),改变牌数的汇编语句就会被记录下来,如下图。
点击“更多信息”,此时内存中的各个寄存器的数值也能看到。因为在这里是
mov [edi+5c],ecx(红色标记)
这句改变了我们的牌数,所以可以看出我们存牌的地址是存放在内存的[edi+5c]这个位置。
这里就是一个动态的内存地址(在同一次游戏中这个地址不变,但重新开始游戏后寄存器EDI获得的变量是另外一个值。)看一下此时edi这个寄存器对应的值:01093640。


我们回到CE的主界面,搜索此时EDI寄存器对应的01093640这个值。可能会搜索不到,这里需要说明一下,我们前面是随便以一位玩家的剩余牌数来进行搜索的,比如这个游戏用5个玩家,你搜索5个玩家的剩余牌数,再用上面说的方式在CE里找EDI寄存器对应的地址,但很可能找不到,因为这些地址当中可能只有一个是通过变量来表示的,其他的地址是在变量的基础上加一个常数得到的。打个比方说:01093640这个地址,可能是通过变量X(如01000000)+常数(如93640)得到的,这就像我们前面说的存放你的牌的内存地址并不是固定的而是动态的一样。不过一般来说,总还是有一个值你能够搜索到正确的内存地址。
比如这个游戏,我们搜索01093640这个16进制值,发现这个值存放在内存的4BCD8C处。
4BCD8C这个值是固定的还是动态的呢?我们继续再游戏中搜索一下4BCD8C这个值,发现没有找到。所以这个值如果是正确的,那么它应该就是最后的固定值了。

分析到这里,其实概括起来就很简单的一个式子:
剩余牌存放地址=内存中4BCD8C这个地址对应的值+5C
也就是:牌数=[[4BCD8C]+5C] (方括号[]表示取该地址下的值)

取得这个关键地址后,其他的就势如破竹,通过查找和观察就能找到其他数据在内存中的位置了,一般来说这些数据都是其中存放在一起的。
比如说牌数、花色这些东西要分析内存数据找到相互对应的关系。
总之,做外挂,耐心、细心都很重要。当初就为了找这个动态地址对应的固定地址都让我很头疼了一阵子。(据说腾讯的纸牌游戏是用的固定地址,不知道是不是真的^^)

分享到:
评论

相关推荐

    Visual C++ MFC棋牌类游戏编程实例 PDF电子书加源代码.part1

    注意:文件较大,分成三个包上传. Visual+C+++MFC棋牌类游戏编程实例 PDF电子书加源代码.part1 第一部分 设计棋牌类游戏的必备资源,利用这些代码可以方便你研究自己的棋牌类游戏设计和开发

    Visual C++MFC棋牌类游戏编程实例 PDF电子书加源代码.part3

    注意:文件较大,分成三个包上传. Visual+C+++MFC棋牌类游戏编程实例 PDF电子书加源代码.part3 第三部分 设计棋牌类游戏的必备资源,利用这些代码可以方便你研究自己的棋牌类游戏设计和开发

    3个C#棋牌类游戏项目源码.rar

    在本资源中,你将获得三个使用C#编程语言编写的棋牌类游戏的完整源代码。C#是一种广泛用于开发Windows应用程序、Web应用以及游戏的强类型、面向对象的编程语言,尤其在游戏开发领域,它与Unity引擎的结合使得其在...

    非常优秀的棋牌类游戏源码,包含AI及机器人的难度调节算法

    在本资源中,我们拥有的是一款非常优秀的棋牌类游戏源码,它包含了人工智能(AI)以及机器人的难度调节算法。这个源码对于那些想要深入理解游戏开发,特别是棋类游戏和AI技术的人来说,是一个宝贵的参考资料。 首先...

    Visual C++MFC棋牌类游戏编程实例 PDF电子书加源代码.part2

    注意:文件较大,分成三个包上传. Visual+C+++MFC棋牌类游戏编程实例 PDF电子书加源代码.part2 第二部分 设计棋牌类游戏的必备资源,利用这些代码可以方便你研究自己的棋牌类游戏设计和开发

    Visual C++ MFC棋牌类游戏编程实例(斗地主,飞行棋,麻将)

    《Visual C++ MFC棋牌类游戏编程实例》是一本深入探讨使用Microsoft Foundation Classes (MFC)库进行游戏开发的专业书籍。MFC是Microsoft为Windows应用程序设计的一个C++类库,它封装了Windows API,提供了面向对象...

    visual c++ 棋牌类游戏编程实例

    opz格式,阅读器可以在本网站下载。visual c++ 棋牌类游戏编程实例。学习游戏编程我网络编程的上佳之著呀! (抱歉这里只有一章)

    棋牌游戏测试用例

    棋牌游戏类测试用例。可根据测试用例模板,进行多种测试类型的用例编写

    Visual.C++.MFC棋牌类游戏编程实例.part2

    Visual.C++.MFC棋牌类游戏编程实例.part1 超清pdf教程,共3个文件,免费下载

    Visual C++ MFC棋牌类游戏编程实例

    Visual C++ MFC棋牌类游戏编程实例,完全版,以前网上的都是10m的,只有一章,找了好久才找到的。

    《Visual C++ MFC 棋牌类游戏编程实例》中的麻将代码

    《Visual C++ MFC 棋牌类游戏编程实例》中的麻将代码,是针对C++初学者和MFC(Microsoft Foundation Classes)框架爱好者提供的一款实战项目。MFC是微软为Windows平台开发桌面应用提供的一套类库,它封装了Windows ...

    基于JavaMINA的棋牌类手机网络游戏服务器系统的设计与实现

    基于JavaMINA的棋牌类手机网络游戏服务器系统的设计与实现 基于JavaMINA的棋牌类手机网络游戏服务器系统的设计与实现 基于JavaMINA的棋牌类手机网络游戏服务器系统的设计与实现 基于JavaMINA的棋牌类手机网络游戏...

    棋牌类游戏解决方案

    ### 棋牌类游戏解决方案的关键技术知识点 #### 一、行业背景与需求分析 **棋牌类游戏**因其简单易上手、娱乐性强且不受时间地点限制的特点,在各类游戏中占据了重要地位。这类游戏通常有着广泛的受众群体,不仅...

    Visual.Cpp.MFC棋牌类游戏编程实例

    Visual.Cpp.MFC棋牌类游戏编程实例PDF,人民邮电出版社,葛垚主编。标准教科书水准。详尽实用,初学者照着书上的步骤,逐行敲代码都可以照着编出非常棒的游戏来,很有成就感。适合初学者由浅入深学习。

    Visual.C++.MFC棋牌类游戏编程实例.part1

    Visual.C++.MFC棋牌类游戏编程实例.part1 超清pdf教程,共3个文件,免费下载

    棋牌小游戏棋牌小游戏.zip

    【标题】:“棋牌小游戏棋牌小游戏.zip”是一个包含小程序的压缩包,主要聚焦于棋牌类的休闲游戏。这类游戏通常以简单易上手、娱乐性强为特点,适合各年龄段的玩家。 【描述】:该压缩包提供了小程序形式的棋牌类...

    java android 棋牌类游戏.rar

    本压缩包"java android 棋牌类游戏.rar"似乎包含了一个完整的棋盘游戏项目源码,这对于初学者和开发者来说是一个极好的学习和参考材料。下面我们将深入探讨相关的知识点。 1. **Android SDK**:所有Android应用的...

    VC++MFC棋牌类游戏编程实例.rar

    《VC++ MFC棋牌类游戏编程实例》是一个深入探讨如何使用Microsoft Visual C++的MFC(Microsoft Foundation Classes)框架开发棋盘类游戏的资源包。这个压缩文件包含了多个相关的源代码、文档和可能的示例项目,旨在...

Global site tag (gtag.js) - Google Analytics