Cooking ROM (Modificando imagen ROM de Windows CE 5)

Iniciado por OrtaY, 24 Noviembre 2011, 11:47 AM

0 Miembros y 2 Visitantes están viendo este tema.

OrtaY

Hola a todos, alguien que tenga experiencia en la creación y modificación de imagenes ROM de Windows CE?

Os comento, tengo una pna que usa winCE y quisiera modificar algunos aspectos del sistema operativo, basicamente algunos valores del registro para que actualice el huso horario, pero resulta que este dispositivo tiene el sistema operativo alojado en una memoria interna que no permite la escritura en modo usuario.

El problema es que todos los cambios que hago en el registro o los archivos copiados, modificados o eliminados, solo lo están en memoria, de modo que tras apagar y encender el dispositivo todo sigue como estaba antes.

La única forma de modificar datos en el sistema, es hacerlo mediante la actualización del firmware, siguiendo unos pasos concretos y empleando unos archivos que contienen la nueva imagen del sistema operativo.

Esta ROM consta de un archivo lanzadera o bootloader de extensión .nb0 y otro que es la propia imagen del sistema, con extensión .bin

Ninguno de los dos son archivos con cabecera .PE, por lo que el único análisis al que he podido someterlos es a un HexEditor, y la verdad es que no sé como extraer los archivos de la imagen, para modificarlos y volverlos a ensamblar en la imagen.

He probado RAW_NB0_XIP_TOOL y no consigo extraer nada.

Alguien que tenga experiencia en ingenieria inversa en Win CE  que me pueda echar una mano o me indicar por donde seguir, se lo agradecería enormemente.

Si necesitan los archivos para echarles un vistazo, ahí van:

http://www.megaupload.com/?d=4MVU5ZJ7

Gracias por leerlo y ojalá puedas ayudarme :)

NOTA. Este hilo lo pongo aquí y no en dispositivos portatiles, ya que el asunto base es hacer ingenieria inversa al sistema operativo WinCE, y porque en los foros de dispositivos portatiles no hay nada al respecto. Pero que si debe ser trasladado a otro subforo, lo entiendo.

MCKSys Argentina

#1
La verdad, tuve que buscar que significaba PNA...  :P

Conozco algo de Windows CE, pero esto es otra cosa...

Que tipo de micro tiene el device?

EDITADO:

Mientras Googleo, aprendo y voy sacando info:

http://android-dls.com/wiki/index.php?title=How_to_unpack_and_repack_NB0_file
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


_Enko

#2
Donde  puedes conseguir info sobre este tipo de cosas es en  xda-developers

Windows CE es un windows mobile (normalemten 5.5 o 6.1) personalizado por desarolladores de dispositivos OEM chinos. Y hay veces, qeu lo personalizan tanto que se vuelve hasta molesto.



Saludos.


OrtaY

Gracias por vuestras aportaciones, os comento mi problema:

Os cuento mis avances...

existen varios archivos de imagen en WinCE

unos tienen extensión nb0, y son ejecutados por el sistema, una especie de ejecutables camuflados o empacados

otros tienen extension bin y son mas de lo mismo, con la diferencia de que no son ejecutados directamente, sino cargados como una imagen, algo asi como las imagenes iso de un CD en una unidad virtual.


Normalmente un archivo .bin es un contenedor de archivos, los cuales pueden ser extraidos usando las herramientas adecuadas, igual que lo hariamos de un .rar con winrar. Hasta aqui todo correcto, el problema viene cuando no puedo extraer los archivos de mi fichero .bin (el que he adjuntado el enlace de descarga en el primer post)

Encontre unas utilidades que os recomiendo para analizar este tipo de ficheros, llamadas NKBINTOOLS y esto es lo que hacen:

viewbin.exe - muestra el contenido del NK.BIN
cvrtbin.exe - convierte el NK.BIN desde y a otros formatos como NK.nb0
binmod.exe - es capaz de reemplazar archivos dentro del NK.BIN
dumprom.exe - extrae todos los archivos del NK.nb0

