Cr@cShoT
26/10/2010, 15:20:06
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
abrir raw de tu main y tu main en IDA PRO V.x (http://www.topsony.com/forum_es/desarrollo-parches-f202/abrir-raw-de-tu-main-y-tu-main-en-ida-pro-v-x-t120831.html)
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:
;W705 R1GA031
;Change way of showing windows "Play mode", "Visualizations", "Visualizations/Visualizations" and "Stereo widening"
;v. fix
;(c) jamesbond22
;(p) Cr@cShoT
14cd1692: 2068022100F06DF82068 014B1847FFFF61C6D815
153ba11c: 7F49A4F091FF2068 004B184777C6D815
153ba298: 2049A4F0D3FE2868 004B184793C6D815
153ba152: 1549A4F076FF20680221 014B1847FFFFB1C6D815
15d8c660: 00000000000000000000000000000000 20680221204B9847206809211F4B9847
15d8c670: 00000000000000000000000000000000 2068174B18471A491D4B984720680021
15d8c680: 00000000000000000000000000000000 194B984720680921184B98472068114B
15d8c690: 00000000000000000000000000000000 18471349164B984728680021124B9847
15d8c6a0: 00000000000000000000000000000000 28680921114B98472868391C0A4B1847
15d8c6b0: 00000000000000000000000000000000 0C490F4B9847206800210B4B98472068
15d8c6c0: 00000000000000000000000000000000 09210A4B984720680221044B1847FFFF
15d8c6d0: 00000000000000000000000000000000 9D16CD1425A13B15A1A23B155DA13B15
15d8c6e0: 00000000000000000000000000000000 EF130000DD130000CDAD0B1489AE1214
15d8c6f0: 00000000 296B4414
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
Hooks:
14cd1692: 2068022100F06DF82068 014B1847FFFF61C6D815
153ba11c: 7F49A4F091FF2068 004B184777C6D815
153ba298: 2049A4F0D3FE2868 004B184793C6D815
153ba152: 1549A4F076FF20680221 014B1847FFFFB1C6D815
Codigo nuevo:
15d8c660: 00000000000000000000000000000000 20680221204B9847206809211F4B9847
15d8c670: 00000000000000000000000000000000 2068174B18471A491D4B984720680021
15d8c680: 00000000000000000000000000000000 194B984720680921184B98472068114B
15d8c690: 00000000000000000000000000000000 18471349164B984728680021124B9847
15d8c6a0: 00000000000000000000000000000000 28680921114B98472868391C0A4B1847
15d8c6b0: 00000000000000000000000000000000 0C490F4B9847206800210B4B98472068
15d8c6c0: 00000000000000000000000000000000 09210A4B984720680221044B1847FFFF
15d8c6d0: 00000000000000000000000000000000 9D16CD1425A13B15A1A23B155DA13B15
15d8c6e0: 00000000000000000000000000000000 EF130000DD130000CDAD0B1489AE1214
15d8c6f0: 00000000 296B4414
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:
79055
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"
79056
79057
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.
Este es nuestro *.asm
;
; ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
; º This file is generated by The Interactive Disassembler (IDA) º
; º Copyright (c) 2006 by DataRescue sa/nv, <ida@datarescue.com> º
; º Licensed to: Paul Ashton - Blue Lane Technologies (1-user Advanced 03/2006) º
; ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
;
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
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
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
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
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
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
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
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
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
DCB 0xFF
DCB 0xFF
off_15D8C6D0 DCD loc_14CD169C+1 ; DATA XREF: ROM:15D8C672r
off_15D8C6D4 DCD loc_153BA124+1 ; DATA XREF: ROM:15D8C68Er
off_15D8C6D8 DCD loc_153BA2A0+1 ; DATA XREF: ROM:15D8C6ACr
off_15D8C6DC DCD loc_153BA15C+1 ; DATA XREF: ROM:15D8C6CAr
dword_15D8C6E0 DCD 0x13EF ; DATA XREF: ROM:15D8C676r
; ROM:15D8C692r
dword_15D8C6E4 DCD 0x13DD ; DATA XREF: ROM:15D8C6B0r
off_15D8C6E8 DCD loc_140BADCC+1 ; DATA XREF: ROM:15D8C664r
; ROM:15D8C680r ...
off_15D8C6EC DCD loc_1412AE88+1 ; DATA XREF: ROM:15D8C66Cr
; ROM:15D8C688r ...
off_15D8C6F0 DCD loc_14446B28+1 ; DATA XREF: ROM:15D8C678r
; ROM:15D8C694r ...
Para mejor comprension, es mejor quitarle los textos antecedidos de un ";" (comentarios) y de esa forma armar los hooks:
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
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
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 loc_14CD169C+1
off_15D8C6D4 dw loc_153BA124+1
off_15D8C6D8 dw loc_153BA2A0+1
off_15D8C6DC dw loc_153BA15C+1
dword_15D8C6E0 dw 0x13EF
dword_15D8C6E4 dw 0x13DD
off_15D8C6E8 dw loc_140BADCC+1
off_15D8C6EC dw loc_1412AE88+1
off_15D8C6F0 dw loc_14446B28+1 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:
include "x.inc" ;<---------- Incluye el archivo necesario a la hora de compilar
Org
Org
Org
Org
;------------------- NEW CODE ----------------------
Org
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
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
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
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 loc_14CD169C+1
off_15D8C6D4 dw loc_153BA124+1
off_15D8C6D8 dw loc_153BA2A0+1
off_15D8C6DC dw loc_153BA15C+1
dword_15D8C6E0 dw 0x13EF
dword_15D8C6E4 dw 0x13DD
off_15D8C6E8 dw loc_140BADCC+1
off_15D8C6EC dw loc_1412AE88+1
off_15D8C6F0 dw loc_14446B28+1 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":
79058
Copiamos las instrucciones para que nos quede asi:
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:
include "x.inc" ;<---------- Incluye el archivo necesario a la hora de compilar
Org 0x14CD1692
LDR R3, off_14CD1698
BX R3
DCB 0xFF
DCB 0xFF
off_14CD1698 DCD loc_15D8C660+1 ;<---- Enlace al inicio del codigo nuevo
Org 0x153BA11C
LDR R3, off_153BA120
BX R3
off_153BA120 DCD loc_15D8C676+1 ;<---- Enlace al codigo nuevo
Org 0x153BA298
LDR R3, off_153BA29C
BX R3
off_153BA29C DCD loc_15D8C692+1 ;<---- Enlace al codigo nuevo
Org 0x153BA152
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 loc_14CD169C+1
off_15D8C6D4 dw loc_153BA124+1
off_15D8C6D8 dw loc_153BA2A0+1
off_15D8C6DC dw loc_153BA15C+1
dword_15D8C6E0 dw 0x13EF
dword_15D8C6E4 dw 0x13DD
off_15D8C6E8 dw loc_140BADCC+1
off_15D8C6EC dw loc_1412AE88+1
off_15D8C6F0 dw loc_14446B28+1 8.- Ahora solo cambiamos los loc_ o sub_ o unk_ por "0x" para compilar y que son los full offsets a portar, asi:
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 portarCosas 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:
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 nuevoDebe quedar asi:
Org 0x14CD1692 ; <--- Para portar
LDR R3, off_14CD1698
BX R3
align 4
off_14CD1698 DCD loc_15D8C660+1 ;<---- Enlace al inicio del codigo nuevoListo!!, 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.
Dudas en este tema:
[Discusión] Archivos Assembling (ASM) (http://www.topsony.com/forum_es/discusiones-f207/discusion-archivos-assembling-asm-t125241.html)
Saludos!
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
abrir raw de tu main y tu main en IDA PRO V.x (http://www.topsony.com/forum_es/desarrollo-parches-f202/abrir-raw-de-tu-main-y-tu-main-en-ida-pro-v-x-t120831.html)
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:
;W705 R1GA031
;Change way of showing windows "Play mode", "Visualizations", "Visualizations/Visualizations" and "Stereo widening"
;v. fix
;(c) jamesbond22
;(p) Cr@cShoT
14cd1692: 2068022100F06DF82068 014B1847FFFF61C6D815
153ba11c: 7F49A4F091FF2068 004B184777C6D815
153ba298: 2049A4F0D3FE2868 004B184793C6D815
153ba152: 1549A4F076FF20680221 014B1847FFFFB1C6D815
15d8c660: 00000000000000000000000000000000 20680221204B9847206809211F4B9847
15d8c670: 00000000000000000000000000000000 2068174B18471A491D4B984720680021
15d8c680: 00000000000000000000000000000000 194B984720680921184B98472068114B
15d8c690: 00000000000000000000000000000000 18471349164B984728680021124B9847
15d8c6a0: 00000000000000000000000000000000 28680921114B98472868391C0A4B1847
15d8c6b0: 00000000000000000000000000000000 0C490F4B9847206800210B4B98472068
15d8c6c0: 00000000000000000000000000000000 09210A4B984720680221044B1847FFFF
15d8c6d0: 00000000000000000000000000000000 9D16CD1425A13B15A1A23B155DA13B15
15d8c6e0: 00000000000000000000000000000000 EF130000DD130000CDAD0B1489AE1214
15d8c6f0: 00000000 296B4414
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
Hooks:
14cd1692: 2068022100F06DF82068 014B1847FFFF61C6D815
153ba11c: 7F49A4F091FF2068 004B184777C6D815
153ba298: 2049A4F0D3FE2868 004B184793C6D815
153ba152: 1549A4F076FF20680221 014B1847FFFFB1C6D815
Codigo nuevo:
15d8c660: 00000000000000000000000000000000 20680221204B9847206809211F4B9847
15d8c670: 00000000000000000000000000000000 2068174B18471A491D4B984720680021
15d8c680: 00000000000000000000000000000000 194B984720680921184B98472068114B
15d8c690: 00000000000000000000000000000000 18471349164B984728680021124B9847
15d8c6a0: 00000000000000000000000000000000 28680921114B98472868391C0A4B1847
15d8c6b0: 00000000000000000000000000000000 0C490F4B9847206800210B4B98472068
15d8c6c0: 00000000000000000000000000000000 09210A4B984720680221044B1847FFFF
15d8c6d0: 00000000000000000000000000000000 9D16CD1425A13B15A1A23B155DA13B15
15d8c6e0: 00000000000000000000000000000000 EF130000DD130000CDAD0B1489AE1214
15d8c6f0: 00000000 296B4414
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:
79055
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"
79056
79057
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.
Este es nuestro *.asm
;
; ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
; º This file is generated by The Interactive Disassembler (IDA) º
; º Copyright (c) 2006 by DataRescue sa/nv, <ida@datarescue.com> º
; º Licensed to: Paul Ashton - Blue Lane Technologies (1-user Advanced 03/2006) º
; ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
;
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
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
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
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
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
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
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
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
; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
DCB 0xFF
DCB 0xFF
off_15D8C6D0 DCD loc_14CD169C+1 ; DATA XREF: ROM:15D8C672r
off_15D8C6D4 DCD loc_153BA124+1 ; DATA XREF: ROM:15D8C68Er
off_15D8C6D8 DCD loc_153BA2A0+1 ; DATA XREF: ROM:15D8C6ACr
off_15D8C6DC DCD loc_153BA15C+1 ; DATA XREF: ROM:15D8C6CAr
dword_15D8C6E0 DCD 0x13EF ; DATA XREF: ROM:15D8C676r
; ROM:15D8C692r
dword_15D8C6E4 DCD 0x13DD ; DATA XREF: ROM:15D8C6B0r
off_15D8C6E8 DCD loc_140BADCC+1 ; DATA XREF: ROM:15D8C664r
; ROM:15D8C680r ...
off_15D8C6EC DCD loc_1412AE88+1 ; DATA XREF: ROM:15D8C66Cr
; ROM:15D8C688r ...
off_15D8C6F0 DCD loc_14446B28+1 ; DATA XREF: ROM:15D8C678r
; ROM:15D8C694r ...
Para mejor comprension, es mejor quitarle los textos antecedidos de un ";" (comentarios) y de esa forma armar los hooks:
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
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
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 loc_14CD169C+1
off_15D8C6D4 dw loc_153BA124+1
off_15D8C6D8 dw loc_153BA2A0+1
off_15D8C6DC dw loc_153BA15C+1
dword_15D8C6E0 dw 0x13EF
dword_15D8C6E4 dw 0x13DD
off_15D8C6E8 dw loc_140BADCC+1
off_15D8C6EC dw loc_1412AE88+1
off_15D8C6F0 dw loc_14446B28+1 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:
include "x.inc" ;<---------- Incluye el archivo necesario a la hora de compilar
Org
Org
Org
Org
;------------------- NEW CODE ----------------------
Org
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
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
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
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 loc_14CD169C+1
off_15D8C6D4 dw loc_153BA124+1
off_15D8C6D8 dw loc_153BA2A0+1
off_15D8C6DC dw loc_153BA15C+1
dword_15D8C6E0 dw 0x13EF
dword_15D8C6E4 dw 0x13DD
off_15D8C6E8 dw loc_140BADCC+1
off_15D8C6EC dw loc_1412AE88+1
off_15D8C6F0 dw loc_14446B28+1 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":
79058
Copiamos las instrucciones para que nos quede asi:
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:
include "x.inc" ;<---------- Incluye el archivo necesario a la hora de compilar
Org 0x14CD1692
LDR R3, off_14CD1698
BX R3
DCB 0xFF
DCB 0xFF
off_14CD1698 DCD loc_15D8C660+1 ;<---- Enlace al inicio del codigo nuevo
Org 0x153BA11C
LDR R3, off_153BA120
BX R3
off_153BA120 DCD loc_15D8C676+1 ;<---- Enlace al codigo nuevo
Org 0x153BA298
LDR R3, off_153BA29C
BX R3
off_153BA29C DCD loc_15D8C692+1 ;<---- Enlace al codigo nuevo
Org 0x153BA152
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 loc_14CD169C+1
off_15D8C6D4 dw loc_153BA124+1
off_15D8C6D8 dw loc_153BA2A0+1
off_15D8C6DC dw loc_153BA15C+1
dword_15D8C6E0 dw 0x13EF
dword_15D8C6E4 dw 0x13DD
off_15D8C6E8 dw loc_140BADCC+1
off_15D8C6EC dw loc_1412AE88+1
off_15D8C6F0 dw loc_14446B28+1 8.- Ahora solo cambiamos los loc_ o sub_ o unk_ por "0x" para compilar y que son los full offsets a portar, asi:
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 portarCosas 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:
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 nuevoDebe quedar asi:
Org 0x14CD1692 ; <--- Para portar
LDR R3, off_14CD1698
BX R3
align 4
off_14CD1698 DCD loc_15D8C660+1 ;<---- Enlace al inicio del codigo nuevoListo!!, 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.
Dudas en este tema:
[Discusión] Archivos Assembling (ASM) (http://www.topsony.com/forum_es/discusiones-f207/discusion-archivos-assembling-asm-t125241.html)
Saludos!