Go to file
Maschell f4793d1d0e Replace circleci with github actions 2022-02-02 00:21:33 +01:00
.github/workflows Replace circleci with github actions 2022-02-02 00:21:33 +01:00
src/main/java/de/mas/wiiu/jnus/fuse_wiiu Add support for NUS installable format, update README 2022-02-02 00:16:06 +01:00
.gitignore Update .gitignore 2022-02-01 23:49:35 +01:00
LICENSE First commit 2019-04-11 22:27:43 +02:00
README.md Add support for NUS installable format, update README 2022-02-02 00:16:06 +01:00
pom.xml Use latest JNUSLib version, bump version to 0.4 2022-02-02 00:01:03 +01:00

README.md

fuse-wiiu

fuse-wiiu is an easy way to extract data from Wii U titles in various formats. It's compatible to:

  • Title in the installable format (.tmd, .app, .h3 etc.)
  • Multiple versions of a title in the installable format (.tmd, .app, .h3 etc.)
  • Wii U disc images (WUD, WUX and splitted WUD), including kiosk discs and .wumad files.

fuse-wiiu requires Java 8 and fuse implementation thats compatible to you OS and CPU architecture.

Setup

Before fuse-wiiu can be used the following steps are required.

Fuse

Linux

libfuse needs to be installed.

Ubuntu

sudo apt-get install libfuse-dev

MacOS

osxfuse needs to be installed.

brew cask install osxfuse

Windows

winfsp needs to be installed.

choco install winfsp

Keys (optional)

To decrypt the titles, some keys are required.

The retail common key is expected in either ~/.wiiu/common.key or ./common.key in binary. It's also possible to provide it via an command line argument -commonkey with the key as hex-string.

The dev common key optional for most titles but is expected in either ~/.wiiu/devcommon.key or ./devcommon.key in binary. It's also possible to provide it via an command line argument -devcommonkey with the key as hex-string.

It's possible to provide the disc keys (for decrypting WUD/WUX) or titles keys (to decrypt tmd+app) in a seperate folder. This step is optional Disc keys are expected in ~/.wiiu/discKeys, and should have the same basename as the WUD/WUX. Example: If a mygame.wux is found, a mygame.key will be searched in folder next the .wux. If it doesn't exist, it'll try to load ~/.wiiu/discKeys/mygame.key. The .key is expected to contain the disc key in binary.

If a installable title doesn't provide a title.tik, it's possible to provide the needed title key in the folder ~/.wiiu/titleKeys. Corresponding to the title id, a TITLEID.key is expected which contains the key in binary. Example: if the title 000500101004B100 doesn't have a title.tik, wiiu-fuse will try to load a 000500101004B100.key from ~/.wiiu/titleKeys.

More information can be found in "Supported formats".

Usage

fuse-wiiu will be started from the command line and requires Java 8 and a fuse implementation (see Setup).

Input path

The most imported argument in the -in argument which defines the input path. In most cases this will be a folder, but it's also possible to choose a WUD/WUX directly. If a folder was chosen as input, it will be mirrored to the mounpath, but normal files be hidden. Directories will still be as expected, and whenever a support titles can be mounted, it will be emulated as directory with the prefix [EMULATED] . More information about the behavious on different fileformats can be found on "Supported formats".

Mount path

The mountpath will be set via the -mountpath argument and will set the target of fuse-wiiu. This can be almost any path (and a drive on Windows). Just make sure:

  • The path doesn't exist - but the parent path (if existing) DOES exist.
  • (unix) The user can only mount on a mountpoint for which he has write permission
  • (unitx) The mountpoint must not be a sticky directory which isn't owned by the user (like /tmp usually is)

Example Windows: To mount the folder H:/WiiU to Q:/ you would use something like this: java "-Dfile.encoding=UTF-8" -jar wiiu-fuse.jar -in H:/WiiU -mountpath Q

To mount the folder H:/WiiU to C:/mounted you would use something like this: java "-Dfile.encoding=UTF-8" -jar wiiu-fuse.jar -in H:/WiiU -mountpath C:/mounted Note: You may need to force Java to use the UTF-8 charset. Quoting the VM argument is need by Powershell

Example Unix: To mount the home folder to ~/test you use something like this: java -jar wiiu-fuse.jar -in ~ -mountpath ~/test