El problema es que antes de extraer los ficheros del .bin con dumprom, es necesario convertir este fichero a uno .nb0, y a su vez para esto es necesario saber la direccion de inicio en memoria y la longitud del fichero, y cuando intento averiguar esto con viewbin.exe me lanza el siguiente error:

ViewBin... GP311_OS.bin
Missing initial signature (BOOOFF). Not a BIN file

Entonces es cuando se me ha encendido la lamparita.

He abierto el fichero GP311_OS.bin (mi fichero problema) con un editor hexagesimal, y me encuentro que el fichero en lugar de tener una signatura inicial BOOOFF tiene otra NOOOFF, pero curiosamente a continuacion vienen listados una serie de fichero tambien de extension .bin (tinynk.bin, nk.bin, drivers.bin y chain.bin) y un poco mas adelante me encuentrio ohhhh sorpresa, una signatura BOOOFF, y enconces fue cuando se me ocurrió que quizá mi arvhivo .bin fuese a su vez una imagen que contiene ficheros .bin, que a su vez contienen otros archivos, si, un poco enrevesado, pero peores cosas hemos visto, no?

Se me da por buscar más signaturas NOOOFF dentro del archivo y me encuentro, que casualidad, 4 signaturas en total, el mismo número de archivos listados .bin, asi que como veo que la información no parece codificada, se me ocurre empezar por lo mas simple, es decir, abrir el archivo GP311_OS.bin, eliminar su parte inicial hasta llegar a la primera cabecera NOOOFF e ir cortando el archivo en cuatro partes, denominadas  tinynk.bin, nk.bin, drivers.bin y chain.bin, cada parte consta de los bytes desde una cabecera NOOOFF hasta la siguiente.

La prueba de fuego era emplear las NKINTOOLS con estos ficheros y la verdad es que me ha llevado una enorme y agradable sorpresa cuando viewbin.exe me ha dado la información de mis nuevos archivos .bin sin lanzarme errores, luego cvrtbin.exe me ha convertido los archivos .bin a .nb0, y finalmente dumprom.exe me ha extraido todo el contenido completo de estos archivos!!!

Lo cierto es que este proyecto lo tenía parado desde hace dos años que lo intenté y lo di por imposible y ahora al retomarlo y conseguir extraer toda la info de la ROM, me he encontrado muy satisfecho, aunque aun me queda lograr el fin de todo esto, que es:

primero, modificar los ficheros necesarios, y hacer que estos a su vez modifiquen el registro de WinCE al ser cargados por el sistema.

segundo, volver a empacar los ficheros en imagenes .nb0, convertirlos nuevamente a .bin y finalmente aprender a ensamblarlos nuevamente en una imagen .bin concatenada de nombre GP311_OS.BIN, e incluso poder a añadir nuevos ficheros a esta imagen, como archivos de configuración y nuevas aplicaciones del sistema

tercero, modificar el bootloader (GP311_BL.NB0) para que no me lance error al comprobar el checksum  antes de cargar el nuevo fichero GP311_OS.BIN.

El mayor problema creo que reside en este ultimo punto, ya que no conozco debbuger que permitan analizar ficheros de WinCE.

Bueno, y hasta aqui mis avances, que me temo que por cuestiones de agenda tendre que dejar apartados temporalmente, a ver si cuando tenga un ratillo continuo con esto y quien sabe, si llego a algo mas, hacer un tutorial al respecto, ya que la informacion al respecto es muy escasa.

Si quereis conocer mas de mi anterior proyecto en WinCE escrito a mediados de 2009, y de como sacarle partido a un GPS de 60 euros y convertirlo en un "bicharraco", os dejo un enlace a continuación, aunque esto si es más propio de la sección de GPS, :)

