eimgfs icon indicating copy to clipboard operation
eimgfs copied to clipboard

Tool for editting Windows CE/Mobile firmware images.

eimgfs

eimgfs is a tool for creating, decoding, viewing and modifying Windows CE firmware images.

I am re-releasing it here on github. Originally this was posted as part of the itsutils package on xda-developers.

These formats are supported:

  • motorola flash.bin
  • htc (signed) .nbh
  • partitiontable with xips+imgfs
  • plain xip
  • compressed xip
  • plain imgfs

To be able to compress/decompress files it must either run on windows, or as a 32bit binary on osx.

This used to be part of the itsutils distribution.

History

I started developing this tool as dumprom in 2003 for xda-developers. Later converted to perl. And Later again, when WindowsCE started using the imgfs filesystem, converted to c++, now named eimgfs. Which stads for 'Edit imgfs'.

Several older tools with similar functionality: dumpxip.pl, makexip.pl, editimgfs.pl.

Usage

Usage: editimgfs imgfile [operations]

You can specify as many operations as needed.

main options:

option arguments description
-v verbose
-r readonly
-d path where to save extrated files to
-s SIZE specify totalsize ( for motorola FLASH )
-extractall extract all to '-d' path
-list list all files
-info list available readers/filesystems
-filter <EXE SIGNED>
-resign update nbh sigs after modifications
-keyfile KeyFile nbh key file
-extractnbh extract SPL/IPL/OS images from nbh

READER operations:

option arguments description
-rd RdName specify reader to operate upon
-saveas Outfile save entire rd section
-getbytes offset size Outfile
-putbytes offset size Infile
-hexdump offset size
-chexdump {XPR XPH
-hexedit offset bytes...

FILESYSTEM operations:

option arguments description
-fs FsName specify fs to operate upon
-add RomName[=srcfile] ... adds a list of files
you can also add all files from a directory
-del RomName
-ren RomName=NEWNAME
-extract RomName=dstfile
-fileinfo RomName print detailed info about file
-dirhexdump for debugging

Example

An example, how i have used this tool:

eimgfs -s 0x10000000  therom.nb \
       -fs imgfs -del delfiles -add files \
       -fs xip23 -del delfiles-xip23 -add files-xip23 \
       -fs xip20 -del delfiles-xip20 -add files-xip20

This will alter therom.nb, increasing its maximum size to 256Mbyte, deleting files from the imgfs, xip20, xip23 partition for the names found in the respective delfiles-... directories, and adding files from the files-... directories.

Building

There are makefiles for OSX and Windows. Both depend on the presence of 32 bit libraries for boost and openssl.

Make sure the dlls from the dlls directory are somewhere in the search path. They are needed for decompression.

You can build eimgfs with OSX SDK up to version 10.13, version 10.14 no longer includes the 32 bit libraries needed.

Docker is supported. Multistage building is used. Stage run should be used for actual executing the application. Entrypoint is configured as well.

docker build --target run .
docker run -v /home/user/images:/app/data --rm -ti ef7b7abd7b4d -fs xip -fileinfo /app/data/FILENAME

On linux, you may need to install g++-multilib and 32bit binaries for openssl.

author

(C) 2003-2013 Willem Hengeveld [email protected]