fuse-wiiu/README.md

162 lines
8.5 KiB
Markdown
Raw Permalink Normal View History

2019-04-11 22:27:43 +02:00
# 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.)
2019-06-04 13:48:29 +02:00
- Wii U disc images (WUD, WUX and splitted WUD), including kiosk discs and .wumad files.
2019-04-11 22:27:43 +02:00
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`](https://github.com/libfuse/libfuse) needs to be installed.
**Ubuntu**
```bash
sudo apt-get install libfuse-dev
```
### MacOS
[`osxfuse`](https://osxfuse.github.io) needs to be installed.
```bash
brew cask install osxfuse
```
### Windows
[`winfsp`](https://github.com/billziss-gh/winfsp) needs to be installed.
```batch
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)
2019-04-11 22:27:43 +02:00
**Example Windows:**
2019-04-11 22:27:43 +02:00
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`
2019-04-11 22:27:43 +02:00
## 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.key` or `./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.key` or `./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.
2019-06-04 13:48:29 +02:00
## 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`).
2019-04-11 22:27:43 +02:00
- [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.
2019-04-11 22:27:43 +02:00
Expected file layout:
```
game.wux (or game.wud)
(game.key)
```
2019-06-04 13:48:29 +02:00
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`).
2019-04-11 22:27:43 +02:00
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`).
2019-04-11 22:27:43 +02:00
## 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.
2019-04-11 22:27:43 +02:00
Expected file layout:
```
- tmd.0
- tmd.16
- tmd.48
2019-04-11 22:27:43 +02:00
- 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`).
2019-04-11 22:27:43 +02:00
# Used libraries
- [jnr-fuse](https://github.com/SerCeMan/jnr-fuse)
- [lombok](https://projectlombok.org/) (install it to your IDE)
- [JNUSLib](https://github.com/Maschell/JNUSLib)
- [commons-cli](https://commons.apache.org/proper/commons-cli/)-