http://www.forocoches.com/foro/showthread.php?t=1318592


Saludos, Ortay
















.:UND3R:.

Cita de: OrtaY en 28 Noviembre 2011, 01:19 AM
Gracias por vuestras aportaciones, os comento mi problema:

Os cuento mis avances...

existen varios archivos de imagen en WinCE

unos tienen extensión nb0, y son ejecutados por el sistema, una especie de ejecutables camuflados o empacados

otros tienen extension bin y son mas de lo mismo, con la diferencia de que no son ejecutados directamente, sino cargados como una imagen, algo asi como las imagenes iso de un CD en una unidad virtual.


Normalmente un archivo .bin es un contenedor de archivos, los cuales pueden ser extraidos usando las herramientas adecuadas, igual que lo hariamos de un .rar con winrar. Hasta aqui todo correcto, el problema viene cuando no puedo extraer los archivos de mi fichero .bin (el que he adjuntado el enlace de descarga en el primer post)

Encontre unas utilidades que os recomiendo para analizar este tipo de ficheros, llamadas NKBINTOOLS y esto es lo que hacen:

viewbin.exe - muestra el contenido del NK.BIN
cvrtbin.exe - convierte el NK.BIN desde y a otros formatos como NK.nb0
binmod.exe - es capaz de reemplazar archivos dentro del NK.BIN
dumprom.exe - extrae todos los archivos del NK.nb0

El problema es que antes de extraer los ficheros del .bin con dumprom, es necesario convertir este fichero a uno .nb0, y a su vez para esto es necesario saber la direccion de inicio en memoria y la longitud del fichero, y cuando intento averiguar esto con viewbin.exe me lanza el siguiente error:

ViewBin... GP311_OS.bin
Missing initial signature (BOOOFF). Not a BIN file

Entonces es cuando se me ha encendido la lamparita.

He abierto el fichero GP311_OS.bin (mi fichero problema) con un editor hexagesimal, y me encuentro que el fichero en lugar de tener una signatura inicial BOOOFF tiene otra NOOOFF, pero curiosamente a continuacion vienen listados una serie de fichero tambien de extension .bin (tinynk.bin, nk.bin, drivers.bin y chain.bin) y un poco mas adelante me encuentrio ohhhh sorpresa, una signatura BOOOFF, y enconces fue cuando se me ocurrió que quizá mi arvhivo .bin fuese a su vez una imagen que contiene ficheros .bin, que a su vez contienen otros archivos, si, un poco enrevesado, pero peores cosas hemos visto, no?

Se me da por buscar más signaturas NOOOFF dentro del archivo y me encuentro, que casualidad, 4 signaturas en total, el mismo número de archivos listados .bin, asi que como veo que la información no parece codificada, se me ocurre empezar por lo mas simple, es decir, abrir el archivo GP311_OS.bin, eliminar su parte inicial hasta llegar a la primera cabecera NOOOFF e ir cortando el archivo en cuatro partes, denominadas  tinynk.bin, nk.bin, drivers.bin y chain.bin, cada parte consta de los bytes desde una cabecera NOOOFF hasta la siguiente.

La prueba de fuego era emplear las NKINTOOLS con estos ficheros y la verdad es que me ha llevado una enorme y agradable sorpresa cuando viewbin.exe me ha dado la información de mis nuevos archivos .bin sin lanzarme errores, luego cvrtbin.exe me ha convertido los archivos .bin a .nb0, y finalmente dumprom.exe me ha extraido todo el contenido completo de estos archivos!!!

Lo cierto es que este proyecto lo tenía parado desde hace dos años que lo intenté y lo di por imposible y ahora al retomarlo y conseguir extraer toda la info de la ROM, me he encontrado muy satisfecho, aunque aun me queda lograr el fin de todo esto, que es:

primero, modificar los ficheros necesarios, y hacer que estos a su vez modifiquen el registro de WinCE al ser cargados por el sistema.

