TA的每日心情 | 奋斗 2024-1-12 16:13 |
---|
签到天数: 2 天 [LV.1]初来乍到
VIP会员
- 积分
- 819
|
前言: 在这方面我只是个新手, 今天才刚刚学会的.
这主要是用来开发ASM金手指的工具, 需配合大气层最新版本 v1.2.4 方可
本文重点: 当你找到一个地址后,如何把它改为ASM金手指?
建议安装 NOEXES (这是最新版本,兼容GDBstub)
需要重启大气层
还有,重启前记得修改大气层setting,加一句才可让GDBstub生效
enable_standalone_gdbstub = u8!0x1
之后你可以正常游戏,打开NOEXES找寻一个要修改的地址
以下我用 Noexes找到的 0x571C477C40 生命值作为例子
具体步骤:
安装 devkitPro https://github.com/devkitPro/installer/releases
在 CMD 打开 C:\devkitPro\devkitA64\bin\aarch64-none-elf-gdb.exe
输入 target extended-remote 192.168.1.94:22225 <<< 其中192.168.1.94为你的SWITCH IP
输入 info os processes <<< 可列出现在有哪些PROCESS (这个跟NOEXES看到的一样)
输入 attach 135 <<< 这个135是游戏的Process ID,通常是上表列出的最后一个ID
输入 x 0x571C477C40 <<<< 可以查看这地址的内容
输入 x/u 0x571C477C40 <<<< 可以用看到十进制内容
输入 set {int}0x571C477C40 = 100 <<<< 这句意思是把该地址的值设为100 (这只是教学,平常不用这样做的)
输入 watch *0x571C477C40 <<<< 设定一个 breakpoint (只查看甚么地方写入这地址. 如果你想查看甚么位址存取这个,可以改为awatch)
输入 c 或者 continue 让停止了的游戏继续
随便玩一下,当生命扣减时,这游戏就会停顿,我得到以下内容
Thread 2 "MainThread" hit Hardware watchpoint 1: *0x571C477C40
Old value = 100
New value = 90
0x00000004b58fc3a4 in ?? ()
重点就是最后这个 4b58fc3a4, 要知道他的意思可输入
monitor get mapping 0x04b58fc3a4
得到以下内容:
0x04b5404000 - 0x04b7d9bfff r-x Code ---- [0, 0]
用小算盘的程式设计人员工具计一下
0x04b58fc3a4 - 0x04b5404000 = 0x4F83A4
所以我已知道 main+4F83A4 就是我要找的答案
在 IDA PRO 确认一下, 正是那里
至于如何改ASM,或者怎做金手指.
你可参考以往我们做的金手指,
经常都是用NOP代替了STR写入那一句. 可以做出那些 XX不减 的金手指
又或者把 ADD w0, w1, w2 改为 ADD w0, w1, w2, LSL 3 便成為 XX增加倍率
至于敌我判断,就需要更深一层经验与及更多时间去分析了.
|
|