jiangzhengwenjz 发表于 2015-8-10 12:08:44

技能机无限

本帖最后由 jiangzhengwenjz 于 2016-11-24 12:20 编辑

限于火红版,这个其实是之前所做的事了,虽然老外做过了但自己试一下也不坏。

制作之前先要明确目的:
1. 不显示数量(伪HM)
2. 使用后不删除
3. 【易忽略】不能携带

1. 数量较难断,于是对HM图标的数据下断(通过内存数据得到位置)或是直接搜索0xe99118的指针得到读取HM图标的源码位置是x1335b0

    反追踪一次得到调用位置是x131efa,注意到在x131eac获取了技能机的数量,后面的程序进行转码和写入内存,因此我们只需跳过这段代码。

    也就是HM:不读取数量,读取图标。TM:不读取数量,也不读取图标。这里给出这个程序的源码:ROM:08131E68               PUSH            {R4-R7,LR}
ROM:08131E6A               MOV             R7, R9
ROM:08131E6C               MOV             R6, R8
ROM:08131E6E               PUSH            {R6,R7}
ROM:08131E70               SUB             SP, SP, #0x14
ROM:08131E72               LSLS            R0, R0, #0x18
ROM:08131E74               LSRS            R0, R0, #0x18
ROM:08131E76               MOV             R9, R0
ROM:08131E78               MOV             R7, R9
ROM:08131E7A               LSLS            R2, R2, #0x18
ROM:08131E7C               LSRS            R2, R2, #0x18
ROM:08131E7E               MOV             R8, R2
ROM:08131E80               MOV             R4, R8
ROM:08131E82               MOVS            R0, #2
ROM:08131E84               NEGS            R0, R0
ROM:08131E86               CMP             R1, R0
ROM:08131E88               BEQ             loc_8131EFE
ROM:08131E8A               LSLS            R0, R1, #0x10
ROM:08131E8C               LSRS            R6, R0, #0x10
ROM:08131E8E               MOVS            R0, #4
ROM:08131E90               MOVS            R1, R6
ROM:08131E92               BL            sub_809A798 @获得道具id
ROM:08131E96               LSLS            R0, R0, #0x10
ROM:08131E98               LSRS            R0, R0, #0x10
ROM:08131E9A               BL            sub_809A990 @检测
ROM:08131E9E               LSLS            R0, R0, #0x18
ROM:08131EA0               LSRS            R5, R0, #0x18
ROM:08131EA2               CMP             R5, #0
ROM:08131EA4               BNE             loc_8131EF4 @是HM,不读取数量而去读取图标
ROM:08131EA6               LDR             R4, =0x2021CD0
ROM:08131EA8               MOVS            R0, #4
ROM:08131EAA               MOVS            R1, R6
ROM:08131EAC               BL            sub_809A7B4 @获取数量
ROM:08131EB0               MOVS            R1, R0
ROM:08131EB2               LSLS            R1, R1, #0x10
ROM:08131EB4               LSRS            R1, R1, #0x10
ROM:08131EB6               MOVS            R0, R4
ROM:08131EB8               MOVS            R2, #1
ROM:08131EBA               MOVS            R3, #3
ROM:08131EBC               BL            sub_8008E78 @转换代码&写入内存
ROM:08131EC0               LDR             R4, =0x2021D18
ROM:08131EC2               LDR             R1, =0x84162B9
ROM:08131EC4               MOVS            R0, R4
ROM:08131EC6               BL            sub_8008FCC @加上乘号,写入另一个内存,如B900A6A1就是× 50
ROM:08131ECA               MOV             R0, R8
ROM:08131ECC               STR             R0,
ROM:08131ECE               STR             R5,
ROM:08131ED0               STR             R5,
ROM:08131ED2               MOVS            R0, #0xFF
ROM:08131ED4               STR             R0,
ROM:08131ED6               MOVS            R0, #1
ROM:08131ED8               STR             R0,
ROM:08131EDA               MOV             R0, R9
ROM:08131EDC               MOVS            R1, #0
ROM:08131EDE               MOVS            R2, R4
ROM:08131EE0               MOVS            R3, #0x7E
ROM:08131EE2               BL            sub_81332EC
ROM:08131EE6               B               loc_8131EFE @跳过读取图标的部分
ROM:08131EE6 ; ---------------------------------------------------------------------------
ROM:08131EE8 dword_8131EE8   DCD 0x2021CD0         ; DATA XREF: ROM:08131EA6r
ROM:08131EEC dword_8131EEC   DCD 0x2021D18         ; DATA XREF: ROM:08131EC0r
ROM:08131EF0 dword_8131EF0   DCD 0x84162B9         ; DATA XREF: ROM:08131EC2r
ROM:08131EF4 ; ---------------------------------------------------------------------------
ROM:08131EF4
ROM:08131EF4 loc_8131EF4                           ; CODE XREF: ROM:08131EA4j
ROM:08131EF4               MOVS            R0, R7
ROM:08131EF6               MOVS            R1, #8
ROM:08131EF8               MOVS            R2, R4
ROM:08131EFA               BL            sub_81335B0 @正式读取图标
ROM:08131EFE
ROM:08131EFE loc_8131EFE                           ; CODE XREF: ROM:08131E88j
ROM:08131EFE                                       ; ROM:08131EE6j
ROM:08131EFE               ADD             SP, SP, #0x14
ROM:08131F00               POP             {R3,R4}
ROM:08131F02               MOV             R8, R3
ROM:08131F04               MOV             R9, R4
ROM:08131F06               POP             {R4-R7}
ROM:08131F08               POP             {R0}
ROM:08131F0A               BX            R0那么,如何改造也就很清楚了,我的方法是将x131ea6的指令改去b 0x8131efe,也就是写入2A E0。测试也通过(不过老外的似乎有些不同)

