Código:
include "x.inc"
adrress0 equ 0x456BF0D4
adds1 equ 0x456BF074
adds2 equ 0x456BF158
address1 equ 0x4564C288
address2 equ 0x456BF0B0
address3 equ 0x456BF0EA
address4 equ 0x456BF130
address5 equ 0x4540E98C
address6 equ 0x4532F85C
address7 equ 0x4564C454
address8 equ 0x4529EE5C
address9 equ 0x456BF09C
dir1 equ 0x452063C0
dir2 equ 0x456BF042
dir3 equ 0x456BF026
ram1 equ 0x4C022B44
ram2 equ 0x4C044DE4
hook1 equ 0x452063c0
patch1 equ 0x4520633E
patch2 equ 0x45481388
patch3 equ 0x455449EA
patch4 equ 0x456BF000
org patch1
loc_4520633E:
LDR R7, dir1
BLX R7
CMP R3, 0
org hook1
DCD loc_456BF000+1
org patch2
loc_45481388:
PUSH {LR}
BL dir2
CMP R2, 5
org patch3
loc_455449EA:
BL dir3
org patch4
loc_456BF000:
LDR R7, dword_456BF138
LDRB R3, [R6]
PUSH {R0-R7,LR}
LDR R7, dword_456BF13C
LDRB R6, [R7]
LSL R0, R6, 0x1E
LSR R0, R0, 0x1F
BNE loc_456BF024
MOV R5, 2
ORR R6, R5
STRB R6, [R7]
LSL R0, R6, 0x1F
LSR R0, R0, 0x1F
BNE loc_456BF024
LDR R0, dword_456BF148
LDR R1, off_456BF144
BL address1
loc_456BF024:
POP {R0-R7,PC}
ADD R2, R1, 0
ADD R1, R0, 0
PUSH {R0-R7,LR}
LDR R3, dword_456BF138
CMP R3, R1
BNE loc_456BF040
CMP R2, 0
BNE loc_456BF040
LDR R7, dword_456BF13C
LDRB R6, [R7]
MOV R5, 0xFD
AND R6, R5
STRB R6, [R7]
loc_456BF040:
POP {R0-R7,PC}
ADD R2, R0, 0
MOV R0, 0
PUSH {R0-R7,LR}
LDR R7, dword_456BF13C
LDRB R6, [R7]
ADD R2, R6, 0
CMP R1, 0
BEQ loc_456BF056
ORR R6, R1
B loc_456BF05A
loc_456BF056:
MOV R1, 0xFE
AND R6, R1
loc_456BF05A:
STRB R6, [R7]
LSL R1, R6, 0x1D
LSR R1, R1, 0x1F
BNE loc_456BF072
MOV R1, 4
ORR R6, R1
STRB R6, [R7]
MOV R0, 0xFA
adr R1, adds1
ADD R1, 1
BL address1
loc_456BF072:
POP {R0-R7,PC}
loc_456BF074:
PUSH {R0-R7,LR}
LDR R7, dword_456BF13C
LDRB R6, [R7]
MOV R5, 0xFB
AND R6, R5
STRB R6, [R7]
LSL R1, R1, 0x1F
LSR R1, R1, 0x1F
BNE loc_456BF09A
LSL R1, R6, 0x1F
LSR R1, R1, 0x1F
BEQ loc_456BF09A
LSL R1, R6, 0x1E
LSL R1, R1, 0x1F
BNE loc_456BF09A
LDR R0, dword_456BF148
LDR R1, off_456BF144
BL address1
loc_456BF09A:
POP {R0-R7,PC}
loc_456BF09C:
PUSH {R0-R7,LR}
adr R1, adds2
LDRB R1, [R1]
CMP R1, 1
BNE loc_456BF0AA
BL address2
loc_456BF0AA:
BL address3
POP {R0-R7,PC}
sub_456BF0B0:
PUSH {R0-R7,LR}
LDR R7, dword_456BF13C
LDRB R6, [R7]
LSL R0, R6, 0x1E
LSR R0, R0, 0x1E
BEQ loc_456BF0D0
MOV R1, 1
MOV R0, 8
BL address4
MOV R0, 0xFF
ADD R0, 0xF5
adr R1, adrress0
ADD R1, 1
BL address1
loc_456BF0D0:
POP {R0-R7,PC}
NOP
loc_456BF0D4:
PUSH {R0-R7,LR}
MOV R1, 0
MOV R0, 8
BL address4
MOV R0, 0xFF
ADD R0, 0xF5
LDR R1, off_456BF150
BL address1
POP {R0-R7,PC}
sub_456BF0EA:
PUSH {R0-R7,LR}
BL address5
CMP R0, 7
BHI loc_456BF0F8
CMP R0, 0
BNE loc_456BF126
loc_456BF0F8:
LDR R7, dword_456BF13C
LDRB R6, [R7]
LSL R0, R6, 0x1E
LSR R0, R0, 0x1E
BEQ loc_456BF12E
adr R5, adds2
LDRB R1, [R5,1]
CMP R1, 1
BNE loc_456BF11A
LDR R0, dword_456BF140
LDR R0, [R0,0x18]
MOVL R1, 0x3E8
MOV R2, 0x32
ADD R3, R1, 0
BL address6
loc_456BF11A:
LDRB R1, [R5,2]
CMP R1, 1
BNE loc_456BF126
LDRB R0, [R5,3]
BL address7
loc_456BF126:
LDR R0, dword_456BF154
LDR R1, off_456BF14C
BL address1
loc_456BF12E:
POP {R0-R7,PC}
sub_456BF130:
LDR R2, off_456BF134
BX R2
align 4
off_456BF134 DCD address8+1
dword_456BF138 DCD 0xE5D3
dword_456BF13C DCD ram1
dword_456BF140 DCD ram2
off_456BF144 DCD address9+1
dword_456BF148 DCD 0xEA60
off_456BF14C DCD address3+1
off_456BF150 DCD address2+1
dword_456BF154 DCD 0x4E20
loc_456BF158:
LSL R1, R0, 4
LSR R0, R0, 0xC
para no aburrirme buscando direcciones en otro main (pues el parche ya existe en varios modelos) lo volvi a compilar con las mismas direcciones del w810 obteniendo el parche inicial
Marcadores