This is not a one click utility. You will need to read the below to understand how to use it and whether it will work in your use case.
xex_fragment_finder is a command line tool created by Bo98 to find fragments of XEX files inside a disk image. At this time, it only supports XEX2 executables using both encryption and compression. Support for unencrypted or uncompressed files may be added at a later date.
This is not an easy program for beginners. You will likely need experience with hex, some knowledge of the FATX filesystem, and a little knowledge of XEX files.
Note the help page below. Anything listed as REQUIRED must be defined in your command; however, you will most likely also need to define
Below is an example command and output from a real recovery situation. In this case, the correct fragment was found and the incorrect data in the provided XEX file was replaced with it.
xex_fragment_finder is a command line tool created by Bo98 to find fragments of XEX files inside a disk image. At this time, it only supports XEX2 executables using both encryption and compression. Support for unencrypted or uncompressed files may be added at a later date.
This is not an easy program for beginners. You will likely need experience with hex, some knowledge of the FATX filesystem, and a little knowledge of XEX files.
Note the help page below. Anything listed as REQUIRED must be defined in your command; however, you will most likely also need to define
image-offset-start
and image-offset-end
. Since this tool is only intended for searching along cluster boundaries, you must define these values as a multiple of 0x4000 away from the fragment start. This means if your XEX start offset ends in 0x5000, your image start/end offsets should end in 0x1000, 0x5000, 0x9000, or 0xD000. fragment-size
will also likely need to be defined, but unless you know there's only one fragment and have the exact size of that fragment, it should be left as the default to start with.
Code:
Attempts to find lost XEX fragments.
Usage:
xex_fragment_finder [OPTION...]
-i, --image arg REQUIRED: Input image file to scan and
extract from.
-f, --xex arg REQUIRED: Input XEX to find the fragment of.
-o, --output arg REQUIRED: The output directory to place
possibly valid XEX files from found fragments.
!!!THIS DIRECTORY WILL BE WIPED!!!
-x, --xex-fragment-offset arg
REQUIRED: The offset of where the fragment
would go in the XEX. If there are multiple to
find, pick the first.
-k, --key arg REQUIRED: The key to use for decryption. Pick
from: "dev" or "retail"
--image-offset-start arg The offset to start scanning the image from.
(default: 0)
--image-offset-end arg The offset to scan up to in the image.
(default: 18446744073709551615)
--fragment-size arg The size of the fragment to find. (default:
16384)
--threads arg The number of threads to use. (default: 16)
--help Print help.
Code:
xex_fragment_finder.exe -i C:\HDD.img -f C:\FraggedXex\SpeedDebugOpt-enUS.xex -o C:\DefraggedXex -x 0x83C000 -k dev --image-offset-start 0x2B0EB0000 --image-offset-end 0x119FF90000 --threads 16
Loading XEX...
XEX loaded.
Thread 1: offsets 0x39fdc0000 to 0x48ecd0000
Thread 5: offsets 0x75ba00000 to 0x84a910000
Thread 4: offsets 0x66caf0000 to 0x75ba00000
...
Thread 10 found possible fragment at offset 0xcae040000
...
Thread 4 handling 0x66caf0000 to 0x75ba00000 finished processing after 27.47 seconds.
Thread 2 handling 0x48ecd0000 to 0x57dbe0000 finished processing after 27.58 seconds.
Thread 7 progress: 240000/244676 (98.09%)
Thread 7 handling 0x939820000 to 0xa28730000 finished processing after 27.75 seconds.
All threads finished.