2. 这个非常直观,但暗桩较多。首先获得删除道具程序的位置,从脚本命令中,道具中都可(好吧其实这个程序哪都有),随后下断

会发现有3个程序都调用了这个,分别是:玩家看完动画后删除,玩家按b退出动画后删除,给少于4个技能的精灵学习后删除【这个略坑,看了老外的才发现

将这些位置调用程序的代码都去掉即可,即将x124f78,x125c80,x124eac的数据都改去00 00 00 00。

3. 这个很容易漏掉,不改的话会发生携带了之后背包里还有这个道具的情况。

首先注意到HM是不能进行携带的,故可猜测某处会判断HM和TM。但这个程序的地址我们真的不知道吗?在之前x131e9a的源码处我们知道是判定是否为HM,故而这个程序一定会断

直接下断,会断2次,一次是小框中的读取图标判定,另一次则是我们所需要的位置了(按下give时)。ROM:081326B8               CMP   R0, #0
ROM:081326BA               BNE   loc_81326EC只需让它都以为是HM即可,这里的代码改去00 00 17 E0,强行跳转即可,那么整个的修改就完成了。

当然,还需要让技能机器不能被卖掉,这个老外没有给出方法。
我简单研究了一下,改动应该是0x132924 - 00 00 00 00这个方法理论上是很优的,但并没有经过测试。
对于购买时的数量显示,若要直接阉割:0x9bcc2 - 00 00 00 00若要保留则要对源码稍事修改了:0x9BCB0 - 00 49 08 47 XX XX XX XX其中XX XX XX XX是下面源码的指针(thumb模式+1).thumb
.align 2
add r5, r5, r0
ldrh r0,
mov r1, #9
lsl r1, r1, #5
add r1, r1, #1
cmp r0, r1
blt notm
add r1, #0x31
cmp r0, r1
bgt notm
ldr r1, =0x809a7dd
bl call_viar1
cmp r0, #0
bgt adjust
b return

notm:
ldr r1, =0x809a7dd
bl call_viar1

return:
ldr r1, =0x809bcb9

call_viar1:
bx r1

adjust:
mov r0, #1
b return那么最后来汇总一下需要修改的代码:0x1326BA - 17 E0
0x124F78 - 00 00 00 00
0x125C80 - 00 00 00 00
0x124EAC - 00 00 00 00
0x131EA6 - 2A E0
0x132924 - 00 00 00 00

以下二选一:
阉割:
0x9BCC2 - 00 00 00 00
保留:
0x9BCB0 - 00 49 08 47 GH+1 EF CD AB
0xABCDEFGH - 2D 18 68 89 09 21 49 01 01 31 88 42 08 DB 31 31 88 42 05 DC 06 49 00 F0 07 F8 00 28 05 DC 02 E0 03 49 00 F0 01 F8 03 49 08 47 01 20 FB E7 00 00 DD A7 09 08 B9 BC 09 08C语言编的懒人程序:


2016.11.24更新:0x13288D - E0

zkhnet 发表于 2015-8-10 13:21:32

题外话,Bsp是Jambo51的工具吧?

钢之波导 发表于 2015-8-10 13:54:46

然而又是火红,来个绿宝石可好

jiangzhengwenjz 发表于 2015-8-10 14:06:08

钢之波导 发表于 2015-8-10 13:54
然而又是火红,来个绿宝石可好

我几乎没改过绿宝石。。不知道机理是不是差不多,如果一样的话按这个办法也能搞出来

郭碌仁 发表于 2015-8-10 22:27:54

要是能在第四代中实现技能机器无限就好了

jiangzhengwenjz 发表于 2015-8-10 22:31:26

郭碌仁 发表于 2015-8-10 22:27
要是能在第四代中实现技能机器无限就好了

然而并不会改第四代

郭碌仁 发表于 2015-8-10 22:56:51

jiangzhengwenjz 发表于 2015-8-10 22:31
然而并不会改第四代

我只会用ROM修改器改ROM文件可惜我不会外语不然就可以好好研究了 我最喜欢第四代了

苏维埃传奇 发表于 2016-3-8 13:13:53

请问写在哪里呢?

xxxm 发表于 2018-6-9 10:15:23

本帖最后由 xxxm 于 2018-6-9 16:06 编辑

请问删除数据时是怎样得知删除道具程序的位置的?不久前接触改版,很多基础知识都不齐全

744865306 发表于 2021-2-4 07:13:10

jiangzhengwenjz 发表于 2015-8-10 14:06
我几乎没改过绿宝石。。不知道机理是不是差不多,如果一样的话按这个办法也能搞出来

貌似是差不多的,只是一堆不一样的地址

喵1喵 发表于 2021-6-21 16:29:05

路过回复一下,谢谢
页: [1]
查看完整版本: 技能机无限