Wiifuse

wiifuse - coded by dhewg, #wiidev efnet

based on gcfuse code by:
Copyright (C) 2006 Mike Melanson (mike at multimedia.cx)
Copyright (C) 2005 Janusz Dziemidowicz (rraptorr at nails.eu.org)


Readme

About

wiifuse is a program that allows you to mount a Gamecube or Wii DVD disc image as a read-only part of the file system. This allows users to browse the directory structure and read the files within.
In contrast to the Gamecube, Wii images have multiple partitions. These are encrypted and wiifuse supports on-the-fly decryption - provided you have the required 128bit AES key.
Further, wiifuse provides access to special data found on these discs. Among others, this includes the main executable and informational things like the game's name.

Requirements

  • An operating system which
    • is supported by FUSE,
    • supports POSIX compatible threads,
  • FUSE 2.6.x (or higher) and
  • OpenSSL

Build

To build wiifuse, you will need a working compiler and the development packages for the required libraries; have a look at the OS-specific notes.
The archive includes a Makefile, so just run
make

Usage

./wiifuse <image_file> <mount_point> [<FUSE library options>]
Hints:
  • Append -f for debug messages (process won't daemonize).
  • Append -o allow_other to let other users access the mount point.
  • Append -h for common FUSE library options.
  • Use fusermount -u <mount_point> to unmount a previously mounted image.

Example

$ ./wiifuse ~/zelda_tp.iso ~/wii_image -o allow_other
$ ls -l ~/wii_image

total 0
lrwxrwxrwx 1 dhewg 1 Mar 15 2007 data -> partition2
dr-xr-xr-x 4 dhewg 0 Mar 15 2007 partition0
dr-xr-xr-x 6 dhewg 0 Mar 15 2007 partition1
dr-xr-xr-x 6 dhewg 0 Mar 15 2007 partition2
lrwxrwxrwx 1 dhewg 1 Mar 15 2007 update -> partition1

$ cat ~/wii_image/data/header/name

The Legend of Zelda Twilight Princess

$ mplayer ~/wii_image/data/fs/Movie/demo_movie98_00.thp
$ fusermount -u ~/wii_image


Troubleshooting

  • Check if the FUSE kernel module is loaded:
    • linux: lsmod | grep fuse
    • freebsd: kldstat | grep fuse
    • OS X: kextstat | grep fuse
  • Verify your key file, the MD5-sum of the 16 byte file (without line feed) currently is 8d1a2ebcd82a3469b77facf15d9c8e50.
  • Append -d 2>&1 | tee ~/wiifuse.log to the wiifuse cmdline. This will create a logfile called wiifuse.log in your home directory. Open it in your favorite text editor to get an idea of what's going wrong.
If you still can't get it working, copy and paste the content of that logfile to something like rafb and /msg me (dhewg) the resulting link on IRC.


OS-Specific Notes

Debian / Ubuntu

To install the binaries provided below, do the following:
dpkg -i wiifuse_0.2.0-wip1-1_i386.deb
To build wiifuse you need to fetch these required packages:
aptitude (or apt-get) install build-essential fuse-utils libfuse-dev libssl-dev
To mount an image without root privileges, add the user to the fuse group:
adduser dhewg fuse

Gentoo

  • emerge sys-fs/fuse

FreeBSD

Install the required ports:
  • sysutils/fusefs-kmod
  • sysutils/fusefs-libs
Further docs can be found here.

OS X

Required software:


Download

v0.2.0-wip1

wiifuse-0.2.0-wip1.tgz
Binary for Debian unstable (and probably latest Ubuntu as well):
wiifuse_0.2.0-wip1-1_i386.tgz


v0.1.2

wiifuse-0.1.2.tgz

v0.1.1

wiifuse-0.1.1.tgz


Changelog

  • v0.2.0-wip1
  • new client/server mode. requires an usb gecko and wiifuse server running on a gamecube or wii in gc mode - for now ;)
  • new metadata: title id symlinks, tmd infos
  • v0.1.2
  • added more disc id's
  • support for virtual console partitions (found 14 vc games on brawl)
  • stat compliant - `du` works now
  • statvfs compliant - `df` works now
  • minor cleanups and fixes
  • v0.1.1
  • fixed some serious u64 offset bugs
  • corrected the main.dol size calculation
  • some easy partition validation
  • support for symlinks
  • cleaned up and extended the available metadata