All files are released under GPLv3+, project started at 21 March 2012 by Peter "Lekensteyn" (contact lekensteyn@gmail.com http://lekensteyn.nl/). I realize that an existing project also uses the name "PFS" (image/picture software I believe?), therefore the program is named "pfstool" ;) Made for handling files for the Siemens SX551 router (https://forum.openwrt.org/viewtopic.php?id=33600) Note: apart from the filesystem on the beginning of the file, there also seems to be a second part after a bunch of ff ff ff ... . Using lzma to decompress the binary file only extracts the PFS image on the beginning of the file, the second part is ignored. some notes below le = little endian lzma format from http://svn.python.org/projects/external/xz-5.0.3/doc/lzma-file-format.txt: 00 - 01 1 properties 01 - 04 4 dictionary size 05 - 0D 8 uncompressed size (le) <-- that we are interested in offset length description 00 - 07 8 "PFS/0.9" (nil) 08 - 0B 4 0 bytes (00 00 00 00) 0C - 0D 2 ??? 0E - 0F 2 n number of files (little endian) 10 - ** * file information for n files (72 / 0x48) bytes, length 48 times n (le) ZZ - EE * data starting at 0x10+48n begin - end len_hex len_dec description 00 - 48 48 (72) file info 00 - 3B 3C (60) filename 3C - 3F (4) a timestamp? (le) 40 - 43 (4) file offset relative to ZZ (le) 44 - 47 (4) le file size (le) file types: file offset: if it points to the end of the file (beyond the last byte), dynamic content is served (observed: all cgi-bin/...exe files have this field set in such a way) (size = 0 as well) make # pfstool has option -t, -x, -v and -C similar to tar. It defaults to -t ./pfstool xv -C dest/ ...bin