特朗普的粉丝 发表于 2019-10-14 19:17:33

从零开始学会NS金手指 原理到制作

从零开始学会NS金手指 原理到制作
我的目标就是我要为我自己做一个ARMS的金手指
顺便告诉大家原理和实现方法


原理部分非常重要的基础理论是学习金手指制作的内功心法


1、数据类型
所有数据都是由某个数据类型构成

有1字节 2字节 4字节 8字节的区别
可以记载的数据量 不一样 比如1字节 只能记录256个数据 即0-255
相关数据请自行百度学习篇幅问题这里只做概述


2、基址 偏移量
从修改器开始到现在 游戏的变革导致每次开局游戏 游戏地址都会变化
所以使用了C++指针的概念作为偏移前的 基址(全称从来没有人告诉过我我一直称之为“基础地址”)
在PC端的 常用表达式为+2FC这样的表达式& N* t0 U9 u9 D" r' D
其中 00041000为基址
2FC 为偏移量
篇幅问题想了解更多的 请自行百度这里只是让你知道知道有那么个概念
我们的目标是做金手指的

3、SXos金手指的9个运算符
0:写入内存
1:条件语句
2:条件语句的结束
3:循环
4:加载寄存器的值
5:从内存加载寄存器值
6:将值存储到寄存器的存储器地址
7:应用算术运算进行注册
8:检查按下的按钮


下面我要直接用现成的金手指 来解说 这9个运算符号的作用了
更多的关于运算符的使用请看我附件上传的SXos金手指使用说明书 的google汉化版本


这个是 玛丽 奥德赛 的金币金手指代码

580f0000 0264af58
780f0000 004ff8a0
640f0000 00000000 0000270f


要制作金手指首先要知道这个金手指的结构是什么
AAAAAAAA BBBBBBBB
首先A字段 是命令声明符号   这段话说明了 这一行的代码 所使用的 命令 和 长度等声明
B字段就很简单了 就是 地址


580f0000 0264af58
第一段580f0000      5:从内存加载寄存器值
读取8字节 数据从寄存器
第二段0264af58      要读取的地址位置0264af58


780f0000 004ff8a0


第一段780f0000       7:应用算术运算进行注册
7807进行运算处理8代表了 还是8个字节    这里注意这个0这里它表示是要做加法运算
第二段是要加上多大的数值    就是偏移量


然后 这里总结一下 这样一来就实现了PC端常见的表达式的这样一个运算
+004ff8a0
这么一来   我们也就算清楚了真正的地址位置 到底是在哪里?


640f0000 00000000 0000270f
第三句就是写入数据
第一段640f0000    6:将值存储到寄存器的存储器地址
不知道为什么 这里选择写入的4字节我觉得应该是金币只能够9999   270f是十六进制的 9999
理论上这个640f0000和680f0000是一样的效果又或者是只会写入声明的长度后面的8字节数据是预留的


第二段 00000000 0000270f这个要作为一个整体看这是一个8字节长度的整数
前面4字节是00000000是空的可以不理会后面4字节 0000270f就是10进制的9999了


未完待续...因为我还没开始做呢目前先讲解一下原理


制作部分这里就相对的简单了但是不了解原理的话看着直接就是懵的

1、搜索地址
模糊搜索 和 精确搜索    在搜索内存的时候有着这样的两种搜索模式
一种是绝对的 已知的值另外的就是 不知道的的只知道可能是往某个方向变化的值
可以使用逻辑关系符表达 大于、小于、等于、不等于、区间值(0-100之间)、增加、减少了多少(绝对量)


2、确定地址
首先就是要进入SXos搜索了这里不演示复杂的搜索方法
使用绝对化的 可视的数值进行搜索

选用的游戏是 神臂斗士

我的内存卡是exFat的使用金手指 会出现警告提示
exfat SDcard not supported yed(大意 仍然不支持exfat格式的内存卡)
我们选择lgnore warning(忽略错误)不管他我又不读写内存卡 对吧?


打开之后会询问你 使用模糊搜索还是准确搜索模糊搜索是需要读写内存卡的我这里不用
我们选择 exact 精确搜索   输入对应的数值


这里需要把10进制转换为16进制来搜索这里是教做金手指的 详细的转换方法自行百度