segundo, volver a empacar los ficheros en imagenes .nb0, convertirlos nuevamente a .bin y finalmente aprender a ensamblarlos nuevamente en una imagen .bin concatenada de nombre GP311_OS.BIN, e incluso poder a añadir nuevos ficheros a esta imagen, como archivos de configuración y nuevas aplicaciones del sistema

tercero, modificar el bootloader (GP311_BL.NB0) para que no me lance error al comprobar el checksum  antes de cargar el nuevo fichero GP311_OS.BIN.

El mayor problema creo que reside en este ultimo punto, ya que no conozco debbuger que permitan analizar ficheros de WinCE.

Bueno, y hasta aqui mis avances, que me temo que por cuestiones de agenda tendre que dejar apartados temporalmente, a ver si cuando tenga un ratillo continuo con esto y quien sabe, si llego a algo mas, hacer un tutorial al respecto, ya que la informacion al respecto es muy escasa.

Si quereis conocer mas de mi anterior proyecto en WinCE escrito a mediados de 2009, y de como sacarle partido a un GPS de 60 euros y convertirlo en un "bicharraco", os dejo un enlace a continuación, aunque esto si es más propio de la sección de GPS, :)

http://www.forocoches.com/foro/showthread.php?t=1318592


Saludos, Ortay

















Desconozco el funcionamiento de WinCE. Felicitaciones, obviamente es un gran avance, debes ir de poco en poco tu analogía es excelente buena forma de solucionar la extracción del .bin creo que lograrás tu objetivo  ;-)

Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)

megamarc

Veo que vais un poco perdidos spor aquí (sobretodo el amigo _Enko). Llevo 5 años desarrollando proyectos con Windows CE adaptándolo a electrónica hecha a medida. Lo que quiero compartir aquí nace de la experiencia diaria y su conocimiento interno, no de la ingeniería inversa.

Windows CE es un SO de tiempo real para diferentes arquitecturas (x86, ARM, MIPS y SH). Windows Mobile lo toma como base y construye una capa nueva por encima, de la misma forma que Android está basado en Linux, pero no es Linux en sí mismo sino algo que se ha construido por encima. No sólo es utiliado por OEMs chinos sino por fabricantes de todo el mundo. Por si os interesa aquí tenéis la base de conocimiento en MSDN:
http://msdn.microsoft.com/en-US/library/ee504812%28v=winembedded.60%29.aspx

Tampoco es algo genérico que pueda personalizarse si se quiere, sino que debe hacerse. Consta de una parte que sí es común y genérica (aunque puede adaptarse no suele hacerse nunca), pero toda la parte específica de la plataforma hardware (el llamado BSP, Board Suport Package) que consta de bootloader + OAL (OEM Adaptation Layer) + drivers, debe adaptarla el fabricante del hardware. Una vez más, es el mismo caso que Android, que tiene una parte común que mantiene Google, y luego cada fabricante (Samsung, HTC, Sony, etc) debe adaptar a su plataforma
http://msdn.microsoft.com/en-us/library/ee478409%28v=winembedded.60%29.aspx

Por último la aplicación final, que es la que ve el usuario del dispositivo, también está personalizada. La práctica habitual es que ni siquiera se incluyan los componentes de escritorio, sino que una vez han arrancado los servicios básicos, se lanza la aplicación final. No es un windows de escritorio, sino algo pensado para hacer dispositivos embebidos y/o portables.

Las herramientas NKBINTOOLS que habéis encontrado forman parte del Platform Builder, que es el entorno de desarrollo para crear adaptaciones de Windows CE. Os paso el enlace:
http://msdn.microsoft.com/en-us/library/aa448635.aspx

