以下内容完整转载自:超绝可爱陆陆酱 原创发布:【工具教程1】使用Breeze在switch实机上对游戏进行汇编修改
Breeze这款新的金手指软件出来也有一段时间了,相比edizon-se的功能强大太多了,但好像用的人不多。
接下来我举个简单的例子,在不使用电脑辅助的情况下,仅在机器上,进行汇编修改,从数值搜索,到金手指完成的一个完整过程。
前期准备
1、switch端下载并安装Breeze最新版(beta66)
https://github.com/tomvita/Breeze-Beta/releases/
2、修改大气层设置
文本形式打开SD Card/atmosphere/config/system_settings.ini
在[atmosphere]的末尾添加
enable_standalone_gdbstub = u8!0x1
enable_htc = u8!0x0
这两句
3、机器上打开Breeze,选择settings→Install gen2 fork 安装gen2菜单,安装完成以后,重启机器。
大气层1.4.1可能会出现,按装gen2的按钮灰色的情况。只需要进入switch/breeze目录,找到gen2.zip,解压出来,把010000000000d609复制到 atmosphere/contents下,手动安装,再重启即可。
准备完成,开始修改
接下来我要改的是月姬格斗最新版(1.4.1),修改cp的过程,也就是修改货币,钱之类的东西同理。
先把数值搜索出来。
此时我的CP是6750,然后退回主页,从相册打开Breeze。
依次选择SearchManager(搜索菜单),Search Setup(搜索方式,数据类型u32,搜索条件==)
接下来选择Edit A 填写要搜索的数值,我这里是6750,填进去,选择Start Search 开始首次搜索
搜索速度非常快,比edizon快几十倍,这就是Breeze强大的其中一点。
按下L可以显示搜索的结果
我这里搜索出来只有3个,如果有的游戏要多次搜索的话,就进游戏让数值变动,再选择Edit A,修改要搜索的数值,用Continue Search(继续搜索),找到你需要的地址为止。搜索数值,什么软件都差不多其实,这里不详细讲了,没什么意思。
由于我之前做过这游戏的金手指,所以一看我就知道M(main)+0A04FB60,就是储存CP的地址,这游戏大多数数值都保存在main区间,heap区间那两个肯定不是,main的地址是可以直接当做金手指的,但我现在讲的是用汇编的方法去修改。
按方向键把光标移动到M+0A04FB60这一行上,按“+”键,给这个地址命名,并添加到Bookmark(书签)。
接下来进入书签界面,可以看到刚才保存的地址。
选择Memory Explorer(内存管理器),界面有点大,档住视线了,按ZL、ZR可以缩小。
再选择Expand menu(扩展菜单)。
再选择下面的SetBreakPoint(设置断点)。
接下来就会自动跳转至gen2界面,左边界面光标选中第二行(就是刚才我找到的CP对应的地址),可以用ZL+↑ ZL↓来开关切换断点触发的条件,开启之后左边会有显示,W就是write,写入断点。R就是read,读取断点。
我这里仅开启W的断点,至于为什么,E大的教程里有讲过,这里不再讲一遍了。
回到正题,断点类型设置好之后。
按+激活断点,此时Breeze背后的游戏背景会消失。左边界面光标移动到第二行,按R键将地址载入,此时第三行就会从00000000变成第二行的地址,这个时候断点已经准备完毕。
切换回游戏,让CP变动,使断点触发。
买了一个东西之后,断点触发了。
再次打开Breeze,此时会看到,左边那里多了一行
[M+0x001ce108] STR W19 [X20,#0x1a8]
这就是用断点捕捉到程序了,在这一行按X键即可查看程序。
程序的意思是将W19,写入到[X20,#0x1a8] 这个位置,也就是说我要改的这个CP,是从W19写进刚才找到的M+0A04FB60这个地址的。
先按“-”把断点关掉,然后开始分析程序。
首先就是要看W19,从哪里来的。
使用右边界面的page up 往上翻一下。
好像只有一句有关,M+0x1ce0ec mov w19,w0
说明W19又是从W0传过来的,再往上翻找不到相关的程序了。
说明W0并不在这附近计算,而是从别的地方传过来的。
那么Breeze目前功能有待完善,做溯源终归是不如ida pro方便的,但问题不大,并不妨碍我修改。
再来看这句,M+0x1ce0e8 LDR W8 [x20,#0x1a8]
[x20,#0x1a8],这个位置上面讲过了,是cp的位置,加载进W8里,唯一跟W8有关的就是下一句
M+0x1ce0f0 subs w1 ,w8,w0,意思是将W8减去W0的值赋值给W1,再配合看下一句,M+0x1ce0f4 b.ls,基本上就看懂了整段程序的意思,大概是用于判断CP是否足够买东西用的。
这三句没什么用,我就拿这三句来改。
M+0x1ce0e8
M+0x1ce0f0
M+0x1ce0f4
修改之前,先把程序原来的样子,添加进金手指,这就是还原码,关金手指用的。
左边界面选中对应行,再按ZL+Y,添加进金手指。
这三行分别命名为
Restore code1、2、3。
然后开始修改
第一行修改为 mov w19,5431 将5431给W19赋值
第二行修改为 mov w0,1000
将1000给W0赋值
第三行修改为 mul w19,W19,W0
将W19乘W0的值给W19赋值
最后再配合下面的[M+0x001ce108] STR W19 [X20,#0x1a8]
将我修改的值,写回内存里。
所以最终写入的值会是5431×1000=5431000
那么修改完成,返回游戏看看效果
修改成功,跟我想的一样,接下来就可以把,修改过的程序,按ZL+Y添加进金手指,依次命名为 cphack1、2、3。
到此,就修改完了。
最后添加过的金手指会在
SD Card/switch/breeze/cheats/TID/BID.txt
下
自动生成对应的金手指文件,再稍微编辑整理一下,就可以打包发到网上分享给大家了
如您从本文得到了有价值的信息或帮助,请考虑扫描文末二维码捐赠和鼓励。
如本文对您有用,捐赠和留言 将是对我最好的支持~(捐赠可转为站内积分)
如愿意,请向朋友推荐本站,谢谢。
尊重他人劳动成果。转载请务必附上原文链接,我将感激不尽。
留言