Bueno, en esta ocacion les dare una pequeña guia, facil y directa para que puedan crear sus propios archivos *.asm y asi puedan portar sus propios parches
NOTA: Como dije, sera el metodo mas sencillo el que pondre aqui (a mi parecer), ya que ningun usuario arma un archivo *.asm de la misma forma, cada uno tiene su propio "estilo" de hacerlo...
1.- Para empezar... deberan abrir su Firmware usando ciertos plugins que ya fue explicado aqui
En este tema, encontraran el Ida PRO, y los plugin, en el primer post esta los plugins para DB2020 que trabaja con Base *.raw y en el segundo post encuentran el plugin para A2, que trabaja con Base *.cxc
2.- Una vez que este abierto su firmware, necesitaran, dos archivos *.idc en la carpeta con el mismo nombre dentro de ida (Applypatch y Undopatch) que estan adjuntados en este mensaje.
3.- Empezemos... Usaremos este parche, creo que tiene el tamaño indicado:
Breve explicacion:
Comentarios:
;W705 R1GA031
;Change way of showing windows "Play mode", "Visualizations", "Visualizations/Visualizations" and "Stereo widening"
;v. fix
;(c) jamesbond22
;(p) Cr@cShoT
Abrimos Ida, no dirigimos a File/IDC File, y alli buscamos el Applypatch.idc, seleccionamos y nos saldra una ventana buscando nuestro vkp a portar, lo seleccionamos y nos saldra un mensaje como este:
Le daremos que SI y nuestro parche comenzara a aplicarse.
4.- Ahora en el *.vkp iremos al full offset donde inicia nuestro codigo nuevo, en este caso 15d8c660, para ello, presionamos la tecla "G" en el Ida y ponemos ahi nuestro full offset
5.- Comenzamos a analizar con la Tecla "C" el codigo, pero tendremos cuidado con los Entrypoint, ya que esos se analizan con "D"
En las imagenes que les puse, fue solo para referencia... pues muestra de donde a donde se analizo el parche, facilmente uno se da cuenta al mirar los offsets del parche o cuando en el IDA dan solo ceros.
5.- Una vez terminado de analizar todo el codigo nuevo, lo que hares es seleccionar toda la parte analizada, sea con mouse o con Alt+L y desplazarnos por todo el codigo, una vez seleccionado, presionamos Alt+F10 y guardemos nuestro nuestro ASM.
6.- Ahora armemos los hooks, para hacerlo facilmente, agreguemos un "Org" con el full offsets en Hexadecimal, y como nuestro Parte tiene 4 hooks, agreguemos 4 "Org", mas o menos asi:
7.- Armamos los hooks. Nos ubicamos en el primer hook, en este caso es 14cd1692, vamos al Ida, presionamos "G" nuevamente y colocamos el full offset, ahora analizamos ese codigo con la tecla "C":
Copiamos las instrucciones para que nos quede asi:
Código:
Org 0x14CD1692 ; <--- Offset en Hexa, es decir con el 0x por delante
LDR R3, off_14CD1698
BX R3
DCB 0xFF
DCB 0xFF
off_14CD1698 DCD loc_15D8C660+1 ;<---- Enlace con el Codigo nuevo
Haremos lo mismo con los demas hooks hasta que nos quede asi el *.asm:
8.- Ahora solo cambiamos los loc_ o sub_ o unk_ por "0x" para compilar y que son los full offsets a portar, asi:
Código:
include "x.inc" ;<---------- Incluye el archivo necesario a la hora de compilar
Org 0x14CD1692 ; <--- Para portar
LDR R3, off_14CD1698
BX R3
DCB 0xFF
DCB 0xFF
off_14CD1698 DCD loc_15D8C660+1 ;<---- Enlace al inicio del codigo nuevo
Org 0x153BA11C ; <--- Para portar
LDR R3, off_153BA120
BX R3
off_153BA120 DCD loc_15D8C676+1 ;<---- Enlace al codigo nuevo
Org 0x153BA298 ; <--- Para portar
LDR R3, off_153BA29C
BX R3
off_153BA29C DCD loc_15D8C692+1 ;<---- Enlace al codigo nuevo
Org 0x153BA152 ; <--- Para portar
LDR R3, off_153BA158
BX R3
DCB 0xFF
DCB 0xFF
off_153BA158 DCD loc_15D8C6B0+1 ;Enlace al codigo nuevo
;------------------- NEW CODE ----------------------
Org 0x15d8c660 ;<--- Aqui deberan poner en donde se iniciara el codigo nuevo
loc_15d8c660:
LDR R0, [R4]
MOV R1, 2
LDR R3, off_15D8C6E8
BLX R3
LDR R0, [R4]
MOV R1, 9
LDR R3, off_15D8C6EC
BLX R3
LDR R0, [R4]
LDR R3, off_15D8C6D0
BX R3
loc_15D8C676: ; Enlace del 2º Hook
LDR R1, dword_15D8C6E0
LDR R3, off_15D8C6F0
BLX R3
LDR R0, [R4]
MOV R1, 0
LDR R3, off_15D8C6E8
BLX R3
LDR R0, [R4]
MOV R1, 9
LDR R3, off_15D8C6EC
BLX R3
LDR R0, [R4]
LDR R3, off_15D8C6D4
BX R3
loc_15D8C692: ; Enlace del 3º Hook
LDR R1, dword_15D8C6E0
LDR R3, off_15D8C6F0
BLX R3
LDR R0, [R5]
MOV R1, 0
LDR R3, off_15D8C6E8
BLX R3
LDR R0, [R5]
MOV R1, 9
LDR R3, off_15D8C6EC
BLX R3
LDR R0, [R5]
ADD R1, R7, 0
LDR R3, off_15D8C6D8
BX R3
loc_15D8C6B0: ; Enlace del 4º Hook
LDR R1, dword_15D8C6E4
LDR R3, off_15D8C6F0
BLX R3
LDR R0, [R4]
MOV R1, 0
LDR R3, off_15D8C6E8
BLX R3
LDR R0, [R4]
MOV R1, 9
LDR R3, off_15D8C6EC
BLX R3
LDR R0, [R4]
MOV R1, 2
LDR R3, off_15D8C6DC
BX R3
align 4
off_15D8C6D0 dw 0x14CD169C+1 ; <--- Para portar
off_15D8C6D4 dw 0x153BA124+1 ; <--- Para portar
off_15D8C6D8 dw 0x153BA2A0+1 ; <--- Para portar
off_15D8C6DC dw 0x153BA15C+1 ; <--- Para portar
dword_15D8C6E0 dw 0x13EF
dword_15D8C6E4 dw 0x13DD
off_15D8C6E8 dw 0x140BADCC+1 ; <--- Para portar
off_15D8C6EC dw 0x1412AE88+1 ; <--- Para portar
off_15D8C6F0 dw 0x14446B28+1 ; <--- Para portar
Cosas a cambiar antes de la compilacion:
- Remover los # cuando aparezcan
- ADDS por ADD
- MOVS por MOV
- MOVLS por MOVL
- ADR por adr
- LSRS por LSR
- LSLS por LSL
- 0xFF(x2) por Align 4, Ejemplo:
En el primer hook:
Código:
Org 0x14CD1692 ; <--- Para portar
LDR R3, off_14CD1698
BX R3
DCB 0xFF
DCB 0xFF
off_14CD1698 DCD loc_15D8C660+1 ;<---- Enlace al inicio del codigo nuevo
Debe quedar asi:
Código:
Org 0x14CD1692 ; <--- Para portar
LDR R3, off_14CD1698
BX R3
align 4
off_14CD1698 DCD loc_15D8C660+1 ;<---- Enlace al inicio del codigo nuevo
Listo!!, ya tenemos el primero paso para comenzar a portar parches.
- Recuerden que trate de hacerlo lo mas sencillo posible, asi que se aceptan criticas o mejores metodos de otros portadores que tenemos en el foro.
Marcadores