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.
Y esto seria: Como poner Nuevo código a un Parche y Como se redirecciona un Parche:
también ahí dos formas de poner el nuevo código a un parche vkp: 1- La mas fácil diría yo fijarse en algún patch addres( ósea donde se ponen que espacio fueron usados para no repetir el mismo espacio usado por otro parche para no generar miss match) y al ultimo espacio usado sumarle en hex. +10.
Ejemplo:
si el ultimo Offset usado en un parche es este: 15d8c660 le sumamos +10 y ya tenemos nuestro espacio sin usar para usarlo en nuestro parche ya sea Port o creado por nosotros mismos y daría como resultado este Offset teniendo en cuenta que ya le sumamos +10 en hex. 15d8c670
2- la otra manera es redireccionando a que me refiero con redireccionar pues es simple se usa como base el Offset del nuevo código y se ase una simple cuenta para obtener nuestro Offset libre para usar en nuestro parche ejemplo:
si el parche del w610-R1CA001 orange
uso como nuevo código este Offset 44298380 y lo queremos redireccionar a nuestro nuevo código ya que ese Offset que se uso en w610 ya esta usado en nuestro w580 R8BE001 y en nuestro teléfono el disponible es este Offset 45C5C700 tenemos que hacer esto si nuestro nuevo código es mayor al nuevo código usado en el parche original (original me refiero al vkp del cual armaron el ASM) se hace la siguiente cuenta con la calculadora de Windows en hex. 45C5C700 -44298380 =19C4380 y a es a este resultado lo pasamos a decimal HEX=19C4380
DEC=27018112 y se lo sumamos al Offset original del parche quedando así de esta forma:
org 0x44298380+27018112
y al compilar el vkp ya portado saldrá ya redireccionado y saldrá con el nuevo códigonuestro
y si el parche del w610-R1CA001 orange
uso como nuevo código este Offset 45C5C700 y lo queremos redireccionar a nuestro nuevo código ya que ese Offset que se uso en w610 ya esta usado en nuestro w580 R8BE001 y en nuestro teléfono el disponible es este Offset 44298380
tenemos que hacer esto si nuestro nuevo código es mayor al nuevo código usado en el parche original (original me refiero al vkp del cual armaron el ASM) se hace la siguiente cuenta con la calculadora de Windows en hex. 45C5C700 -44298380 =19C4380 y a es a este resultado lo pasamos a decimal HEX=19C4380
DEC=27018112 y se lo sumamos al Offset original del parche quedando así de esta forma:
org 0x45C5C700 -27018112
y al compilar el vkp ya portado saldrá ya redireccionado y saldrá con el nuevo códigonuestro
Última edición por albertnet3; 26/10/2010 a las 16:04:15
como analizar textos en IDA Codificación ASCII y Unicode
Bueno les voy a explicar como analizar los textos en el IDA mayor mente los parches que contienen textos se les dicen strings y pues se analizan donde comienza el texto no se analiza con la tecla "c" ni "D" sino con la tecla "A":
ejemplo así esta en el IDA:
Código:
ROM:45CFCF04 4D DCB 0x4D ; M
ROM:45CFCF05 79 DCB 0x79 ; y
ROM:45CFCF06 20 DCB 0x20
ROM:45CFCF07 53 DCB 0x53 ; S
ROM:45CFCF08 68 DCB 0x68 ; h
ROM:45CFCF09 6F DCB 0x6F ; o
ROM:45CFCF0A 72 DCB 0x72 ; r
ROM:45CFCF0B 74 DCB 0x74 ; t
ROM:45CFCF0C 63 DCB 0x63 ; c
ROM:45CFCF0D 75 DCB 0x75 ; u
ROM:45CFCF0E 74 DCB 0x74 ; t
ROM:45CFCF0F 73 DCB 0x73 ; s
ROM:45CFCF10 20 DCB 0x20
ROM:45CFCF11 76 DCB 0x76 ; v
ROM:45CFCF12 31 DCB 0x31 ; 1
ROM:45CFCF13 2E DCB 0x2E ; .
ROM:45CFCF14 31 DCB 0x31 ; 1
ROM:45CFCF15 0A DCB 0xA
ROM:45CFCF16 A9 DCB 0xA9 ; ®
ROM:45CFCF17 20 DCB 0x20
ROM:45CFCF18 61 DCB 0x61 ; a
ROM:45CFCF19 6C DCB 0x6C ; l
ROM:45CFCF1A 62 DCB 0x62 ; b
ROM:45CFCF1B 65 DCB 0x65 ; e
ROM:45CFCF1C 72 DCB 0x72 ; r
ROM:45CFCF1D 74 DCB 0x74 ; t
ROM:45CFCF1E 6E DCB 0x6E ; n
ROM:45CFCF1F 65 DCB 0x65 ; e
ROM:45CFCF20 74 DCB 0x74 ; t
ROM:45CFCF21 33 DCB 0x33 ; 3
ROM:45CFCF22 0A DCB 0xA
ROM:45CFCF23 77 DCB 0x77 ; w
ROM:45CFCF24 77 DCB 0x77 ; w
ROM:45CFCF25 77 DCB 0x77 ; w
ROM:45CFCF26 2E DCB 0x2E ; .
ROM:45CFCF27 74 DCB 0x74 ; t
ROM:45CFCF28 6F DCB 0x6F ; o
ROM:45CFCF29 70 DCB 0x70 ; p
ROM:45CFCF2A 73 DCB 0x73 ; s
ROM:45CFCF2B 6F DCB 0x6F ; o
ROM:45CFCF2C 6E DCB 0x6E ; n
ROM:45CFCF2D 79 DCB 0x79 ; y
ROM:45CFCF2E 2E DCB 0x2E ; .
ROM:45CFCF2F 63 DCB 0x63 ; c
ROM:45CFCF30 6F DCB 0x6F ; o
ROM:45CFCF31 6D DCB 0x6D ; m
Y también pueden reemplazar el DCB por db quedando así:
Código:
aM_0 db "M",0 aY db "y",0
db " ",0aE db "E",0aL db "l",0aF_0 db "f",0aS_0 db "s",0
pero para este tipo de codificación es mejor analizarlo como el tipo de code que es y no con la tecla "A" ya que "A" es para la codificación ASCII y en este caso el tipo de string es unicode entonces deben de analizarlo como unicode parra ello tienen que ir a la opción que esta en su IDA arriba a su izquierda que es una opción de una S entre comillas así "S" dan clic ahí y les dará las opciones que trae el ida para las codificaciones de las strings entonces una ves que están en donde empieza la string en este caso comienza en la M se van a esa opción que les nombre de la "S" y tildan la opción unicode y les analizara el texto de la siguiente forma:
Una ves que les quedo así deben de limpiarlo para que luego el compilador lo reconozco como texto y les compile reemplazando el unicode por du y reemplazando el 0, < por un " y el > por un " quedándoles así:
Código:
aMyElfsdu"My Elfs",0
Última edición por albertnet3; 23/11/2010 a las 18:27:44
Marcadores