Los ficheros BIN y NB0 que comentáis no son ejecutables camuflados, sino la imagen completa del SO una vez se ha generado. Este archivo es el que luego se graba en la ROM (o Flash) del dispositivo. ambos contienen lo mismo, la diferencia es que un NB0 es un volcado en bruto de la ROM sin formato interno, pensado para grabadores genéricos, un BIN define las zonas que realmente se utilizan y permite "saltarse" los huecos internos. Así por ejemplo si la zona ROM de un dispositivo mide 64 Mb pero el SO final sólamente necesita 11 Mb, el archivo NB0 medirá los 64 Mb enteros, mientras que el BIN medirá sólo los 11 Mb efectivos. Aquí tenéis la referencia (los .abx en realidad son los .nb0)
http://msdn.microsoft.com/en-us/library/ms924925.aspx

Uno de los archivos que hay en cualquier BIN se llama default.fdf y contiene el registro en formato binario. Platform Builder contiene las herramientas necesarias para convertir entre formatos, pero no sé si se pueden utilizar desde fuera: pasar de fdf -> reg se hace mediante una vista integrada en el IDE, y de reg -> fdf con una herramienta de línea de comando llamada regcomp.exe. Más documentación:
http://msdn.microsoft.com/en-us/library/aa448687.aspx

Finalmente, el ensamblado final lo hacen otra serie de herramientas de línea de comando que se comentan en el enlace que he puesto antes. Pero dudo mucho que pueda reensamblarse una imagen simplemente a partir de los ficheros que se han extraido. Mi experiencia con WinCE no es modificando binarios de terceros, sino adaptando y generando desde el entorno de desarrollo. El proceso de generación es muy complejo y se basa en una ingente cantidad de scripts de configuración que se encuentran esparcidos por todo el el proyecto fuente. El mayor problema es que un BIN (o NB0) no es una simple colección de archivos como si fuera un zip, sino que los "archivos" en realidad son regiones físicas de memoria con unos atributos determinados. Durante la generación de crea un fichero llamado Ce.bib que contiene toda esa información, pero los registros finales hacen referencia a los archivos tal como se encuentran en el PC de desarrollo.

Así que hasta donde yo sé, no se puede "descomprimir" un archivo bin, modificar los archivos y volverlo a "comprimir".

Espero haber arrojado algo de luz en el tema. La verdad es que Windows CE es un poco oscuro y hay poca gente que lo domine. Sin ir más lejos yo tuve que ir a hacer el curso de iniciación a Italia (totalmente imposible abordarlo uno por su cuenta en plan amateur), que impartía Adeneo Embedded en unas instalaciones de Microsoft, ya que en toda España no había nadie que hiciera la formación.

Si puedo ayudaros en algo más, aquí estoy.

Blakmaller

Interesante tema, estoy en un proyecto algo parecido, pero por lo comentado por megamarc, creo que es mejor solicitar la imagen con el fabricante que modificarlo uno mismo.

marcotellez

Buenas tardes Amigo, veo que tienes un amplio dominio en Windows CE, por lo cual quisiera pedir tu apoyo...
el problema que tengo es que tengo una imagen de un estero kenwood con Windows CE 6 y puerto USB , pero, no arranca; quisiera saber si se puede crear un usb de arranque de Windows CE y cargar el archivo .bin.

Saludos

diezdedos

Buenas amigos,  os he leído a todos y tengo un problema parecido con un Kenwood DNX4280BT, se queda en reinícios continuos, después de releer en bastantes foros es debido a la ROM de 256M h27u2g8f2ctr BI defectuosa, el SO es un Windows CE 6.0 embebido .
El cambiar la ROM en el servicio oficial Kenwood vale un pastizal. En la pagina oficial de Kenwood hay una actualización del firmware  con los archivos nk.rom, programinfo.bin, tcboot.rom y 11Visual-Mid.rar.

Mi pregunta es ¿cual de estos archivos debo programar en la nueva memoria que voy a sustituir? Lo voy a realizar con un ProMan.

Creo que el archivo a grabar es el nk.rom, si me lo confirmais os lo agradeceria.