Optional arguments.

  • -commonkey [KEY AS HEX STRING] The Wii U retail common key. If not provided, the key will be tried to be read from ~/.wiiu/common.keyor./common.key`. The argument has priority.
  • -devcommonkey [KEY AS HEX STRING] The Wii U dev common key. If not provided, the key will be tried to be read from ~/.wiiu/devcommon.keyor./devcommon.key`. The argument has priority.
  • -disckeypath [path] Override the path where disc keys will be tried to be loaded from.
  • -titlekeypath [path] Override the path where titles keys will be tried to be loaded from.

Forcing the UTF-8 charset to the JVM

java "-Dfile.encoding=UTF-8" -jar wiiu-fuse.jar or java -Dfile.encoding=UTF-8 -jar wiiu-fuse.jar`.

Supported formats

It's possible to use any directory as input, fuse-wiiu will scan will useable formats and mount them on request. If a directory wasn't used for ~5 minutes, it will be unmounted, but automatically remounted on the next access.

If a supported format is found and successfully mounted, a support starting with [EMULATED] will be emulated, which will give you access to the files. The actual content and file layout may differ from format to format.

Wii U disc images - WUD/WUX/Wumad

Images of Wii U discs are saved .wud (or .wux if compressed, or game_partX.wud when dumped on FAT32). Every .wux, .wud or .wumad will be emulated as up to three different directories (for image names game.wux).

  • [EMULATED] game.wux
    • This directory is the "normal" representation of a Wii U disc image. It'll have one subfolder for each partition. The GM-Partitions will be mounted and decrypted directly in the common code, content and meta format. The SI contain the ticket and tmd for GM partitions. All other partitions give you files in the "installable" format (tmd,app,tik).
  • [EMULATED] [EXTRA] game.wux
    • In this directory you can find some extra data (or data in a different presentation) of the disc. This includes:
      • The GM partitions in the "installable" format. (Folders with the prefix [ENCRYPTED] )
      • Mounted and decrypted titles from all partitions. (Folder with the prefix [DECRYPTED] [PARTITIONNAME])
        • This includes titles from the non-GM partitions (like updates), and installable titles from the decrypted GM partitions (titles from kiosk discs).
  • [EMULATED] [WUD] game.wux (Only for WUX and splitted WUD)
    • In this directory you can access Wii U disc image as the orginal WUD.

Expected file layout:

game.wux (or game.wud)
(game.key)

For all discs (except kiosk discs and .wumad), a file containing the disc key is required. This has be either in a .key in the same folder as the wux/wud or in ~/.wiiu/disckeypath (with the same basename e.g game.wux -> game.key).

Multiple WUD/WUX in the same directory are possible, they won't be mounted until you open them.

Installable format (tmd/h3/app)

Expected file layout:

- title.tmd
- 0000000X.app
- 0000000X.h3
- (title.tik)

The title.tik is optional. If no ticket was found, a file [titleID].key (where [titleID] is the titleID of the .tmd)containing the key in binary (16 bytes) is expected in ~/.wiiu/titlekeypath (default ~/.wiiu/titleKeys).

Extended installable format (tmd/h3/app) with multiple versions.

It's possible to have to mount multiple versions of an installable title. In this case, all .app files are expected in the root, and a tmd.[VERSION] for each tmd of a version.

Expected file layout:

- tmd.0
- tmd.16
- tmd.48
- 0000000X.app
- 0000000X.h3
- (title.tik)

The title.tik is optional. If no ticket was found, a file [titleID].key (where [titleID] is the titleID of the .tmd)containing the key in binary (16 bytes) is expected in ~/.wiiu/titlekeypath (default ~/.wiiu/titleKeys).

NUS installable format (tmd/h3/app) with multiple versions.

It's possible to have to mount multiple versions of an installable title. In this case, all content files are expected to have no extension in the root directory. A tmd.[VERSION] for each tmd of a version is expected.

Expected file layout:

- tmd.0
- tmd.16
- tmd.48
- 0000000X
- 0000000X.h3
- (cetk)

The cetk is optional. If no ticket was found, a file [titleID].key (where [titleID] is the titleID of the .tmd) containing the key in binary (16 bytes) is expected in ~/.wiiu/titlekeypath (default ~/.wiiu/titleKeys).

Used libraries