起因是我在玩东方幕华祭-永夜,难度虽然不高,但是不便于练习,搜了一圈也没有合适的修改器,用ce初步探测了一下发现每局开始后的残机等地址都会变动,应该是动态地址了,因此现场学习,边学边搜,也是学会了怎么去捕捉静态内存地址了~
前言
教程为自己摸索学习的经验,如有不对的地方欢迎指出,文末留言接入到邮箱提醒我会及时来查看。
如果想修改的游戏的某些值直接就是静态内存,那无需像本文一样麻烦;或者是临时修改用的话,也不需要去捕捉静态内存。之所以要做这些操作,是想着一次封装,后续开箱即用,或者分享给朋友一起用,而不需要每次都扫描半天数值。
本文提供的游戏案例仅供参考,其他游戏同理需自行摸索。这次我们以修改“残机”数为例,开始这次的经验分享。
工具环境
- Cheat Engine v6.7
- 示例游戏:东方幕华祭-永夜篇 v1.0
操作记录
步骤一:找到“残机”内存地址
0、关于ce修改器的布局,本文以下图的布局说明去介绍。
1、打开ce,打开游戏。ce打开进程选择该游戏。
2、在修改之前我们需要了解该游戏的数值类型。从游戏说明中得知,本作的“残机”数为5个“月光团子”合成,同时经网上其他大佬验证也是如此。因此这里的残机数并非是2,而是2*5=10,符卡同理。
3、进入游戏,任选一个难度和自机,进入正式关卡,然后马上暂停游戏。
4、切换到ce,在数值框输入10,并点击“首次搜索”,会搜到较多内容。
5、回到游戏,操作自机撞子弹死一次,然后再回到ce。在ce数值框输入5,点击“再次扫描”,左侧结果栏会变少很多。
但我们要最精确的一条地址,因此需要重复操作让自机死一次,再输入数值0并再次扫描,一般三次之后就能筛选出一条地址。
6、双击该地址,随后会在下方地址列表中出现。此时成功获取到了对应“残机”数的动态地址。双击下面列表的“数值”列里面的“0”,修改成50,回到游戏可以看到残机数满了(残机和符卡最大是50)。如果仅是临时修改的话,到这一步可以结束了,在列表前面的“激活”框里面打钩可以实现“死亡不扣血”的锁血操作。但是重新开局游戏或者退出重新开游戏,地址就无效了,需要重新重复步骤一。
步骤二:使用指针扫描器找到基址
0、ce提供的指针扫描器非常好用。如果不使用扫描器,只能靠传统的进内存地址然后打中断一点一点排查。当然我一开始就是用这种老方法,但是由于对汇编的不熟悉以及一个个中断比较麻烦,因此我选择使用指针扫描器,实际测试在该游戏里面只需要执行一次即可获得基址与偏移量。
1、完成步骤一后,回到ce。双击下方地址列表中刚刚获取到的那一条地址,双击“地址”那一列中的十六进制值,将地址复制下来,如本文的“2D02B618284”,再关闭窗口。
2、点击地址列表左上方的“查看内存”,进入到内存查看器页面,随后打开上方的工具-“指针扫描器”,进入扫描器页面。
3、在指针扫描器页面,点上方的“指针扫描器”-“扫描指针”选项,打开选项页面。在上方的输入框中输入刚刚复制的地址,如本文的“2D02B618284”。其他选项无需修改(我一开始学习尝试的时候修改过一些选项,但是后面发现影响不大),点击确定,会提示保存一个文件,可以放一个临时的地方,后面再去删除它。(一般来说文件不会太大,比如本次修改只占用了3kb,但有时文件会非常大,因此注意清理)
4、在文件选择后,会立刻开始扫描,扫描时间和性能等有关,等待扫描完成。
5、扫描完成后,会出现如下图一样的很多地址。
6、双击选取任意一个基址为“"THREADSTACK0"-0000????”的地址,会显示在ce主窗口的地址列表中,此时该列表中的“指针扫描结果”对应的地址列应该是“P->xxxxxx”格式,意味着地址映射成功,此时可以删除之前的那一条动态地址,并双击描述栏,将其改名为更通俗易懂的名字,如“残机数”,将数值设置为50。可以尝试重新开启关卡或者重启游戏,将ce重新打开进程(重新打开进程时记得选保留列表,否则地址列表会被清空),进入游戏,可以发现该地址动态映射成功,可以直接修改残机数。
7、成功之后,可以点击ce上方的保存图标,将.CT文件保存起来。下次在ce打开游戏进程后会自动询问要不要加载之前保存的配置文件,这样一来就可以方便的直接使用而非重新去扫描了。
步骤三:制作修改器
0、这一步可选,在社区里面一般有直接分享.CT文件的,别人可以用安装好的ce去加载该文件实现快速修改,但是如果想使用起来更方便等,可以打包成单个exe,并使用快捷键去实现操作。
1、在ce的上方打开文件-从表单中生成通用修改器Lua脚本,打开“修改器生成器”,在左侧可以添加热键。
2、我们来尝试添加一个热键,来实现锁满符卡数和符卡数+1。首先点击左下角添加热键,选择我之前添加好的“符卡数”项目。接着弹出设置弹窗,点一下热键那边,然后按下快捷键,如Fn系列的快捷键,我们这里使用F3来切换。在描述框填写功能用途,并可选择激活和非激活声音以做提醒。最后点击应用,即可添加完成。
3、再创建一个热键,设置好快捷键。模式下拉框选择数值增加,填入5,并修改描述和音效,即可实现按一次增加一个符卡。
4、假设我们已经完成了全部修改内容的编辑。回到“修改器生成器”。选择要修改的程序名称、修改器软件的标题等内容,也可以选择右侧的"使用者手动设计界面"完全自定义UI。
5、在完成设计后,点击生成修改器(默认exe格式),选择保存路径。选择后,弹出“制作exe修改器”页面。可以选择“微型”大小,减少一些依赖和功能。“更改EXE图标”可选,如果未选择图标直接保存,可能会报错“图标更新错误”,但是不影响导出,可以前往文件夹直接打开修改器。
6、这类直接导出的修改器一般要求先运行游戏,再打开修改器,否则会初始化失败;或者在修改器lua代码增加循环判断等。在游戏打开后运行修改器,尝试在玩游戏时按下快捷键增加残机或符卡数,测试使用效果。
7、这里看修改器的界面会很奇怪,可以在ce中再次进入“修改器生成器”,使用自定义界面拉高标签文本显示,或自行设计界面,使其更美观实用。
本文到此结束,自学了两三个小时的经验总结完成~