一般来说 第一次搜索之后会出现
too many hits left (太多 点击左键继续)
这里它告诉你找到的地址太多了 不能够给你显示查看请继续确定地址到小范围内


直到出现
you can now view the candidate list(你现在能够查看数据列表)


那么我们就过去看看是什么一个情况




因为找到了4个地址我也不确定谁是对的
干脆全改了   直接编辑RAM 运行内存修改为 bd 06(原本bd 05 对应10进制整数1469)
bd 06 对应10进制整数1725我修改了一下返回界面查看 确实就修改成功了这就是我们要找到的地址数据




最后我还调皮的改了一下 bd ff = 65469再度确认了 这个是没问题的




3、理清编写表达式的逻辑

最后我们直接编写表达式 来进行制作 不过我最终的金手指并没有做出来
为什么呢?因为这里的地址有两种状态我没有进一步的寻找准确的静态地址(这个太费时间了就交给以后的我慢慢完成吧)

MAIN=可靠的静态地址
HEAP=动态地址

刚刚我们找到的地址里 能够成功修改 游戏的数据的 实际上是HEAP动态地址 他是不可靠的
每次启动游戏 都要使用上诉提及的通过静态地址 重定位的方式来找到 HEAP动态地址 然后计算偏移值确定最终地址
理论上HEAP动态地址 是允许多次偏移的所以也会有可能在以后的游戏出现 [+2fc]+100这类的多级偏移

4、完成编写

最后 我就开始 直接写了最好使用英文来写(这个地址 目前应是可以准确读取 金币数量的)
写入更改数量应该是不行的请自行测试教学结束了(遇到不懂的 地方请百度和查看我上传的使用说明书)

580F0000 014c7de0
620F0000 0000FFFF



SaviorByd 发表于 2020-2-20 15:23:50

真心牛皮

eye2049 发表于 2020-3-11 14:42:51

我下载了AB,2个宝可梦金手指,2份金手指中,A能遇闪光,B不能,B能经验倍数,A不能。然后我将AB能用的代码黏贴复制在新的txt文件中,居然不能使用(或者直接在原来的金手指txt文件中添加或删除的话会直接出红色代码死机),请问是咋回事啊?


我下载了AB,2个宝可梦金手指,2份金手指中,A能遇闪光,B不能,B能经验倍数,A不能。然后我将AB能用的代码黏贴复制在新的txt文件中,居然不能使用(或者直接在原来的金手指txt文件中添加或删除的话会直接出红色代码死机),请问是咋回事啊?

clk_gameboy 发表于 2020-6-26 23:11:00

eye2049 发表于 2020-3-11 14:42
我下载了AB,2个宝可梦金手指,2份金手指中,A能遇闪光,B不能,B能经验倍数,A不能。然后我将AB能用的代码 ...

不要用文本文档编辑,而是使用EditPlus 5编辑;

编辑完成后另存为副本,确保编码为UTF-8,这样系统才能识别金手指。

paopaolyn 发表于 2020-7-6 11:00:30

EditPlus 5编辑

奥斯达地方 发表于 2020-7-27 16:30:12

老板NB,授人以鱼

zhaohm 发表于 2020-9-2 23:50:26

1.2.0 使用老板的穿墙很好用,特别有些东西复制出来,不小心扔在地上,捡不起来必须穿墙捡。但是现在升级到1.4.2了 。游戏地址更新了,新的地址老板如何找到能否说一下

zhaohm 发表于 2020-9-2 23:52:34

动物森友会 1.2.0 使用老板的穿墙很好用,特别有些东西复制出来,不小心扔在地上,捡不起来必须穿墙捡。但是现在升级到1.4.2了 。游戏地址更新了,新的地址老板如何找到能否说一下,这个是老板提供的1.2.0
[穿墙 L+Y开启]
80000048
04000000 00E95E50 12800014
20000000

[穿墙 L+A关闭]
80000041
04000000 00E95E50 B9538014
20000000

zcf1996 发表于 2020-9-4 14:11:45

求更新帖子找静态

z860368871 发表于 2020-10-26 13:41:05

看了LZ的帖子,我只想说一句很好很强大!
页: [1] 2
查看完整版本: 从零开始学会NS金手指 原理到制作