Creación de Parches VKP Básicos
Cambios de rutas y valores numéricos
Por Shadow Player - TopSony - 
Programas a usar:
- Editor Hexadecimal (WinHex)
- Editor de Texto (Block de Notas)
- Extractor de data de MAIN (Main2Raw)
Introducción
En este tutorial se te enseñará a crear parches básicos para cambiar algunos aspectos de tu teléfono, simples pero útiles. Para comenzar este proceso, primero debemos entender cómo se estructura un parche VKP.
El Lenguaje Hexadecimal
Primero que todo tenemos que entender las bases del lenguaje hexadecimal.
El lenguaje hexadecimal lo desarrollo la IBM en los años 80’ como una herramienta para poder entender mejor el código de máquina y se basa en lo siguiente:
- Se asigna a cada 4 bits de datos un carácter de los siguientes:
0 1 2 3 4 5 6 7 8 9 A B C D E F
- Combinando dos de estos caracteres tienes 8 bits, o sea, un byte, la unidad básica de código. Por eso se le llama “código binario”.
- Ejemplos de bytes representados hexadecimalmente: 1A F3 D8
- Con cada combinación distinta se logra un byte distinto, abarcando todas las combinaciones posibles.
- Cada carácter de texto (El abecedario y todos los signos) pesan exactamente un byte, lo que quiere decir que cada byte se puede interpretar como una letra o un signo.
- Ejemplos de letras y signos representados hexadecimalmente:
A = 41
* = 2A
* = F0
O = 4F
% = 25
Ø = D8
El Parche VKP
El siguiente es un parche inventado para explicar cómo se estructura:
Código:
;K790 SW-R8BF003
;Example VKP Patch
;(c) Shadow Player
+44140000
F93195: 4F726967696E616C 43616D626961646F
Todas las líneas que comienzan en “;” son líneas de comentario donde se escribe la versión de firmware (K790 SW-R8BF003) para la que está hecho este parche, la función del parche y los créditos de creador, portador, etc.
- La primera línea “+44140000” es la base de la MAIN. Esta base existe porque la MAIN no está escrita al comienzo (En el primer byte) del chip donde se encuentra guardada, sino que se ubica a partir del byte número 1142161408, que hexadecimalmente representado es 0x44140000*, en adelante.
* “0x” indica que el numero esta en forma hexadecimal, no afecta al valor, 0x44140000 es la base para MAINs de DB2020, otras MAINs poseen otras bases.
- Ahora viene la data del parche:
F93195: 4F726967696E616C 43616D626961646F
El primer valor [F93195] es el offset/dirección del cual se comenzara a cambiar valores. Esto quiere decir, la distancia del comienzo del MAIN de la cual comenzaremos a cambiar valores, como ven, está en forma hexadecimal.
El segundo valor [4F726967696E616C] son los bytes originales que se encuentran en el MAIN en el offset/dirección dado (F93195), son los valores que se van a reemplazar por otros.
El tercer valor [43616D626961646F] son los valores que se escribirán sobre los valores originales (4F726967696E616C) para cambiar una función de la MAIN.
En forma de texto, los valores en el parche del ejemplo serian los siguientes:
4F726967696E616C = “Original”
43616D626961646F = “Cambiado”
Ahora: ¿Que pasaría en el MAIN si cambiáramos el texto “ifs/settings/acoustic” por “card/other/acoustic”?
Exactamente eso es lo que aprenderemos a hacer…
Encontrar offsets de valores en el MAIN
El MAIN de nuestros teléfonos tiene un encabezado (header) BABE, un tipo de encabezado flasheable personalizado por Sony Ericsson que es leído por los programas de flasheo para escribir los flashblocks (bloques de datos de la firmware) al teléfono. Con un programa como Main2Raw podemos extraer estos datos sin el encabezado, dejando el archivo tal como se escribirá en el flashchip del teléfono (Formato RAW)
Para crear parches necesitamos encontrar las direcciones de algunos bytes en el flashchip, por lo tanto, tendremos que abrir nuestra firmware en formato RAW con el WinHex.
Si es la primera vez que usas un editor hexadecimal, no te asustes por su apariencia, seguramente pensaras que no entiendes nada de nada. La gracia de este tutorial es que no tienes que entender nada y lo esencial te lo explico.
El WinHex posee dos buscadores: Uno de texto y uno de Bytes:

