Ah geez, yeah that is a totaly different issue.... I Googled around a bit and honestly I haen't seen very much promising info.
This is the only thing that seems decent but perhaps not very useful if the wad uses its own proprietary file format beyond the wad container. But this can at least get you started.. And the code all belongs the guy in the link. Maybe give him a message to see if he's progressed.
CODE#!/usr/bin/perl
#
# Filename: u8extract.pl
#
# Desc:
#ÂÂÂÂUsed to extract files from Wii U8 archives.
# Last updated:
#ÂÂÂÂ08/14/2008
# Usage:
#ÂÂÂÂu8archive.pl archivename
# Note:
#ÂÂÂÂCreates "u8out" directory for output.
#
# - FyberOptic
# http://www.fybertech.com
#
my $u8filename = $ARGV[0];
if (!length($u8filename) || !-e $u8filename) { print "Please specify a U8 archive to extract\n"; exit; }
# Open archive
open(U8FILE, $u8filename);
binmode(u8FILE);
#struct U8_archive_header
#{
#ÂÂu32 tag; // 0x55AA382D "U.8-"
#ÂÂu32 rootnode_offset; // offset to root_node, always 0x20.
#ÂÂu32 header_size; // size of header from root_node to end of string table.
#ÂÂu32 data_offset; // offset to data -- this is rootnode_offset + header_size, aligned to 0x40.
#ÂÂu8 zeroes[16];
#};
my $filedata;
# Read archive header
read(U8FILE, $filedata, 16);
my ($header_tag,$rootname_offset,$header_size,$data_offset) = unpack("N N N N",$filedata);
# Check for U8 header tag
if ($header_tag != 0x55AA382D) { print "Invalid U8 archive\n"; exit; }
#print "HEADER: $header_tag $rootname_offset $header_size $data_offset\n";
#Read 16 unknown bytes
read(U8FILE, $filedata, 16);
#struct U8_node
#{
#ÂÂu16 type;
#ÂÂu16 name_offset;
#ÂÂu32 data_offset;
#ÂÂu32 size;
#};
# Read first node
read(U8FILE, $filedata, 12);
my ($node_type, $node_nameoffset, $node_dataoffset, $node_size) = unpack("n n N N",$filedata);
#print "FIRST NODE: $node_type, $node_nameoffset, $node_dataoffset, $node_size\n";
# Number of nodes = First node's size
my $totalnodes = $node_size;
# Used to store remaining nodes' hash tables
my @nodes;
# Read nodes (minus one, since we read one already)
for ($n = 0; $n < $totalnodes-1; $n++)
{
ÂÂÂÂread(U8FILE, $filedata, 12);ÂÂÂÂ
ÂÂÂÂmy ($node_type, $node_nameoffset, $node_dataoffset, $node_size) = unpack("n n N N",$filedata);
ÂÂÂÂ#print "NODE $n: $node_type, $node_nameoffset, $node_dataoffset, $node_size\n";
ÂÂÂÂ
ÂÂÂÂmy %currentnode = ('type',$node_type,'nameoffset',$node_nameoffset,'dataoffset',$node_dataoffset, 'size',$node_size);
ÂÂÂÂpush @nodes,\%currentnode;
}
#print "STRINGS SIZE: " . ($header_size - tell(U8FILE) + 32) . "\n";
# Read string table
my $stringtabledata;
read(U8FILE, $stringtabledata, $header_size - tell(U8FILE) + 32);
# Split string table into array
my @stringtable = split("",$stringtabledata);
# Create directory to store output files
mkdir("u8out");
# Extract files
foreach (0..@nodes-1)
{
ÂÂÂÂmy %thisnode = %{$nodes[$_]};
ÂÂÂÂ#print "NODE $_: $thisnode{type}, $thisnode{nameoffset}, $thisnode{dataoffset}, $thisnode{size}\n";
ÂÂÂÂ#print "FILENAME: $stringtable[$_+1]\n\n";
ÂÂÂÂif ($thisnode{'type'} != 0) { next; }
ÂÂÂÂ
ÂÂÂÂprint "Extracting $stringtable[$_+1]...\n";
ÂÂÂÂ
ÂÂÂÂmy $filebuffer;
ÂÂÂÂseek(U8FILE, $thisnode{'dataoffset'}, 0);
ÂÂÂÂread(U8FILE, $filebuffer, $thisnode{'size'});ÂÂÂÂ
ÂÂÂÂ
ÂÂÂÂopen(OUTFILE, "> u8out/$stringtable[$_+1]");
ÂÂÂÂbinmode(OUTFILE);
ÂÂÂÂprint OUTFILE $filebuffer;
ÂÂÂÂclose(OUTFILE);
}
close(U8FILE);
Link
EDIT: Seems this is the process for unpacking wads
QUOTE said:
QUOTE
Dtyen
For anyone interested in tinkering, you need HowardC's U8Tool as well as wwpacker (or some other WAD unpacker). Unpack the WAD and then use U8Tool to extract 00000002.app. As usual, you should have BootMii or preloader installed in case the wad gets messed up and happens tohttp://gbatemp.net/index.php?act=post&do=edit_post&f=108&t=164953&p=2093013&st=0# brick your Wii.