怎么制作游戏修改器,适合初学者
- 格式:doc
- 大小:34.00 KB
- 文档页数:11
简单修改器制作教程 - 用Cheat Engine制作&生成修改器本帖最后由圣风云淡于2011-5-10 14:14 编辑首先,这只是个简单教程,即使没有编程经验甚至完全不懂任何编程语言的人都能制作自己的修改器!迟些我会写一篇用C#来编写修改器的教程,其实过程也大同小异,只是编译用C#而不是用Cheat Engine 自动生成而已。
这就需要一些更高级的知识了...所需工具:Cheat Engine 6.0 & Cheat Engine 5.6.1所需知识:懂得怎么搜索数据地址,只要知道懂得怎么找地址就行了。
虽然每次开始游戏那个地址都会改变,但下面要教的正是怎么通过修改汇编代码来间接修改那个总会改变的地址。
而我们要找的代码地址总是固定在游戏某个模块的特定地址里的,只要有模块的地址和那个代码的偏移值,那么我们就一定可以找到那个代码的地址,对其进行修改,就能间接修改具体数据的地址(例如金钱、生命、子弹...etc)这里用《刺客信条:兄弟会》来当例子,这个教程还适用于任何游戏!当然,如果游戏有数据加密,反调试的话,那么过程将会更加坎坷...教程正文:1. 找到数据地址这个我就不教了,太基础,如果这个都不懂的话可以不用往下看了...2. 找出写入这个地址的代码右键找到的数据地址(图里是金钱的地址),点击Find out what writes to this address ,找出写入这个地址的代码有些时候你可能需要点Find out what accesses this address,不过一般情况下我们用不着点这个,因为可能会找出很多不需要的代码。
第一次点击的时候会弹出提示,问你要不要用调试器调试当前程序(游戏程序),当然选Y es然后你会看到弹出一个调试界面,不用管,先回到游戏由于这里用的是金钱做例子,那么回到游戏后去改变一下金钱数量,例如买东西,扔钱,偷钱...我进游戏扔了一次钱,偷了一次钱(以防万一增加和减少金钱是用两个不同的代码来写入的) 事实果然不出我所料,回到调试界面,我看到了两个地址,而且各自写入了一次金钱数据。
CE游戏修改器制作游戏修改器傻⽠教程[图⽂]傻⽠教程⽬标是:注重操作,不求深⼊,主要是为了培养各位的兴趣和带你迅速⼊门。
先简单介绍下什么叫CE,CE的全称是Cheat Engine,最新的版本是5.6.1(作者是 Dark Byte)忘记⾦⼭游侠,GM8,FPE之类的修改⼯具的吧,CE会让你爱不释⼿。
⼀、先下载CE 6.2,这个汉化版相当不错哦(不需要安装),推荐各位下载使⽤。
ce修改器(Cheat Engine) v7.3 中⽂版(附使⽤⽅法)类型:内存管理⼤⼩:22MB语⾔:简体中⽂时间:2021-10-02查看详情⼆、打开CE⽬录下的2个⽂件:三、附加进程(图⽰):操作到此就结束了。
这个教程就是如此简单,下⼀关同样如此。
(就像玩游戏⼀样,完全是闯关试的操作,请各位按照顺序,⼀关⼀关的⾛)按下⼀步进⼊教程第⼆关,需要扫描的精确数值是100现在开始搜索精确数值 100 数值中输⼊⼀般游戏就是4字节,这⾥不需要改动,默认就好。
这次扫描我们得到 59 个结果,⾥⾯肯定有我们要找的那个⾎值,不过好像太多了。
关键⼀步:回到 Tutorial 点击我们再输⼊ 96 点击只有1个结果了,这个就是我们要找的内存地址,双击将其加⼊到地址栏图⽰操作:把 95 改成 1000 点击确定按钮此时教程的下⼀步按钮变成可⽤闯关成功。
操作虽然简单,但是⼤家需要明⽩这其实是⼀个筛选的过程,这样操作就能把地址找出来。
1、双击下图对应位置可快速更改数值。
2、双击地址可快速将其加⼊到地址栏第3关的密码是 419482这⼀关很重要,因为某些游戏中⾎显⽰的不是数字⽽是⾎条,这样的话教程2中的⽅法就失效了。
本关就你要教会你如何修改这些讨厌的未知数此时点击新扫描然后选择未知初始数值点击⾸次扫描然后出现了肯定是N多的结果,因为太多了,CE没有显⽰出来。
⽼办法,回到 Tutorial ,点击打我,CE会告诉你⾎量减了多少,⽐如-1这⾥⾯我们换个思路,假设CE没告诉我减少了多少或者我根本没看清,这时应该怎么办呢?注意看下⾯的操作⼀、扫描减少的数值下拉框,选择减少了的数值,按再次扫描(此时⾎量减少了)⼆、扫描不变的数值然后选择没变动的数值(此时⾎量没有变化)再回到Tutorial ,点击打我 => 扫描减少了的数值 => 扫描没变动的数值反复操作,最后就会只剩14个地址简单判断下(Tutorial中告诉你了这个数值是⼩于500的),很容易就找到了最终的地址。
CE游戏修改器制作游戏修改器傻瓜教程CE(Cheat Engine)游戏修改器是一款功能强大的游戏辅助工具,可以帮助玩家改变游戏中的数值和参数,实现自定义的游戏修改。
虽然制作游戏修改器需要一定的编程基础,但是下面将为你简单介绍一些制作游戏修改器的基本步骤,希望能帮助你入门。
第一步:准备工作
第二步:选择目标游戏
在CE游戏修改器的主界面上,点击左上角的图标按钮,选择你想要修改的游戏进程,然后点击“打开”按钮。
第三步:数值
第四步:修改数值
在游戏中改变这个数值,例如通过消费一部分金币使其减少,然后点击CE游戏修改器中的“下一扫描”按钮。
然后在结果中会显示出新的数值(例如新的金币数量),将其选中并点击右键,选择“改变值”。
第五步:测试修改结果
在游戏中查看数值是否发生改变,如果改变成功,则表示修改器已经制作成功。
如果没有改变成功,可以尝试多次重复上述步骤,直到修改成功。
第六步:保存和加载修改器
在CE游戏修改器的界面上点击“文件”菜单,选择“保存文件”选项,将你制作好的修改器保存到本地。
下次想要使用这个修改器时,可以
在CE游戏修改器界面上点击“文件”菜单,选择“加载文件”,然后选择你保存的修改器文件。
总结:
以上是制作CE游戏修改器的基本步骤,当然,要制作更加复杂和高级的修改器需要更深入的编程知识和技术。
希望这个简单的傻瓜教程能帮助你入门,了解游戏修改器的基本原理和操作方法。
如果你对游戏修改器有更深入的兴趣,可以进一步学习和研究CE游戏修改器的高级功能和技巧。
CE(CHEATENGINE)修改器新⼿⼊门教程⽬录环境准备:下载并安装CE第⼆关:精确扫描数值第三关:未知数值扫描第四关:浮点数的扫描第五关:代码替换功能第六关:关于指针第七关:简单代码注⼊第⼋关:查找多级指针Cheat Engine ⼀般简称CE,是⼀个开放源代码的作弊软件,其功能包括:内存扫描、⼗六进制编辑器、调试⼯具,Cheat Engine ⾃⾝附带了外挂制作⼯具,可以⽤它直接⽣成外挂⼯具,CE可以说是⽬前最优秀的游戏修改器不是之⼀,这个⼯具绝对值得你去学习(只要花⼀点时间就够了)。
本章节内容将带领⼩⽩学会使⽤CE,由于是⼊门教程所以不会讲解⼀些太深奥的原理,其⽬的是教会你如何使⽤这款⼯具来修改⼀些游戏中的数据,快速上⼿操作,这⾥我们就以CE中内置的Tutorial-i386.exe⼯具来做教学演⽰,如果你能够灵活掌握演⽰⼯具中每个关卡的通关过程,那么相信你也可以将学到的技术应⽤到其他任何⼀款游戏中,暂时不要尝试附加⽹络游戏除⾮你已经做好了万全的准备。
环境准备:下载并安装CECE 6.8 中⽂版 CE 7.1 中⽂版ce(CHEAT ENGINE)中⽂⼊门教程[原著CCB]类型:其他⼯具⼤⼩:语⾔:时间:2021-10-02查看详情该⼯具打开后默认是英⽂的,你需要修改⼀下,如下所⽰,选择 edit -> setting -> 选择中⽂,重启即可。
1.打开解压后的CE⽬录你可以看到下⾯的⽬录结构,其中Cheat Engine.exe就是CE的主进程,⽽Tutorial-i386.exe则是⼀个练习环境,我们后续内容都会围绕这个练习环境展开.2.接着我们打开Cheat Engine.exe(如果系统是32位的则打开cheatengine-i386.exe)请务必使⽤管理员权限运⾏CE修改器,如下:3.使⽤CE修改器附加cheatengine-i386.exe进程,操作过程如下:教程到这⾥就结束了,第⼀关就这么简单好了,点击下⼀步按钮进⼊下⼀个步骤(或输⼊密码进⼊你要练习的步骤)第⼆关:精确扫描数值附加Tutorial-i386.exe进程后,我们点击教程的下⼀步按钮,接着继续第⼆关,第⼆关的作⽤还是很简单的,主要⽬的是遍历出我们想要的动态数据,⽐如⾓⾊的⽣命,⼈物的魔法等,都会⽤到精确扫描,可以说这⼀关是既简单⼜实⽤的东西,也是今后外挂制作中最常⽤的环节,接着我们看下Tutorial-i386.exe程序对这⼀关通关流程的描述:步骤 2: 精确值扫描 (密码=090453)现在你已经在 Cheat Engine 中打开了训练程序,为我们下⼀步的练习做好了准备。
安卓手游辅助制作教程安卓手游辅助制作教程是一项热门的技能,可以帮助玩家在手游中获得更多优势和乐趣。
下面是一份简短的教程,介绍如何制作安卓手游辅助。
首先,我们需要准备一个开发环境。
你可以选择使用Android Studio,这是一个功能强大的开发工具,可以帮助你开发安卓应用程序。
你需要去官方网站上下载并安装Android Studio。
安装完成后,打开Android Studio并创建一个新的项目。
选择“空白活动”作为项目模板,然后为你的项目命名。
点击“完成”按钮,Android Studio将为你创建一个空白项目。
接下来,我们需要添加一个辅助模块。
在项目结构视图中,右键点击“app”文件夹,选择“新建”>“模块”。
在弹出的对话框中,选择“Android库”,然后点击“下一步”按钮。
为你的辅助模块命名,并点击“完成”按钮。
在辅助模块的“build.gradle”文件中,添加以下代码:dependencies {implementation 'com.android.volley:volley:1.1.1'}这将添加一个用于进行网络请求的Volley库。
点击“同步”按钮,等待Gradle重新构建项目。
接下来,我们需要编写代码来实现辅助功能。
你可以使用Java或Kotlin语言进行开发。
在辅助模块中创建一个新的类,并在其中编写你的代码。
你可以使用Volley库来发送网络请求,获取游戏服务器的数据。
根据游戏的特点,你可以编写代码来修改游戏数据、跳过一些游戏关卡或者获取更多的游戏资源。
记住要尊重游戏开发者的劳动成果,不要滥用辅助功能。
最后,我们需要将辅助模块添加到主应用程序中。
在主模块的“build.gradle”文件中,添加以下代码:dependencies {implementation project(':辅助模块名称')}替换“辅助模块名称”为你之前创建的辅助模块的名称。
教你如何编写游戏外挂今天石器上不去,没法调程序,写篇文章给想学写外挂的朋友参考一、先说一下写一个外挂需要什么条件 1、熟练的C语言知识目前的外挂大部分都是用BC或者是vc写的,拥有熟练的C语言知识是写外挂的基本条件2、具有很强的汇编基础一般游戏都不可能有原代码的,必须靠反汇编或者跟踪的办法来探索其中的机理,所以有强的汇编基础也是必不可少的条件3、熟练掌握跟踪和调试的工具有了上面2个条件后,掌握一些工具也是很有必要的跟踪的工具,softice当然是不二之选,至于反汇编的工具,我推荐用IDA PRO这个工具反汇编出来的代码结构清晰,非常好读如果你不具有上面的条件,还是先把基础打好,再来写外挂吧,一分耕耘,一分收获,天下没有白掉的馅饼的二、写外挂面临的基本技术问题1、修改进程的执行代码要修改进程的执行代码,要先取得进程的ID,如果是由外挂程序启动,返回值里就有进程ID,如果不是的话,需要用findwindow找到窗口句柄,再用GetWindowProcessID 取得进程ID,取得进程ID以后,就可以用writeprocessmemory来修改进程的执行代码了,使程序按照我们的意愿来执行,石器外挂里的不遇敌、寸步遇敌就是用这样的方法来实现的2、截获外挂发送和接收的封包除了通过修改代码来实现的功能以外,很多的功能都是通过修改封包来实现的,要修改封包,首先要能截获它。
第一步是要跟踪出发和收的位置,至于怎么跟踪,我以后会提到,找到位置以后,有2个办法,一是在那个位置加一个jmp语句,跳到你的处理函数位置,处理完后,再跳回来,这种方法要求比较高,需要处理好很多事情,另一种办法是往那个位置写条能造成例外的指令,比如int 3,然后用DebugActiveProcess调试游戏进程,这样每当游戏执行到那个位置的时候,就会停下来,到外挂程序里面去,等外挂程序处理完以后,用ContinueDebugEvent 继续运行程序。
手机游戏辅助制作教程手机游戏辅助制作教程手机游戏辅助是现在很多玩家都感兴趣的技术,它能够帮助玩家更轻松地通关游戏、获取更多的资源和道具。
下面就来为大家介绍一下手机游戏辅助的制作方法。
首先,我们需要准备一台电脑和一个手机。
接下来,我们需要下载并安装一款名为游戏辅助器的软件,这是一个常用的辅助制作工具。
然后,我们需要在电脑上安装该软件,并连接手机。
在手机上,我们需要打开“开发者选项”,点击“USB调试”选项,将其打开。
这样,我们的手机就可以和电脑进行连接了。
接着,我们需要打开辅助器软件,并选择要制作辅助的游戏。
在选择游戏后,辅助器软件会自动识别游戏,并显示出一些可供选择的辅助模式。
我们可以根据自己的需求选择相应的模式。
例如,如果我们想要无限金币,我们可以选择相应的模式,并设置金币的数量为无限。
完成设置后,我们需要点击“生成辅助器”,软件会自动将辅助程序制作出来。
我们需要将该辅助程序保存到电脑上,并将手机与电脑断开连接。
接下来,我们需要将辅助程序传输到手机上。
可以通过USB连接,将辅助程序复制到手机的相应目录下。
然后,打开手机上的文件管理器,找到辅助程序并点击运行。
运行辅助程序后,它将自动加载游戏,并应用我们所设置的辅助模式。
我们就可以开始使用辅助器来玩游戏了。
比如,我们可以轻松地获得无限金币,通过关卡,解锁更多的游戏内容等等。
需要注意的是,制作和使用游戏辅助器可能违反游戏规则和法律法规。
因此,在制作和使用辅助器时,我们需要明确自己的目的,并自行承担可能产生的法律风险。
总结一下,制作手机游戏辅助需要准备一台电脑和一个手机,下载并安装游戏辅助器软件,连接手机与电脑,选择游戏并设置辅助模式,生成辅助程序并传输到手机上,最后运行辅助程序并使用。
希望这个简单的教程能够帮助到大家。
教你如何制作脚本与修改器——以CS1.6为例首先要做的事情是清除原有Config,可能很多人以为删除一个Config.cfg就可以了,其实不然,要删除的文件还是非常多的。
进入CS目录下的cstrike文件夹,删除如下文件:Config.cfg,autoexec.cfg,userConfig.cfg,valve.rc。
肯定有人会说,我这里除了Config.cfg 其他三个文件都没有,这才对了,因为默认情况下就不应该有这三个文件。
然后回到上一级目录,进入cstrike_schinese文件夹、valve文件夹、valve_schinese文件夹,按照刚才的方法做一遍。
这样,第一步工作——清除原有Config就完成了。
这样做的好处就是可以让CS 在运行的时候重新生成默认的Config文件。
然后要做的事情是清除CS自带的插件,因为目前各种版本的CS1.6满天飞,很多都是经过加工后加入了各种杂乱的插件,而这些插件很有可能影响游戏的稳定,所以很有必要清除这些插件。
虽然插件可能包含很多文件,但是清除起来还是很简单的,运行记事本,用它打开位于cstrike文件夹的liblist.gam文件,把里面gamedl l一行改成如下所示。
gamedll "dlls/mp.dll紧接着要做的就是制作Config最重要的环节——设置各个参数。
运行CS,点击“`”按钮进入控制台,然后开始输入如下参数:fps_max 100hud_fastswitch 1(一键切换武器,可以根据个人喜好调整为0)hud_centerid 1 crosshair 1 cl_updaterate 100 cl_cmdrate 100 rate 20000 gamma 3 brightness 1cl_dynamiccrosshair 1(动态准星,可以根据个人喜好调整为0)_cl_autowepswitch 1(拣枪自动切换,可以根据个人喜好调整0)输入完上面的参数后,退出控制台,进入设置界面,修改键位设置以及一些游戏界面的设置。
如何编写游戏辅助工具编写游戏辅助工具是为了帮助玩家在游戏中获得额外的优势,提高游戏体验。
下面是一个简单的步骤来编写游戏辅助工具。
步骤一:确定辅助工具的类型和功能要编写游戏辅助工具,首先需要确定辅助工具的类型和功能。
辅助工具可以包括自动收集资源、自动打怪、自动升级等功能。
步骤二:选择合适的编程语言选择合适的编程语言来编写游戏辅助工具非常重要。
常见的编程语言可以选择Python、C++、Java等。
根据自己的需求和熟悉程度选择合适的编程语言。
步骤三:了解游戏的API和机制了解游戏的API和机制非常重要。
游戏的API可以提供给玩家更加方便的接口来编写辅助工具。
通过了解游戏的机制,可以更好地编写相应的辅助工具。
步骤四:编写代码在了解游戏的API和机制后,可以开始编写代码了。
首先需要写一个主函数来实现辅助工具的主要功能。
可以使用循环来实现持续的辅助功能。
如果需要自动收集资源,可以编写一个函数来自动找到资源、点击收集等操作。
步骤五:测试和调试在编写完代码后,需要进行测试和调试。
在编写代码时经常会出现一些错误和bug,需要通过测试和调试找到并修复这些问题。
可以在编写代码的同时编写一些测试用例来进行测试。
步骤六:发布和维护在通过测试和调试后,可以将游戏辅助工具发布出去供其他玩家使用。
可以选择将代码发布到开源项目中,供其他人参与修改和维护。
同时,也可以根据用户的反馈和需求来进行后续的更新和维护。
总结:编写游戏辅助工具需要确定类型和功能、选择合适的编程语言、了解游戏的API和机制、编写代码、测试和调试、发布和维护。
通过以上步骤可以编写出一个功能完善的游戏辅助工具。
同时,需要注意的是,在使用游戏辅助工具时要遵守游戏规则和道德准则,避免对游戏平衡性造成负面影响。
怎么制作游戏修改器2008-06-21 22:22游戏修改器制作-黑客入门工具:SoftICE、金山游侠2002、VC++7.0、PE查看器、SPY++测试平台:Window2000 Professional SP2首先我介绍一下将会用到的工具:1、 SoftICE(不用多说了吧,我想你应该会用)2、金山游侠2002(这个你也应该会用)3、 VC++7.0(不要求你一定会用,但至少应该会一种编程工具)4、 PE查看器(你可以随意找一个,没有也没关系,我会教你用SoftICE查看)5、 SPY++(VC里的一个查看程序信息的工具,你可以和别的,比如Delphi和C++Builder的WinSight32)然后就是你应该会的知识:1、汇编基础2、一些编程基础,至少应该看懂我介绍的几个API函数3、 PE文件结构的基础,不会也没关系,我会解释给你以上几点你都具备了的话我们就可以开始了。
我来介绍一下我要教给你的东西。
想必大家都玩过PC游吧,那么也一定用过一些专用的游戏修改器吧,比如暗黑,红警,大富翁这些经典的游戏都有它们专用的修改器,注意,我说的不是FPE之类的通用修改工具。
你试没试过用金山游侠修改红警二的金钱?如果有的话你应该知道每玩一次就要改一次,因为这个游戏是动态分配内存的,每次重新开始都会改变。
所以你会选择到网上去下载一个专用的修改器,那么你有没有想过自己做一上呢?想过?那你为什么不做?什么不会?那就好办了,看了这篇教程你就会了:D费话少说,我来讲一下原理。
有一些经常修改游的朋友一定会知道,不论游戏中“物品”的内存地址是否是动态的,物品与物品之间相隔的距离都是不变的,我拿“楚留香新传”为例,我先用金山游侠查找内力值的内存地址,找到的结果是:79F695C,再查找物品“金创药”的地址是:328D1DC,现在我用79F695C减去328D1DC,得到:4769780,这个数就是内力值与金创药的偏移值,没看懂?接着看呀,我还没说完呢,现在重新再运行游戏,查找内力值的地址,得到:798695C再查找金创药得到的地址是:321D1DC,两个值的内存地址都改变了,但是用你内力值的地址减去金创药的地址得到的结果是什么?没错,还是4769780,也就是说,无论这两个值的内存地址变成多少,它们之间的距离是永远不变的,不光是这个游戏,一般的游戏都是,至少我没见过不是的:D上面讲的东西总结出一个结论,那就是我们只要得到这两个地址中的任何一个,就可以得到另外一个,只要你知道它们之间的偏移量是多少。
我们第一步要做的就是得到这个地址,但是内存中的地址是动态改变的,得到也没有用,这里我就教你把它变成静态的,叫它永远都不变!我继续拿“楚留香新传”为例,如果你有这个游的话就跟我一起做,没有的也没关系,只要看懂这几个步骤就行了。
开工!首先进入游戏,查找内值的地址,得到的是:798695C(不知道为什么这上游并不是每次重起都改变内存地址),按Ctrl+D打开SoftICE,下命令:BPM 798695C W(写这个地址时则中断),回到游戏中,打开人物属性面板,游戏中断了,在SofitICE中你会看到这条指令:0047EB17 MOV EAX [EDX+000003F4] 下命令:D EDX+3F4将看到内力值0047EB1D PUSH EAX………………………………………………………………从上面可看出0047EB17处的指令是将内力值的指针送到EAX寄存器中,这是一个典型的寻址方式,设想一下,我们是到了EDX中的基址,那么无论什么时候只要用EDX+3F4就可以轻松的得到内力值的地址,因为000003F4是一个常量,它是不会改变的,改变的只是EDX中的地址,所以只要有办法得到EDX中的值就什么都好办了,你明白了没有?如果还是不懂,那么请再看一遍。
现在要做的就是如何得到这个值,下面我教给你如何做:我的办法就是设计一段代码,把EDX中的值存放到一个地址中,然后运行这段代码,再返回游戏的原有指令继续执行,什么?补丁技术?SMC?随你怎么说啦,只要运行正常就一切OK啦:D实际操作:首先在程序中找一段空白处来存放我们设计的代码,很简单,只要懂得一些PE 文件结构的朋友都会知道,一般在EXE文件的数据段(.data段)的结尾都会有一段缓冲区,我们可以在这段区域中写任何东西,当然你也可以用“90大法”找一段空白区,但我还是推荐你用我教给你的方法。
上同我提到,如果你没有PE文件查看工具我可以教你用SoftICE查看,而且很简单,只要一个命令:MAP32 “模块名”,看一下我是怎么做的你就知道了。
Ctrl+D呼收出SoftICE,然后下命令:MAP32 CrhChs,这时你应该看到EXE各个段的信息,我们要注意的只是.data段,既然要找的是数据段的结尾,那么我们就从下一个段开始向上找,如下:.data 004FB000.rsrc 00507000.data的下一个段是.rsrc段,它是从00507000开始的,也就是说以00507000为基础向上一个字节就是数据段的结尾,我所择从00506950处开始写代码,说了这么半天那么我们的代码到底是什么样子呢?修改后的指令又是什么样的呢?别急,请看下面:修改0047EB17后代码:0047EB17 JMP 00506950 //跳到我们的代码中去执行0047EB1C NOP //由于这条指令原来的长度是6字节,而修改后的长度是5个字节,所以用一个空指令补上0047EB1D PUSH EAX//我们的代码:00506950 MOV DWORD PTR EAX,[EDX+00003F4] //恢复我们破坏的指令00506956 MOV DWORD PTR [00506961],EDX //把EDX保存以00506961中去0050695C JMP 0047EB1D //返回原来的指令去执行把上面的代码用SoftICE的A命令写入,OK!现在我们试一下运行的效果,你现在用金山游侠搜索一下内力址的地址,什么又变了?那就地啦,它要是不变我们还用费这么大劲儿吗?记下这个地址返回到游戏中去,Ctrl+D呼出SoftICE,下命令 D *[00506961]+000003F4,在数据窗口看到什么了?呵呵,没错,看到了你刚才记住的那个地址,里面的数值正是内力的值,试着改一下,回到游戏中,呵呵,内力值变了吧:D讲到这里,我们的工作已经完成了%90,但别高兴的太早,后面的%10要远比前的%90花的时间长,因为我们要用编程实现这一切,因为你不能每次都像刚才那样做一次吧!现在我来说一下编程的步骤:首先用FindWindow函数得到窗口句柄,然后用GetWindowThreadID函数从窗口句柄得到这个进程的ID,接着用OpenProcess得到进程的读写权限,最后用WriteProcessMemory和ReadProcessMemory读写内存,然后。
呵呵,你的修改器就做成啦:D下面是我抄写以前写的修改器源程序片断,第一部分是动态写入刚才的代码,第二部分是读取并修改内力值,由于我没有时间整理和测试,所以不能保证没有错误,如果大家发现有遗漏的话,可以在QQ上给我留言或写信给我,代码如下: 有几点请大家注意:1、写机器码时要一个字节一个字节的写2、注意要先写入自己的代码,然后再修改游中的指令(下面的代码没有这样做,因为不影响,但是你应该注意这个问题)#define MY_CODE5 0x00#define MY_CODE6 0x90//00506950#define MY2_CODE1 0x8B#define MY2_CODE2 0x82 //这部分是要写入的机器码的常量定义#define MY2_CODE3 0xF4#define MY2_CODE4 0x03#define MY2_CODE5 0x00#define MY2_CODE6 0x00#define MY3_CODE1 0x89#define MY3_CODE2 0x15#define MY3_CODE3 0x61#define MY3_CODE4 0x69#define MY3_CODE5 0x50#define MY3_CODE6 0x00#define MY4_CODE1 0xE9#define MY4_CODE2 0xBC#define MY4_CODE3 0x81#define MY4_CODE4 0xF7#define MY4_CODE5 0xFF//-----------------------------------------------------------------------------//DWORD A1 =MY_CODE1;DWORD A2 =MY_CODE2;DWORD A3 =MY_CODE3;DWORD A4 =MY_CODE4;DWORD A5 =MY_CODE5;DWORD A6 =MY_CODE6;DWORD B1 =MY2_CODE1;DWORD B2 =MY2_CODE2;DWORD B3 =MY2_CODE3; //这部分是变量的定义DWORD B4 =MY2_CODE4;DWORD B5 =MY2_CODE5;DWORD B6 =MY2_CODE6;DWORD C1 =MY3_CODE1;DWORD C2 =MY3_CODE2;DWORD C3 =MY3_CODE3;DWORD C4 =MY3_CODE4;DWORD C5 =MY3_CODE5;DWORD C6 =MY3_CODE6;DWORD D1 =MY4_CODE1;DWORD D2 =MY4_CODE2;DWORD D3 =MY4_CODE3;DWORD D4 =MY4_CODE4;DWORD D5 =MY4_CODE5;//--------------------------------------------------------------------------//HWND hWnd =::FindWindow("CRHClass",NULL); //得到窗口句柄if(hWnd ==FALSE)MessageBox("游戏没有运行!");else{GetWindowThreadProcessId(hWnd,&hProcId); // 从窗口句柄得到进程ID HANDLE nOK=OpenProcess(PROCESS_ALL_ACCESS|PROCESS_TERMINATE|PROCESS_VM_OPERATIO N|PROCESS_VM_READ|PROCESS_VM_WRITE,FALSE,hProcId); //打开进程并得到读与权限if(nOK ==NULL)MessageBox("打开进程时出错");else{//0047EB17WriteProcessMemory(nOK,(LPVOID)0x0047EB17,&A1,1,NULL); WriteProcessMemory(nOK,(LPVOID)0x0047EB18,&A2,1,NULL); WriteProcessMemory(nOK,(LPVOID)0x0047EB19,&A3,1,NULL); WriteProcessMemory(nOK,(LPVOID)0x0047EB1A,&A4,1,NULL); WriteProcessMemory(nOK,(LPVOID)0x0047EB1B,&A5,1,NULL); WriteProcessMemory(nOK,(LPVOID)0x0047EB1C,&A6,1,NULL);//00506950WriteProcessMemory(nOK,(LPVOID)0x00506950,&B1,1,NULL); WriteProcessMemory(nOK,(LPVOID)0x00506951,&B2,1,NULL); WriteProcessMemory(nOK,(LPVOID)0x00506952,&B3,1,NULL); WriteProcessMemory(nOK,(LPVOID)0x00506953,&B4,1,NULL); WriteProcessMemory(nOK,(LPVOID)0x00506954,&B5,1,NULL); WriteProcessMemory(nOK,(LPVOID)0x00506955,&B6,1,NULL);//第二句WriteProcessMemory(nOK,(LPVOID)0x00506956,&C1,1,NULL); WriteProcessMemory(nOK,(LPVOID)0x00506957,&C2,1,NULL); WriteProcessMemory(nOK,(LPVOID)0x00506958,&C3,1,NULL); WriteProcessMemory(nOK,(LPVOID)0x00506959,&C4,1,NULL); WriteProcessMemory(nOK,(LPVOID)0x0050695A,&C5,1,NULL); WriteProcessMemory(nOK,(LPVOID)0x0050695B,&C6,1,NULL);//最后一句WriteProcessMemory(nOK,(LPVOID)0x0050695C,&D1,1,NULL); WriteProcessMemory(nOK,(LPVOID)0x0050695D,&D2,1,NULL); WriteProcessMemory(nOK,(LPVOID)0x0050695E,&D3,1,NULL); WriteProcessMemory(nOK,(LPVOID)0x0050695F,&D4,1,NULL); WriteProcessMemory(nOK,(LPVOID)0x00506960,&D5,1,NULL);CloseHandle(nOK); //关闭进程句柄}}}///////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////读取并修改内力值DWORD hProcId;HWND hWnd =::FindWindow("CRHClass",NULL);if(hWnd ==FALSE)MessageBox("No");else{GetWindowThreadProcessId(hWnd,&hProcId);HANDLE nOK=OpenProcess(PROCESS_ALL_ACCESS|PROCESS_TERMINATE|PROCESS_VM_OPERATIO N|PROCESS_VM_READ|PROCESS_VM_WRITE,FALSE,hProcId);if(nOK ==NULL)MessageBox("ProcNo!");else{DWORD buf1;DWORD write;BOOLOK=ReadProcessMemory(nOK,(LPCVOID)0x00506961,(LPVOID)&buf1,4,NULL); //读取我们保存EDX中的基础if(OK ==TRUE){write =buf1+0x000003F4; //得到内力值的地址DWORD Writeed =0x00; //要修改的数值BOOL B =WriteProcessMemory(nOK,(LPVOID)write,&Writeed,1,NULL);if(B==FALSE)MessageBox("WriteNo");}}CloseHandle(nOK);}啊,写的我手都麻啦,今天就到这里了,才疏学浅难免会有遗漏,请大家指教,如果我不会或不喜欢用VC的话,你可以在QQ上与我交流,我可以教你如何用Delphi、C++Builder、Win32Asm或VC实同上面的功能。