El binocular normal es el buscador de texto, el binocular con el texto “Hex” debajo, es el buscador de bytes en forma hexadecimal.
Usaremos el buscador de texto del WinHex de la siguiente manera:

-En el texto pondremos la ruta o cualquier string (cadena de texto) que queramos cambiar.
-La codificación será Unicode.
-Apreta OK para buscar.
En mi caso (K790 – R8BF003) encontró una vez el texto “ifs/settings/acoustic” en el offset 185D59A:

Info adicional:
Los valores hexadecimales se suelen escribir anteponiendo “0x” o el signo $ para indicar su representación en hex. (Ejemplos: 0x185D59A, $185D59A)
Una vez encontrado el primer offset:
-Lo anotas en un archivo de texto con el block de notas.
-Vas a WinHex y haces la selección del texto completo “/ifs/settings/acoustic” y aprietas <Ctrl. + Shift + C>.
-En el archivo de texto haz una línea nueva debajo del offset y apreta <Ctrl. + V> se pegarán los valores en hex.

Ahora viene la hora de reemplazar el texto:
-En Winhex, edita la ruta en el panel de texto (Derecha) y escribe la nueva ruta que quieres, acuérdate de hacerlo saltándote un espacio de letra en letra porque en Unicode, las letras se intercalan con un byte 00 (Fíjate en WinHex).
-La ruta nueva tiene que ser igual o más corta que la ruta original.
-Cuando te sobren caracteres (letras) de la ruta original (Al ser la tuya más corta), sobre escribe estos con bytes 00.

Me sobran los caracteres “i” y “c”, los reemplazo por bytes 00:

Como ven, yo quiero mis acústicos en la memory stick (/card), en la carpeta “otros”, en otra carpeta llamada “acoustic” (/other/acoustic).
Ahora:
-Vuelve a seleccionar toda la ruta (incluyendo los ceros del final) y aprieta <Ctrl. + Shift + C>.
-Anda de nuevo al block de notas y pega lo copiado en una nueva línea:

Ahora, que tenemos?
Tenemos el offset en el que queremos reemplazar valores, tenemos los valores originales y los valores nuevos a escribir. Estamos listos para ordenar el parche para poder subirlo a tu teléfono. Para hacer esto:
-En la primera línea agrega la base de tu firmware, si no sabes la base de tu firmware, pide la información. Para DB2020 la base es 0x44140000, por lo tanto, escribe “+44140000”.
-Después del offset (185D59A) agrega el signo “:” (dos puntos).
-Divide las líneas de valores hexadecimales en líneas de 32 letras (16 bytes en hex) cada una.

Ahora, ordena las líneas de datos de la siguiente manera:

Que cambiamos?
-Los dos offsets nuevos que aparecen (185D5AA y 185D5BA) se obtienen de la original (185D59A) sumándole 16 que es la cantidad de bytes que avanzamos por línea. 16 en forma hexadecimal es 10, con la calculadora de Windows pueden calcular la suma: 185D59A + 10 en modo hexadecimal y dará:

Volvemos a sumar 16 (10 en hex) y obtendremos el offset siguiente y así hasta llegar a la última línea.
Ahora solo faltan los detalles, como por ejemplo:
-Puede ocurrir que en alguna firmware que la ruta salga 2 veces (como en K790 – R8BF003) entonces, buscamos la segunda ocurrencia y hacemos el mismo procedimiento.
-Se agrega antes de la base las líneas de comentarios donde se indica la firmware para la que fue creado el patch, la función del patch, su creador, portador, etc…

Espero que te haya gustado mi tutorial y hayas aprendido bien las bases de la creación de parches VKP.
Un saludo
Abro el tema para que voten en la encuesta y posteen opiniones de como mejorar el tutorial, acepto criticas. No se permitira hacer preguntas sobre como esto, como lo otro, solo preguntas bien fundamentadas y con un punto claro.
Cualquier post que se considere como SPAM, ofensa o pregunta fuera de lugar sera borrado!
Marcadores