From 5c1c02dabad3998f70028e13f8dd79cc79a83413 Mon Sep 17 00:00:00 2001 From: Maschell Date: Fri, 5 Feb 2016 16:40:26 +0100 Subject: [PATCH] Refactored the decryption, added new gui to choose update added one line to config file (for updatelist) added updatelist.csv added a new crappy gui for the update list (i need someone for the gui stuff:'D) removed JAVA 7 support (sorry) --- .gitignore | 2 + jar/JNUSTool.jar | Bin 36011 -> 59097 bytes jar/JNUSTool_Java7.jar | Bin 36003 -> 0 bytes jar/config | 3 +- jar/updatetitles.csv | 322 ++++++++++++++++++ src/de/mas/jnustool/Directory.java | 9 +- src/de/mas/jnustool/FEntry.java | 33 +- src/de/mas/jnustool/FST.java | 19 +- src/de/mas/jnustool/Logger.java | 13 + src/de/mas/jnustool/NUSTitle.java | 93 +++-- src/de/mas/jnustool/Starter.java | 108 ++++-- src/de/mas/jnustool/TitleMetaData.java | 30 +- src/de/mas/jnustool/gui/JCheckBoxTree.java | 2 - src/de/mas/jnustool/gui/NUSGUI.java | 77 +++-- src/de/mas/jnustool/gui/UpdateChooser.java | 190 +++++++++++ src/de/mas/jnustool/util/ByteArrayBuffer.java | 33 ++ src/de/mas/jnustool/util/Decryption.java | 243 +++++-------- src/de/mas/jnustool/util/Downloader.java | 4 +- src/de/mas/jnustool/util/ExitException.java | 14 - .../jnustool/util/NUSTitleInformation.java | 128 +++++++ updatetitles.csv | 322 ++++++++++++++++++ 21 files changed, 1331 insertions(+), 314 deletions(-) delete mode 100644 jar/JNUSTool_Java7.jar create mode 100644 jar/updatetitles.csv create mode 100644 src/de/mas/jnustool/Logger.java create mode 100644 src/de/mas/jnustool/gui/UpdateChooser.java create mode 100644 src/de/mas/jnustool/util/ByteArrayBuffer.java delete mode 100644 src/de/mas/jnustool/util/ExitException.java create mode 100644 src/de/mas/jnustool/util/NUSTitleInformation.java create mode 100644 updatetitles.csv diff --git a/.gitignore b/.gitignore index 52a1beb..965efbf 100644 --- a/.gitignore +++ b/.gitignore @@ -48,3 +48,5 @@ Temporary Items 0* bin /config +/tmp* +UpdateGrabber.java \ No newline at end of file diff --git a/jar/JNUSTool.jar b/jar/JNUSTool.jar index 2aeef33120ecc0a785c0df68f748f0a77da59cb8..e58ef4d8902f47889b414f5644ef460c2fc5ae13 100644 GIT binary patch literal 59097 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 G?SB9|1zr#U literal 36011 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

(*bJTv#-FUfr2gd|M*v8CV#{CDz^dzc||DefYsF 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 XjhX;&R$!USz#svHazIvo8;A!0t$}_P diff --git a/jar/config b/jar/config index 3814033..45dc7a6 100644 --- a/jar/config +++ b/jar/config @@ -1,2 +1,3 @@ http://ccs.cdn.wup.shop.nintendo.net/ccs/download -[COMMONKEY] \ No newline at end of file +[COMMONKEY] +updatetitles.csv \ No newline at end of file diff --git a/jar/updatetitles.csv b/jar/updatetitles.csv new file mode 100644 index 0000000..5a6a2c7 --- /dev/null +++ b/jar/updatetitles.csv @@ -0,0 +1,322 @@ +0005000E-10100600;1;WUP;00AF;WUP-U-AKNJ;AKNJAF;TEKKEN TAG TOURNAMENT 2 Wii U EDITION +0005000E-10101B00;4;WUP;0001;WUP-U-APLP;APLP01;LEGO® CITY UNDERCOVER +0005000E-10101C00;1;WUP;0001;WUP-U-ARPJ;ARPJ01;New SUPER MARIO BROS. U +0005000E-10101D00;2;WUP;0001;WUP-U-ARPE;ARPE01;New SUPER MARIO BROS. U +0005000E-10101E00;4;WUP;0001;WUP-U-ARPP;ARPP01;New SUPER MARIO BROS. U +0005000E-10101F00;1;WUP;0001;WUP-U-ALCJ;ALCJ01;Nintendo Land +0005000E-10102000;2;WUP;0001;WUP-U-ALCE;ALCE01;Nintendo Land +0005000E-10102100;4;WUP;0001;WUP-U-ALCP;ALCP01;Nintendo Land +0005000E-10102200;1;WUP;0001;WUP-U-ASTJ;ASTJ01;Wii Fit U +0005000E-10102300;2;WUP;0001;WUP-U-ASTE;ASTE01;Wii Fit U +0005000E-10102400;4;WUP;0001;WUP-U-ASTP;ASTP01;Wii Fit U +0005000E-10104D00;1;WUP;0008;WUP-U-AHDJ;AHDJ08;MONSTER HUNTER 3(tri-)G HD Ver. +0005000E-10106900;1;WUP;0001;WUP-U-AURJ;AURJ01;Mario & Sonic at the Sochi 2014 Olympic Winter Games +0005000E-10106B00;2;WUP;0041;WUP-U-ASSE;ASSE41;Assassin's Creed® III +0005000E-1010AE00;2;WUP;0041;WUP-U-AJDE;AJDE41;JUST DANCE 4 +0005000E-1010AF00;2;WUP;0041;WUP-U-AMVE;AMVE41;Marvel Avengers™: Battle for Earth +0005000E-1010B000;2;WUP;0041;WUP-U-ARBE;ARBE41;Rabbids Land +0005000E-1010B300;2;WUP;008P;WUP-U-AS2E;AS2E8P;Sonic & All-Stars Racing Transformed +0005000E-1010B400;2;WUP;0041;WUP-U-ASPE;ASPE41;ESPN Sports Connection +0005000E-1010B600;2;WUP;0041;WUP-U-AYSE;AYSE41;Your Shape® Fitness Evolved 2013 +0005000E-1010C700;2;WUP;0001;WUP-U-AURE;AURE01;Mario & Sonic at the Sochi 2014 Olympic Winter Games +0005000E-1010C800;4;WUP;0001;WUP-U-AURP;AURP01;Mario & Sonic at the Sochi 2014 Olympic Winter Games +0005000E-1010CF00;2;WUP;0052;WUP-U-AECE;AECE52;Call of Duty: Black Ops II +0005000E-1010DA00;2;WUP;0054;WUP-U-ANBE;ANBE54;NBA 2K13 +0005000E-1010DC00;2;WUP;0069;WUP-U-AMEE;AMEE69;Mass Effect™ 3 Special Edition +0005000E-1010DD00;2;WUP;0041;WUP-U-AZUE;AZUE41;ZombiU +0005000E-1010E300;2;WUP;0041;WUP-U-AS9E;AS9E41;Splinter Cell Blacklist +0005000E-1010EA00;1;WUP;00C8;WUP-U-AHBJ;AHBJC8;WARRIORS OROCHI 3 Hyper +0005000E-1010EB00;1;WUP;0001;WUP-P-AMKJ;AMKJ01;MARIO KART 8 +0005000E-1010EC00;2;WUP;0001;WUP-P-AMKE;AMKE01;MARIO KART 8 +0005000E-1010ED00;4;WUP;0001;WUP-P-AMKP;AMKP01;MARIO KART 8 +0005000E-1010EE00;4;WUP;0069;WUP-U-AF3P;AF3P69;FIFA 13 +0005000E-1010EF00;4;WUP;0041;WUP-U-AZUP;AZUP41;ZombiU +0005000E-1010F000;4;WUP;0041;WUP-U-AJDP;AJDP41;JUST DANCE 4 +0005000E-1010F500;4;WUP;0069;WUP-U-AMEP;AMEP69;Mass Effect™ 3 Special Edition +0005000E-1010F600;4;WUP;0041;WUP-U-ASSP;ASSP41;Assassin's Creed® III +0005000E-1010F700;4;WUP;0041;WUP-U-AYSP;AYSP41;Your Shape® Fitness Evolved 2013 +0005000E-1010F800;4;WUP;00AF;WUP-U-AKNP;AKNPAF;TEKKEN TAG TOURNAMENT 2 Wii U EDITION +0005000E-1010FB00;4;WUP;00NK;WUP-U-WDLP;WDLPNK;Puddle +0005000E-1010FC00;4;WUP;0041;WUP-U-ARBP;ARBP41;Rabbids Land +0005000E-1010FF00;4;WUP;00WR;WUP-U-AGPP;AGPPWR;Game Party Champions +0005000E-10110000;2;WUP;00AF;WUP-U-AKNE;AKNEAF;TEKKEN TAG TOURNAMENT 2 Wii U EDITION +0005000E-10110100;2;WUP;00JX;WUP-U-WASE;WASEJX;Nano Assault Neo +0005000E-10110200;2;WUP;00C8;WUP-U-AHBE;AHBEC8;WARRIORS OROCHI 3 Hyper(NA) +0005000E-10110600;4;WUP;00JX;WUP-U-WASP;WASPJX;Nano Assault Neo +0005000E-10110800;4;WUP;0041;WUP-U-AMVP;AMVP41;Marvel Avengers™: Battle for Earth +0005000E-10110900;1;WUP;00C8;WUP-U-ANGJ;ANGJC8;NINJA GAIDEN 3: Razor's Edge +0005000E-10110A00;2;WUP;0001;WUP-U-ANGE;ANGE01;NINJA GAIDEN 3: Razor's Edge +0005000E-10110B00;4;WUP;0001;WUP-U-ANGP;ANGP01;NINJA GAIDEN 3: Razor's Edge +0005000E-10110E00;1;WUP;0001;WUP-P-AXFJ;AXFJ01;Super Smash Bros. for Wii U +0005000E-10111700;2;WUP;00WR;WUP-U-AJSE;AJSEWR;Injustice: Gods Among Us +0005000E-10111A00;4;WUP;00WR;WUP-U-AJSP;AJSPWR;Injustice: Gods Among Us +0005000E-10111C00;1;WUP;00C8;WUP-U-AG9J;AG9JC8;Romance of the Three Kingdoms 12 +0005000E-10111D00;4;WUP;0041;WUP-U-ASPP;ASPP41;Sports Connection +0005000E-10111F00;4;WUP;008P;WUP-U-AS2P;AS2P8P;Sonic & All-Stars Racing Transformed +0005000E-10112000;2;WUP;00G9;WUP-U-ACRE;ACREG9;THE CROODS +0005000E-10112100;4;WUP;0041;WUP-U-AKFP;AKFP41;Know Your Friends +0005000E-10112200;4;WUP;00FZ;WUP-U-WBDP;WBDPFZ;Trine 2 Director's Cut +0005000E-10112300;1;WUP;0041;WUP-U-AZUJ;AZUJ41;ZombiU +0005000E-10112400;1;WUP;0041;WUP-U-ASSJ;ASSJ41;Assassin's Creed® III +0005000E-10112500;1;WUP;0041;WUP-U-ASPJ;ASPJ41;Sports Connection +0005000E-10112800;1;WUP;0041;WUP-U-AS9J;AS9J41;Splinter Cell Blacklist +0005000E-10112B00;4;WUP;00C8;WUP-U-AHBP;AHBPC8;WARRIORS OROCHI 3 Hyper(EU) +0005000E-10112F00;4;WUP;0054;WUP-U-ANBP;ANBP54;NBA 2K13 +0005000E-10113000;1;WUP;0013;WUP-U-AMEJ;AMEJ13;Mass Effect™ 3 Special Edition +0005000E-10113100;1;WUP;0008;WUP-U-ABHJ;ABHJ08;BIOHAZARD REVELATIONS Unveiled Edition +0005000E-10113400;4;WUP;0052;WUP-U-AECP;AECP52;Call of Duty: Black Ops II +0005000E-10113500;4;WUP;0052;WUP-U-AECI;AECI52;Call of Duty: Black Ops II +0005000E-10113700;4;WUP;0052;WUP-U-AECD;AECD52;Call of Duty: Black Ops II +0005000E-10113800;4;WUP;00Y4;WUP-U-WBAP;WBAPY4;Zen Pinball 2 +0005000E-10113C00;2;WUP;00GT;WUP-U-AFBE;AFBEGT;Funky Barn +0005000E-10115E00;1;WUP;00GD;WUP-U-ADQJ;ADQJGD;Dragon Quest X +0005000E-10115F00;2;WUP;00Y4;WUP-U-WBAE;WBAEY4;Zen Pinball 2 +0005000E-10116100;1;WUP;0001;WUP-P-AX5J;AX5J01;XenobladeX +0005000E-10116300;1;WUP;0001;WUP-U-ACMJ;ACMJ01;The Wonderful 101 +0005000E-10116500;4;WUP;00TW;WUP-U-WAAP;WAAPTW;Toki Tori 2+ +0005000E-10116600;1;WUP;00C8;WUP-U-AH9J;AH9JC8;Fist of the North Star: Ken's Rage 2 +0005000E-10117200;4;WUP;0008;WUP-U-AHDP;AHDP08;MONSTER HUNTER 3 ULTIMATE +0005000E-10117700;4;WUP;00TJ;WUP-U-WCAP;WCAPTJ;Chasing Aurora +0005000E-10118300;2;WUP;0008;WUP-U-AHDE;AHDE08;MONSTER HUNTER 3 ULTIMATE +0005000E-10118400;4;WUP;00GT;WUP-U-AFBP;AFBPGT;Funky Barn +0005000E-1011A700;4;WUP;0041;WUP-U-AZUD;AZUD41;ZombiU +0005000E-1011AF00;2;WUP;00XY;WUP-U-WBTE;WBTEXY;BIT.TRIP Presents... Runner2: Future Legend of Rhythm Alien +0005000E-1011B300;4;WUP;00TZ;WUP-U-AFBZ;AFBZTZ;Funky Barn (Download Version) +0005000E-1011B400;1;WUP;00GD;WUP-U-AECJ;AECJGD;Call of Duty: Black Ops II +0005000E-1011B600;1;WUP;00GD;WUP-U-AQDJ;AQDJGD;Dragon Quest X Beta test +0005000E-1011B700;4;WUP;0041;WUP-U-WLAP;WLAP41;Uplay +0005000E-1011BA00;2;WUP;0041;WUP-U-WLAE;WLAE41;Uplay +0005000E-1011C000;2;WUP;00TJ;WUP-U-WCAE;WCAETJ;Chasing Aurora +0005000E-10128400;4;WUP;0069;WUP-U-ANSP;ANSP69;Need for Speed™ Most Wanted U +0005000E-10128700;2;WUP;00TW;WUP-U-WAAE;WAAETW;Toki Tori 2+ +0005000E-10128800;2;WUP;0069;WUP-U-ANSE;ANSE69;Need for Speed™ Most Wanted U +0005000E-10128A00;2;WUP;00FZ;WUP-U-WBDE;WBDEFZ;Trine 2 Director's Cut +0005000E-10128F00;2;WUP;008P;WUP-U-ASNE;ASNE8P;SONIC LOST WORLD +0005000E-10129000;2;WUP;0008;WUP-U-WDKE;WDKE08;DuckTales: Remastered +0005000E-10129200;4;WUP;0008;WUP-U-WDKP;WDKP08;DuckTales: Remastered +0005000E-1012AC00;4;WUP;0041;WUP-U-AS9P;AS9P41;Splinter Cell Blacklist +0005000E-1012B100;4;WUP;008P;WUP-U-ASNP;ASNP8P;SONIC LOST WORLD +0005000E-1012B400;4;WUP;0008;WUP-U-ABHP;ABHP08;RESIDENT EVIL REVELATIONS +0005000E-1012B700;1;WUP;0013;WUP-U-ANSJ;ANSJ13;Need for Speed™ Most Wanted U +0005000E-1012BC00;1;WUP;0001;WUP-U-AC3J;AC3J01;PIKMIN 3 +0005000E-1012BD00;2;WUP;0001;WUP-U-AC3E;AC3E01;PIKMIN 3 +0005000E-1012BE00;4;WUP;0001;WUP-U-AC3P;AC3P01;PIKMIN 3 +0005000E-1012C500;4;WUP;00AF;WUP-U-ACRP;ACRPAF;THE CROODS +0005000E-1012CF00;2;WUP;0008;WUP-U-ABHE;ABHE08;RESIDENT EVIL REVELATIONS +0005000E-1012DC00;2;WUP;0001;WUP-U-ACME;ACME01;The Wonderful 101 +0005000E-1012F100;1;WUP;0001;WUP-U-AWSJ;AWSJ01;Wii Sports Club +0005000E-10131D00;1;WUP;0001;WUP-U-ASEJ;ASEJ01;???????? +0005000E-10131F00;1;WUP;0001;WUP-U-AYCJ;AYCJ01;yoshi's woolly world +0005000E-10132400;4;WUP;00WR;WUP-U-ALMP;ALMPWR;LEGO® MARVEL Super Heroes +0005000E-10132500;1;WUP;0001;WUP-U-WB9J;WB9J01;Wii Fit U Quick Check +0005000E-10132600;2;WUP;0001;WUP-U-WB9E;WB9E01;Wii Fit U Quick Check +0005000E-10132700;4;WUP;0001;WUP-U-WB9P;WB9P01;Wii Fit U Quick Check +0005000E-10132800;2;WUP;00UP;WUP-U-WEPE;WEPEUP;Unepic EnjoyUp Games +0005000E-10132900;2;WUP;004Q;WUP-U-ADSE;ADSE4Q;Disney INFINITY +0005000E-10132A00;4;WUP;00Y4;WUP-U-WA2P;WA2PY4;Star Wars Pinball +0005000E-10132B00;2;WUP;00WR;WUP-P-ALME;ALMEWR;LEGO® MARVEL Super Heroes +0005000E-10135200;2;WUP;00Y4;WUP-U-WA2E;WA2EY4;Star Wars Pinball +0005000E-10135300;4;WUP;0001;WUP-U-ACMP;ACMP01;The Wonderful 101 +0005000E-10135700;1;WUP;008P;WUP-U-ASNJ;ASNJ8P;SONIC LOST WORLD +0005000E-10136300;4;WUP;00XY;WUP-U-WBTP;WBTPXY;BIT.TRIP Presents... Runner2: Future Legend of Rhythm Alien +0005000E-10136C00;4;WUP;00WR;WUP-U-AZEP;AZEPWR;Batman™: Arkham Origins +0005000E-10136F00;4;WUP;004Q;WUP-U-ADSP;ADSP4Q;Disney Infinity +0005000E-10137000;4;WUP;004Q;WUP-U-ADSZ;ADSZ4Q;Disney Infinity +0005000E-10137C00;2;WUP;00WR;WUP-U-AZEE;AZEEWR;Batman™: Arkham Origins +0005000E-10137F00;2;WUP;0001;WUP-P-ARKE;ARKE01;Donkey Kong Country Tropical Freeze +0005000E-10138300;4;WUP;0001;WUP-P-ARKP;ARKP01;Donkey Kong Country Tropical Freeze +0005000E-10138700;4;WUP;00YV;WUP-P-WB6P;WB6PYV;Spin the Bottle: Bumpie's Party +0005000E-10138800;4;WUP;0041;WUP-U-ASBP;ASBP41;Assassin's Creed® IV Black Flag +0005000E-10138B00;2;WUP;0041;WUP-U-ASBE;ASBE41;Assassin's Creed® IV Black Flag +0005000E-10138E00;4;WUP;0041;WUP-U-WB7P;WB7P41;Rayman Legends Challenges App +0005000E-10138F00;1;WUP;0001;WUP-U-ADNJ;ADNJ01;Devil's Third +0005000E-10139200;2;WUP;0052;WUP-U-ASFE;ASFE52;Skylanders SWAP Force +0005000E-10139500;2;WUP;0041;WUP-U-WB7E;WB7E41;Rayman Legends Challenges App +0005000E-10139900;2;WUP;0041;WUP-P-AJ5E;AJ5E41;JUST DANCE® 2014 +0005000E-10140400;4;WUP;0052;WUP-U-ASFP;ASFP52;Skylanders SWAP Force +0005000E-10140700;1;WUP;00WR;WUP-U-AJSJ;AJSJWR;Injustice: Gods Among Us +0005000E-10142700;4;WUP;0001;WUP-P-AA9P;AA9P01;Art Academy: SketchPad +0005000E-10142A00;2;WUP;005G;WUP-U-AZBE;AZBE5G;Zumba Fitness World Party +0005000E-10142B00;1;WUP;0001;WUP-P-AA9J;AA9J01;Art Academy: SketchPad +0005000E-10142C00;2;WUP;0001;WUP-P-AA9E;AA9E01;Art Academy: SketchPad +0005000E-10143F00;4;WUP;0041;WUP-P-AJ5P;AJ5P41;JUST DANCE® 2014 +0005000E-10144000;2;WUP;00G9;WUP-U-ADVE;ADVEG9;Adventure Time: Explore the Dungeon Because I Don't Know! +0005000E-10144800;1;WUP;0001;WUP-P-ARKJ;ARKJ01;Donkey Kong Country Tropical Freeze +0005000E-10144D00;2;WUP;0001;WUP-U-AWSE;AWSE01;Wii Sports Club +0005000E-10144E00;4;WUP;0001;WUP-U-AWSP;AWSP01;Wii Sports Club +0005000E-10144F00;2;WUP;0001;WUP-P-AXFE;AXFE01;Super Smash Bros. for Wii U +0005000E-10145000;4;WUP;0001;WUP-P-AXFP;AXFP01;Super Smash Bros. for Wii U +0005000E-10145600;7;WUP;0001;WUP-U-ADBA;ADBA01;Animal Crossing Plaza +0005000E-10145800;4;WUP;00UP;WUP-U-WEPP;WEPPUP;Unepic EnjoyUp Games +0005000E-10145900;4;WUP;00HL;WUP-U-WCDP;WCDPHL;Coaster Crazy Deluxe +0005000E-10145F00;1;WUP;0001;WUP-P-WMGJ;WMGJ01;NES REMIX +0005000E-10146000;2;WUP;0001;WUP-P-WMGE;WMGE01;NES REMIX +0005000E-10146100;4;WUP;0001;WUP-P-WMGP;WMGP01;NES REMIX +0005000E-10146800;2;WUP;0052;WUP-P-ACPE;ACPE52;Call of Duty: Ghosts +0005000E-10147600;4;WUP;00DZ;WUP-P-WEVP;WEVPDZ;EvoFish +0005000E-10147F00;2;WUP;00YV;WUP-P-WB6E;WB6EYV;Spin the Bottle: Bumpie's Party +0005000E-10148000;1;WUP;00AF;WUP-P-AUNJ;AUNJAF;ONE PIECE UNLIMITED WORLD R +0005000E-10148200;2;WUP;00UP;WUP-U-WAEE;WAEEUP;Rock 'N Racing Off Road +0005000E-10148F00;1;WUP;0041;WUP-U-WLAJ;WLAJ41;Uplay +0005000E-10149200;4;WUP;00SS;WUP-U-WDFP;WDFPSS;Spot The Differences: Party! +0005000E-10149500;2;WUP;00CS;WUP-P-WKTE;WKTECS;Scram Kitty and his Buddy on Rails +0005000E-10149700;1;WUP;0001;WUP-P-WAUJ;WAUJ01;?? ?? +0005000E-1014C600;4;WUP;00CX;WUP-U-WGSP;WGSPCX;Giana Sisters Twisted Dreams +0005000E-1014C800;1;WUP;0041;WUP-U-ASBJ;ASBJ41;Assassin's Creed® IV Black Flag +0005000E-1014CB00;2;WUP;00CX;WUP-P-WGSE;WGSECX;Giana Sisters Twisted Dreams +0005000E-1014CF00;2;WUP;00HL;WUP-U-WCDE;WCDEHL;Coaster Crazy Deluxe +0005000E-1014D100;4;WUP;00CS;WUP-U-WKTP;WKTPCS;Scram Kitty and his Buddy on Rails +0005000E-1014D900;1;WUP;008P;WUP-P-APTJ;APTJ8P;PUYOPUYOTETRIS +0005000E-1014DA00;1;WUP;0008;WUP-U-AMFJ;AMFJ08;Monster Hunter Frontier G +0005000E-1014DE00;2;WUP;00WR;WUP-U-ALAE;ALAEWR;The LEGO® Movie Videogame +0005000E-1014E000;4;WUP;00WR;WUP-U-ALAP;ALAPWR;The LEGO® Movie Videogame +0005000E-1014E100;4;WUP;00AF;WUP-U-ADVP;ADVPAF;Adventure Time: Explore the Dungeon Because I Don't Know! +0005000E-1014E300;4;WUP;00GT;WUP-U-AZBP;AZBPGT;Zumba Fitness World Party +0005000E-10154600;1;WUP;00WR;WUP-U-AZEJ;AZEJWR;Batman™: Arkham Origins +0005000E-10154D00;4;WUP;00BU;WUP-U-WC3P;WC3PBU;The Mysterious Cities of Gold: Secret Paths +0005000E-10156100;4;WUP;0052;WUP-P-ACPP;ACPP52;Call of Duty: Ghosts +0005000E-10156500;2;WUP;00BU;WUP-U-WC3E;WC3EBU;The Mysterious Cities of Gold: Secret Paths +0005000E-10157600;4;WUP;0052;WUP-P-ACPI;ACPI52;Call of Duty: Ghosts +0005000E-10157900;1;WUP;00GD;WUP-P-ACPJ;ACPJGD;Call of Duty: Ghosts +0005000E-10159800;1;WUP;0001;WUP-U-AFCJ;AFCJ01;Wii Fit U (Free) +0005000E-10159900;2;WUP;0001;WUP-U-AFCE;AFCE01;Wii Fit U (Free) +0005000E-10159A00;4;WUP;0001;WUP-U-AFCP;AFCP01;Wii Fit U (promo) +0005000E-1015A300;1;WUP;00AF;WUP-U-ADSJ;ADSJAF;Disney INFINITY +0005000E-1015B200;2;WUP;0041;WUP-P-ACLE;ACLE41;CHILD of LIGHT +0005000E-1015D300;2;WUP;00AS;WUP-P-WLCE;WLCEAS;Lucadian Chronicles +0005000E-1015EB00;1;WUP;00R7;WUP-U-WHYJ;WHYJR7;Mighty Switch Force!™ Hyper Drive Edition +0005000E-10161F00;1;WUP;0001;WUP-U-ABAJ;ABAJ01;Mario Party 10 +0005000E-10162300;4;WUP;00YR;WUP-U-WCZP;WCZPYR;Color Zen +0005000E-10162B00;1;WUP;0001;WUP-P-AGMJ;AGMJ01;Splatoon +0005000E-10162D00;2;WUP;0001;WUP-U-ABAE;ABAE01;Mario Party 10 +0005000E-10169600;4;WUP;00UP;WUP-U-WEPS;WEPSUP;Unepic EnjoyUp Games +0005000E-1016A200;4;WUP;00SS;WUP-U-WBXP;WBXPSS;Bombing Bastards +0005000E-1016A400;4;WUP;00WR;WUP-P-BTMP;BTMPWR;LEGO® Batman™ 3 Beyond Gotham +0005000E-1016A600;1;WUP;00TF;WUP-P-WB6J;WB6JTF;?????????????? +0005000E-1016AB00;2;WUP;00SS;WUP-U-WBXE;WBXESS;Bombing Bastards +0005000E-1016AC00;2;WUP;009T;WUP-U-WMLE;WMLE9T;Armillo +0005000E-1016AD00;2;WUP;00WR;WUP-P-BTME;BTMEWR;LEGO® Batman™ 3 Beyond Gotham +0005000E-1016B200;2;WUP;009V;WUP-U-WMRE;WMRE9V;Master Reboot +0005000E-1016C700;4;WUP;009T;WUP-U-WMLP;WMLP9T;Armillo +0005000E-1016CE00;2;WUP;00YR;WUP-U-WCZE;WCZEYR;Color Zen +0005000E-1016D500;4;WUP;009Y;WUP-P-WCTP;WCTP9Y;Super Toy Cars +0005000E-1016D800;1;WUP;0041;WUP-P-ACLJ;ACLJ41;CHILD of LIGHT +0005000E-1016DC00;2;WUP;004Q;WUP-P-ADRE;ADRE4Q;Disney Infinity [2.0] +0005000E-1016DE00;2;WUP;009Y;WUP-P-WCTE;WCTE9Y;Super Toy Cars +0005000E-1016E100;2;WUP;00AY;WUP-P-WKNE;WKNEAY;Shovel Knight +0005000E-1016E300;2;WUP;008S;WUP-P-WGRE;WGRE8S;GravBlocks+ From Nothing Game Studios +0005000E-1016E800;4;WUP;009V;WUP-U-WMRP;WMRP9V;Master Reboot +0005000E-1016EA00;4;WUP;0041;WUP-P-ACLP;ACLP41;CHILD of LIGHT +0005000E-1016FF00;2;WUP;00NT;WUP-P-WFWE;WFWENT;Flowerworks HD Follie's Adventure +0005000E-10170200;2;WUP;007Z;WUP-U-WGAE;WGAE7Z;Pier Solar and the Great Architects +0005000E-10170600;1;WUP;00AF;WUP-U-APWJ;APWJAF;KAMEN RIDER BATTRIDE WAR ? PREMIUM TV&MOVIE SOUND ED. +0005000E-10170700;1;WUP;00AF;WUP-U-ABWJ;ABWJAF;KAMEN RIDER BATTRIDE WAR ? +0005000E-10172A00;2;WUP;009Z;WUP-N-HRLE;HRLE9Z;Crunchyroll +0005000E-10172B00;4;WUP;009Z;WUP-N-HRLP;HRLP9Z;Crunchyroll +0005000E-10173300;4;WUP;00UB;WUP-U-WCGP;WCGPUB;Stealth Inc 2 A Game of Clones +0005000E-10175B00;2;WUP;008P;WUP-P-BSSE;BSSE8P;Sonic Boom: Rise of Lyric +0005000E-10175D00;4;WUP;00AF;WUP-P-AUNP;AUNPAF;ONE PIECE Unlimited World Red +0005000E-10176500;2;WUP;00UB;WUP-U-WCGE;WCGEUB;Stealth Inc 2 A Game of Clones +0005000E-10176900;2;WUP;0001;WUP-P-AGME;AGME01;Splatoon +0005000E-10176A00;4;WUP;0001;WUP-P-AGMP;AGMP01;Splatoon +0005000E-10176F00;4;WUP;0041;WUP-P-BJDP;BJDP41;JUST DANCE® 2015 +0005000E-10177600;2;WUP;0001;WUP-U-ADNE;ADNE01;Devil's Third +0005000E-10177800;4;WUP;008P;WUP-P-BSSP;BSSP8P;Sonic Boom: Rise of Lyric +0005000E-10178F00;4;WUP;00AY;WUP-P-WKNP;WKNPAY;Shovel Knight +0005000E-10179100;2;WUP;0041;WUP-P-BJDE;BJDE41;JUST DANCE® 2015 +0005000E-1017BE00;1;WUP;0001;WUP-U-BXAJ;BXAJ01;Art Academy: Home Studio +0005000E-1017BF00;2;WUP;0001;WUP-U-BXAE;BXAE01;Art Academy: Home Studio +0005000E-1017C600;2;WUP;0052;WUP-P-BK7E;BK7E52;Skylanders Trap Team +0005000E-1017CD00;1;WUP;00C8;WUP-U-BWPJ;BWPJC8;Hyrule Warriors +0005000E-1017D800;2;WUP;0001;WUP-U-BWPE;BWPE01;Hyrule Warriors +0005000E-1017D900;4;WUP;0001;WUP-U-BWPP;BWPP01;Hyrule Warriors +0005000E-1017DA00;2;WUP;011S;WUP-P-ACQE;ACQE1S;Costume Quest 2 +0005000E-1017E000;4;WUP;00XQ;WUP-P-WK8P;WK8PXQ;Turtle Tale +0005000E-10180500;1;WUP;0001;WUP-P-AKBJ;AKBJ01;Captain Toad: Treasure Tracker +0005000E-10180600;2;WUP;0001;WUP-P-AKBE;AKBE01;Captain Toad: Treasure Tracker +0005000E-10180700;4;WUP;0001;WUP-P-AKBP;AKBP01;Captain Toad: Treasure Tracker +0005000E-10181F00;4;WUP;0052;WUP-P-BK7P;BK7P52;Skylanders Trap Team +0005000E-10182C00;4;WUP;00XT;WUP-U-AJTP;AJTPXT;Jett Tailfin +0005000E-10183000;2;WUP;010P;WUP-P-ARNE;ARNE0P;Runbow +0005000E-10183900;2;WUP;00UP;WUP-U-BMVE;BMVEUP;99Moves +0005000E-10184D00;2;WUP;0001;WUP-U-AYCE;AYCE01;Yoshi's Woolly World +0005000E-10187100;4;WUP;00LW;WUP-U-BUGP;BUGPLW;Underground +0005000E-10188B00;1;WUP;0001;WUP-U-AXYJ;AXYJ01;Kirby and the Rainbow Curse +0005000E-10188C00;4;WUP;004Q;WUP-P-ADRP;ADRP4Q;Disney Infinity [2.0] +0005000E-10188D00;4;WUP;004Q;WUP-P-ADRZ;ADRZ4Q;Disney Infinity [2.0] +0005000E-10189200;2;WUP;011C;WUP-P-BSPE;BSPE1C;Sportsball +0005000E-1018C400;1;WUP;00AF;WUP-P-BSFJ;BSFJAF;???F??????????? ????SF??????????? +0005000E-1018DB00;1;WUP;0001;WUP-U-AMAJ;AMAJ01;Super Mario Maker +0005000E-1018DC00;2;WUP;0001;WUP-U-AMAE;AMAE01;Super Mario Maker +0005000E-1018DD00;4;WUP;0001;WUP-U-AMAP;AMAP01;Super Mario Maker +0005000E-1018DE00;4;WUP;00NK;WUP-U-ATCP;ATCPNK;Tetrobot and Co. +0005000E-1018ED00;2;WUP;00NK;WUP-U-ATCE;ATCENK;Tetrobot and Co. +0005000E-10191700;4;WUP;00UP;WUP-U-BMVP;BMVPUP;99Moves +0005000E-10191800;4;WUP;00UP;WUP-U-WAEP;WAEPUP;Rock 'N Racing Off Road +0005000E-10192200;1;WUP;00AF;WUP-P-BRSJ;BRSJAF;KAMEN RIDER SUMMON RIDE! +0005000E-10194200;2;WUP;00WR;WUP-U-APZE;APZEWR;LEGO® DIMENSIONS™ +0005000E-10195D00;4;WUP;00WR;WUP-U-APZP;APZPWR;LEGO® DIMENSIONS™ +0005000E-10197800;4;WUP;011S;WUP-P-ACQP;ACQP1S;Costume Quest 2 +0005000E-10199000;1;WUP;0001;WUP-P-AVXJ;AVXJ01;Mario Tennis: Ultra Smash +0005000E-1019AD00;2;WUP;011A;WUP-P-BEQE;BEQE1A;Elliot Quest +0005000E-101A1B00;2;WUP;00RG;WUP-U-BS2E;BS2ERG;Swords & Soldiers II +0005000E-101A2600;1;WUP;00W4;WUP-U-WKFJ;WKFJW4;Kung Fu Rabbit +0005000E-101A2E00;1;WUP;00TF;WUP-P-WEXJ;WEXJTF;XType+ +0005000E-101A3500;2;WUP;0001;WUP-P-AVXE;AVXE01;Mario Tennis: Ultra Smash +0005000E-101A3600;4;WUP;0001;WUP-P-AVXP;AVXP01;Mario Tennis: Ultra Smash +0005000E-101A3B00;2;WUP;00LY;WUP-P-BLPE;BLPELY;Life of Pixel +0005000E-101A4900;4;WUP;00LY;WUP-U-BLPP;BLPPLY;Life of Pixel +0005000E-101A5C00;4;WUP;00WR;WUP-U-ALJP;ALJPWR;LEGO® Jurassic World™ +0005000E-101A5E00;4;WUP;00UB;WUP-U-ALLP;ALLPUB;OlliOlli +0005000E-101A5F00;2;WUP;00WY;WUP-U-BSXE;BSXEWY;Shantae and the Pirate's Curse +0005000E-101A6200;2;WUP;00WR;WUP-U-ALJE;ALJEWR;LEGO® Jurassic World™ +0005000E-101A6300;4;WUP;00YR;WUP-U-ACUP;ACUPYR;Cube Life: Island Survival +0005000E-101A6400;2;WUP;00YR;WUP-U-ACUE;ACUEYR;Cube Life: Island Survival +0005000E-101A6500;2;WUP;00VZ;WUP-P-BKFE;BKFEVZ;Kung Fu Panda Showdown of Legendary Legends +0005000E-101A6900;2;WUP;00UB;WUP-P-ALLE;ALLEUB;OlliOlli +0005000E-101A9500;4;WUP;00WY;WUP-U-BSXP;BSXPWY;Shantae and the Pirate's Curse +0005000E-101A9F00;2;WUP;0147;WUP-P-BDAE;BDAE47;Dot Arcade +0005000E-101AA500;4;WUP;00VZ;WUP-P-BKFP;BKFPVZ;Kung Fu Panda Showdown of Legendary Legends +0005000E-101ABC00;2;WUP;0001;WUP-U-AXYE;AXYE01;Kirby and the Rainbow Curse +0005000E-101AC700;2;WUP;00VZ;WUP-P-BFNE;BFNEVZ;Adventure Time Finn and Jake Investigations +0005000E-101AC900;2;WUP;004Q;WUP-P-BD3E;BD3E4Q;DISNEY INFINITY 3.0 EDITION +0005000E-101AFE00;4;WUP;00VZ;WUP-P-BFNP;BFNPVZ;Adventure Time Finn and Jake Investigations +0005000E-101B3D00;4;WUP;004Q;WUP-P-BD3P;BD3P4Q;DISNEY INFINITY 3.0: PLAY WITHOUT LIMITS +0005000E-101B3E00;4;WUP;004Q;WUP-P-BD3Z;BD3Z4Q;DISNEY INFINITY 3.0: PLAY WITHOUT LIMITS +0005000E-101B8500;2;WUP;0052;WUP-P-BS5E;BS5E52;Skylanders SuperChargers +0005000E-101B9000;2;WUP;0041;WUP-P-AJ6E;AJ6E41;JUST DANCE® 2016 +0005000E-101B9800;4;WUP;0041;WUP-P-AJ6P;AJ6P41;JUST DANCE® 2016 +0005000E-101BA400;2;WUP;0052;WUP-P-AGNE;AGNE52;Guitar Hero Live +0005000E-101BAA00;2;WUP;010C;WUP-U-ATTE;ATTE0C;Totem Topple +0005000E-101BB300;4;WUP;008V;WUP-P-WLSP;WLSP8V;ZaciSa: Defense of the Crayon Dimension! +0005000E-101BB800;4;WUP;011A;WUP-P-BEQP;BEQP1A;Elliot Quest +0005000E-101BC600;4;WUP;0052;WUP-P-AGNP;AGNP52;Guitar Hero Live +0005000E-101BE900;4;WUP;00WR;WUP-P-ALRP;ALRPWR;LEGO® MARVEL's Avengers +0005000E-101BEF00;2;WUP;00WR;WUP-P-ALRE;ALREWR;LEGO® MARVEL's Avengers +0005000E-101BFC00;4;WUP;0052;WUP-P-BS5P;BS5P52;Skylanders SuperChargers +0005000E-101C0700;4;WUP;00UB;WUP-U-AN3P;AN3PUB;Nova-111 +0005000E-101C0A00;2;WUP;00UB;WUP-U-AN3E;AN3EUB;Nova-111 +0005000E-101C0B00;2;WUP;00UB;WUP-P-BS7E;BS7EUB;The Swindle +0005000E-101C0C00;4;WUP;00UB;WUP-P-BS7P;BS7PUB;The Swindle +0005000E-101C3100;2;WUP;0167;WUP-U-AFEE;AFEE67;Freedom Planet +0005000E-101C3900;4;WUP;015G;WUP-P-AWBP;AWBP5G;Word Search by POWGI +0005000E-101C4C00;4;WUP;0001;WUP-P-AX5D;AX5D01;Xenoblade Chronicles X +0005000E-101C4D00;2;WUP;0001;WUP-P-AX5E;AX5E01;Xenoblade Chronicles X +0005000E-101C6A00;2;WUP;016E;WUP-P-AD5E;AD5E6E;Octodad: Dadliest Catch +0005000E-101C6E00;4;WUP;00RG;WUP-U-BS2P;BS2PRG;Swords & Soldiers II +0005000E-101C8B00;4;WUP;00YT;WUP-P-AWMP;AWMPYT;WICKED MONSTERS BLAST! HD PLUS +0005000E-101CC900;4;WUP;0167;WUP-U-AFEP;AFEP67;Freedom Planet +0005000E-101CE100;2;WUP;0175;WUP-U-ACHE;ACHE75;Canvaleon +0005000E-101D0700;4;WUP;0175;WUP-U-ACHP;ACHP75;Canvaleon +0005000E-101D0900;2;WUP;00FV;WUP-U-AGWE;AGWEFV;Gunman Clive HD Collection +0005000E-101D2C00;1;WUP;00SA;WUP-P-ATXJ;ATXJSA;Bike Rider UltraDX WORLD TOUR +0005000E-101D3900;4;WUP;017D;WUP-P-AQCP;AQCP7D;The Quiet Collection +0005000E-101D4200;2;WUP;00DV;WUP-P-ABPE;ABPEDV;Brunswick Pro Bowling +0005000E-101D6100;4;WUP;00FV;WUP-U-AGWP;AGWPFV;Gunman Clive HD Collection +0005000E-101D6D00;4;WUP;010P;WUP-P-ARNP;ARNP0P;Runbow +0005000E-101D7400;4;WUP;010C;WUP-U-ATTP;ATTP0C;Totem Topple +0005000E-101D7500;4;WUP;00DU;WUP-P-AUMP;AUMPDU;Minecraft: Wii U Edition +0005000E-101D9D00;2;WUP;00DU;WUP-P-AUME;AUMEDU;Minecraft: Wii U Edition +0005000E-101DBE00;1;WUP;0188;WUP-P-AUMJ;AUMJ88;Minecraft: Wii U Edition +0005000E-101DC100;4;WUP;016E;WUP-P-AD5P;AD5P6E;Octodad: Dadliest Catch +0005000E-101DDC00;1;WUP;00AF;WUP-P-BD3J;BD3JAF;????????????3.0 diff --git a/src/de/mas/jnustool/Directory.java b/src/de/mas/jnustool/Directory.java index 75bc4e1..57044b5 100644 --- a/src/de/mas/jnustool/Directory.java +++ b/src/de/mas/jnustool/Directory.java @@ -66,14 +66,15 @@ public class Directory { @Override public String toString(){ - System.out.println(name + ":"); + StringBuilder sb = new StringBuilder(); + sb.append(name + ":" + "\n"); for(Directory d : folder.values()){ - System.out.println(d); + sb.append(d + "\n"); } for(String s : files.keySet()){ - System.out.println(s); + sb.append(s + "\n"); } - return ""; + return sb.toString(); } public DefaultMutableTreeNode getNodes(){ diff --git a/src/de/mas/jnustool/FEntry.java b/src/de/mas/jnustool/FEntry.java index b19b9f5..83fd6d9 100644 --- a/src/de/mas/jnustool/FEntry.java +++ b/src/de/mas/jnustool/FEntry.java @@ -6,7 +6,6 @@ import java.util.List; import de.mas.jnustool.util.Decryption; import de.mas.jnustool.util.Downloader; -import de.mas.jnustool.util.ExitException; import de.mas.jnustool.util.Settings; public class FEntry { @@ -156,14 +155,13 @@ public class FEntry { return folder; } - public void downloadAndDecrypt() throws ExitException { - + public void downloadAndDecrypt() { createFolder(); long titleID = getTitleID(); File f = new File(String.format("%016X", titleID) +"/" +getFullPath().substring(1, getFullPath().length())); if(f.exists()){ if(f.length() == getFileLength()){ - System.out.println("Skipping: " + String.format("%8.2f MB ",getFileLength()/1024.0/1024.0) + getFullPath()); + Logger.log("Skipping: " + String.format("%8.2f MB ",getFileLength()/1024.0/1024.0) + getFullPath()); return; } } @@ -172,44 +170,45 @@ public class FEntry { f = new File(getContentPath()); if(f.exists()){ if(f.length() == fst.getTmd().contents[this.getContentID()].size){ - System.out.println("Decrypting: " + String.format("%8.2f MB ", getFileLength()/1024.0/1024.0) + getFullPath()); + Logger.log("Decrypting: " + String.format("%8.2f MB ", getFileLength()/1024.0/1024.0) + getFullPath()); Decryption decrypt = new Decryption(fst.getTmd().getNUSTitle().getTicket()); decrypt.decrypt(this,getDownloadPath()); return; }else{ if(!Settings.downloadWhenCachedFilesMissingOrBroken){ - System.out.println("Cached content has the wrong size! Please check your: "+ getContentPath() + " Downloading not allowed"); - if(!Settings.skipBrokenFiles){ - throw new ExitException(""); + Logger.log("Cached content has the wrong size! Please check your: "+ getContentPath() + " Downloading not allowed"); + if(!Settings.skipBrokenFiles){ + System.err.println("File broken!"); + System.exit(2); }else{ - System.out.println("Ignoring the missing file: " + this.getFileName()); + Logger.log("Ignoring the missing file: " + this.getFileName()); } }else{ - System.out.println("Content missing. Downloading the file from the server: " + this.getFileName()); + Logger.log("Content missing. Downloading the file from the server: " + this.getFileName()); } } }else{ if(!Settings.downloadWhenCachedFilesMissingOrBroken){ - System.out.println("Content missing. Downloading not allowed"); + Logger.log("Content missing. Downloading not allowed"); if(!Settings.skipBrokenFiles){ - throw new ExitException(""); + System.err.println("File broken!"); + System.exit(2); }else{ - System.out.println("Ignoring the missing file: " + this.getFileName()); + Logger.log("Ignoring the missing file: " + this.getFileName()); } }else{ - System.out.println("Content missing. Downloading the file from the server: " + this.getFileName()); + Logger.log("Content missing. Downloading the file from the server: " + this.getFileName()); } } } - System.out.println("Downloading: " + String.format("%8.2f MB ", getFileLength()/1024.0/1024.0) + getFullPath()); + Logger.log("Downloading: " + String.format("%8.2f MB ", getFileLength()/1024.0/1024.0) + getFullPath()); Downloader.getInstance().downloadAndDecrypt(this); } catch (IOException e) { - - // TODO Auto-generated catch block e.printStackTrace(); + System.exit(2); } } diff --git a/src/de/mas/jnustool/FST.java b/src/de/mas/jnustool/FST.java index b4887cf..0d82986 100644 --- a/src/de/mas/jnustool/FST.java +++ b/src/de/mas/jnustool/FST.java @@ -18,7 +18,7 @@ public class FST { int totalEntries = 0; int dirEntries = 0; - + public FEntry metaFENtry; private Directory FSTDirectory = new Directory("root"); private Directory contentDirectory = new Directory("root"); @@ -86,13 +86,13 @@ public class FST { private void parse(byte[] decrypteddata, TitleMetaData tmd) throws IOException { if(!Arrays.equals(Arrays.copyOfRange(decrypteddata, 0, 3), new byte[]{0x46,0x53,0x54})){ + Logger.log(Util.ByteArrayToString(Arrays.copyOfRange(decrypteddata, 0, 3))); System.err.println("Not a FST. Maybe a wrong key?"); throw new IllegalArgumentException("File not a FST"); } this.totalContentCount = Util.getIntFromBytes(decrypteddata, 8); int base_offset = 0x20+totalContentCount*0x20; - this.totalEntries = Util.getIntFromBytes(decrypteddata, base_offset+8); int nameOff = base_offset + totalEntries * 0x10; @@ -138,6 +138,8 @@ public class FST { while(decrypteddata[nameoff_entry + j] != 0){j++;} filename = new String(Arrays.copyOfRange(decrypteddata,nameoff_entry, nameoff_entry + j)); + + //getting offsets. save in two ways offset+=4; fileOffset = (long) Util.getIntFromBytes(decrypteddata, offset); @@ -188,9 +190,8 @@ public class FST { String tmpname = new String(Arrays.copyOfRange(decrypteddata,nameoff_entrypath, nameoff_entrypath + k)); if(!tmpname.equals("")){ pathList.add(tmpname); - } - - + + } sb.append(tmpname); sb.append("/"); @@ -199,8 +200,12 @@ public class FST { } //add this to the List! - fileEntries.add(new FEntry(path,filename,contentID,tmd.contents[contentID].ID,fileOffset,fileLength,dir,in_nus_title,extract_withHash,pathList,this)); - //System.out.println(fileEntries.get(i)); + FEntry tmp = new FEntry(path,filename,contentID,tmd.contents[contentID].ID,fileOffset,fileLength,dir,in_nus_title,extract_withHash,pathList,this); + fileEntries.add(tmp); + if(filename.equals("meta.xml")){ + metaFENtry = tmp; + } + //Logger.log(fileEntries.get(i)); } } diff --git a/src/de/mas/jnustool/Logger.java b/src/de/mas/jnustool/Logger.java new file mode 100644 index 0000000..23fdfa5 --- /dev/null +++ b/src/de/mas/jnustool/Logger.java @@ -0,0 +1,13 @@ +package de.mas.jnustool; + +import de.mas.jnustool.gui.NUSGUI; + +public class Logger { + + public static void log(String string) { + NUSGUI.output.append(string + "\n"); + NUSGUI.output.setCaretPosition(NUSGUI.output.getDocument().getLength()); + + } + +} diff --git a/src/de/mas/jnustool/NUSTitle.java b/src/de/mas/jnustool/NUSTitle.java index a4b97e0..0a7a784 100644 --- a/src/de/mas/jnustool/NUSTitle.java +++ b/src/de/mas/jnustool/NUSTitle.java @@ -5,10 +5,12 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ForkJoinPool; import de.mas.jnustool.util.Decryption; import de.mas.jnustool.util.Downloader; -import de.mas.jnustool.util.ExitException; import de.mas.jnustool.util.Settings; public class NUSTitle { @@ -16,21 +18,22 @@ public class NUSTitle { private TIK ticket; private FST fst; private long titleID; - public NUSTitle(long titleId,String key) throws ExitException{ + public NUSTitle(long titleId,String key) { setTitleID(titleId); - try { + try { if(Settings.downloadContent){ File f = new File(getContentPath()); if(!f.exists())f.mkdir(); } + if(Settings.downloadContent){ File f = new File(getContentPath() + "/" + "tmd"); if(!(f.exists() && Settings.skipExistingTMDTICKET)){ - System.out.println("Downloading TMD"); + Logger.log("Downloading TMD"); Downloader.getInstance().downloadTMD(titleId,getContentPath()); }else{ - System.out.println("Skipped download of TMD. Already existing"); + Logger.log("Skipped download of TMD. Already existing"); } f = new File(getContentPath() + "/" + "cetk"); if(!(f.exists() && Settings.skipExistingTMDTICKET)){ @@ -39,50 +42,48 @@ public class NUSTitle { Downloader.getInstance().downloadTicket(titleId,getContentPath()); } }else{ - System.out.println("Skipped download of ticket. Already existing"); + Logger.log("Skipped download of ticket. Already existing"); } } if(Settings.useCachedFiles){ File f = new File(getContentPath() + "/" + "tmd"); if(f.exists()){ - System.out.println("Using cached TMD."); + Logger.log("Using cached TMD."); tmd = new TitleMetaData(f); }else{ - System.out.println("No cached TMD found."); + Logger.log("No cached TMD found."); } } - if(tmd == null){ if(Settings.downloadWhenCachedFilesMissingOrBroken){ - if(Settings.useCachedFiles) System.out.println("Getting missing tmd from Server!"); + if(Settings.useCachedFiles) Logger.log("Getting missing tmd from Server!"); tmd = new TitleMetaData(Downloader.getInstance().downloadTMDToByteArray(titleId)); }else{ - System.out.println("Downloading of missing files is not enabled. Exiting"); - throw new ExitException("TMD missing."); + Logger.log("Downloading of missing files is not enabled. Exiting"); + System.exit(2); } } - if(key != null){ - System.out.println("Using ticket from parameter."); + Logger.log("Using ticket from parameter."); ticket = new TIK(key,titleId); }else{ if(Settings.useCachedFiles){ File f = new File(getContentPath() + "/" + "cetk"); if(f.exists()){ - System.out.println("Using cached cetk."); + Logger.log("Using cached cetk."); ticket = new TIK(f,titleId); }else{ - System.out.println("No cached ticket found."); + Logger.log("No cached ticket found."); } } if(ticket == null){ if(Settings.downloadWhenCachedFilesMissingOrBroken){ - if(Settings.useCachedFiles) System.out.println("getting missing ticket"); + if(Settings.useCachedFiles) Logger.log("getting missing ticket"); ticket = new TIK(Downloader.getInstance().downloadTicketToByteArray(titleId),tmd.titleID); }else{ - System.out.println("Downloading of missing files is not enabled. Exiting"); - throw new ExitException("Ticket missing."); + Logger.log("Downloading of missing files is not enabled. Exiting"); + System.exit(2); } } } @@ -90,47 +91,52 @@ public class NUSTitle { if(Settings.downloadContent){ File f = new File(getContentPath() + "/" + String.format("%08x", tmd.contents[0].ID) + ".app"); if(!(f.exists() && Settings.skipExistingFiles)){ - System.out.println("Downloading FST (" + String.format("%08x", tmd.contents[0].ID) + ")"); + Logger.log("Downloading FST (" + String.format("%08x", tmd.contents[0].ID) + ")"); Downloader.getInstance().downloadContent(titleId,tmd.contents[0].ID,getContentPath()); }else{ if(f.length() != tmd.contents[0].size){ if(Settings.downloadWhenCachedFilesMissingOrBroken){ - System.out.println("FST already existing, but broken. Downloading it again."); + Logger.log("FST already existing, but broken. Downloading it again."); Downloader.getInstance().downloadContent(titleId,tmd.contents[0].ID,getContentPath()); }else{ - System.out.println("FST already existing, but broken. No download allowed."); - throw new ExitException("FST missing."); + Logger.log("FST already existing, but broken. No download allowed."); + System.exit(2); } }else{ - System.out.println("Skipped download of FST. Already existing"); + Logger.log("Skipped download of FST. Already existing"); } } } + Decryption decryption = new Decryption(ticket.getDecryptedKey(),0); byte[] encryptedFST = null; if(Settings.useCachedFiles){ + Logger.log(getContentPath()); String path = getContentPath() + "/" + String.format("%08x", tmd.contents[0].ID) + ".app"; File f = new File(path); if(f.exists()){ - System.out.println("Using cached FST"); + Logger.log("Using cached FST"); Path file = Paths.get(path); encryptedFST = Files.readAllBytes(file); }else{ - System.out.println("No cached FST (" + String.format("%08x", tmd.contents[0].ID) + ") found."); - } + Logger.log("No cached FST (" + String.format("%08x", tmd.contents[0].ID) + ") found."); + } } if(encryptedFST == null){ if(Settings.downloadWhenCachedFilesMissingOrBroken){ - if(Settings.useCachedFiles)System.out.println("Getting FST from server."); + if(Settings.useCachedFiles)Logger.log("Getting FST from server."); encryptedFST = Downloader.getInstance().downloadContentToByteArray(titleId,tmd.contents[0].ID); }else{ - System.out.println("Downloading of missing files is not enabled. Exiting"); - throw new ExitException(""); + Logger.log("Downloading of missing files is not enabled. Exiting"); + System.exit(2); } - } + } + + + decryption.init(ticket.getDecryptedKey(), 0); byte[] decryptedFST = decryption.decrypt(encryptedFST); fst = new FST(decryptedFST,tmd); @@ -140,11 +146,11 @@ public class NUSTitle { tmd.downloadContents(); } - System.out.println("Total Size of Content Files: " + ((int)((getTotalContentSize()/1024.0/1024.0)*100))/100.0 +" MB"); - System.out.println("Total Size of Decrypted Files: " + ((int)((fst.getTotalContentSizeInNUS()/1024.0/1024.0)*100))/100.0 +" MB"); - System.out.println("Entries: " + fst.getTotalEntries()); - System.out.println("Entries: " + fst.getFileCount()); - System.out.println("Files in NUSTitle: " + fst.getFileCountInNUS()); + Logger.log("Total Size of Content Files: " + ((int)((getTotalContentSize()/1024.0/1024.0)*100))/100.0 +" MB"); + Logger.log("Total Size of Decrypted Files: " + ((int)((fst.getTotalContentSizeInNUS()/1024.0/1024.0)*100))/100.0 +" MB"); + Logger.log("Entries: " + fst.getTotalEntries()); + Logger.log("Entries: " + fst.getFileCount()); + Logger.log("Files in NUSTitle: " + fst.getFileCountInNUS()); } catch (IOException e) { // TODO Auto-generated catch block @@ -200,7 +206,7 @@ public class NUSTitle { - private long getTitleID() { + public long getTitleID() { return titleID; } @@ -208,6 +214,19 @@ public class NUSTitle { this.titleID = titleId; } + public void decryptFEntries(List list) { + ForkJoinPool pool = ForkJoinPool.commonPool(); + List dlList = new ArrayList<>(); + for(FEntry f : list){ + if(!f.isDir() && f.isInNUSTitle()){ + dlList.add(new FEntryDownloader(f)); + } + } + + pool.invokeAll(dlList); + Logger.log("Done!"); + } + } diff --git a/src/de/mas/jnustool/Starter.java b/src/de/mas/jnustool/Starter.java index b3f4a54..6947fc3 100644 --- a/src/de/mas/jnustool/Starter.java +++ b/src/de/mas/jnustool/Starter.java @@ -4,49 +4,119 @@ import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import de.mas.jnustool.gui.NUSGUI; +import de.mas.jnustool.gui.UpdateChooser; import de.mas.jnustool.util.Downloader; -import de.mas.jnustool.util.ExitException; +import de.mas.jnustool.util.NUSTitleInformation; import de.mas.jnustool.util.Util; public class Starter { - public static void main(String[] args) { - System.out.println("JNUSTool 0.0.2 - pre alpha - by Maschell"); - System.out.println(); + private static String updateCSVPath; + + public static void main(String[] args) { + Logger.log("JNUSTool 0.0.3 - pre alpha - by Maschell"); + Logger.log(""); try { - readConfig(); + readConfig(); + } catch (IOException e) { System.err.println("Error while reading config! Needs to be:"); System.err.println("DOWNLOAD URL BASE"); System.err.println("COMMONKEY"); return; } - if(args.length != 0){ - long titleID = Util.StringToLong(args[0]); - String key = null; + + long titleID = 0; + String key = null; + if(args.length != 0 ){ + titleID = Util.StringToLong(args[0]); if( args.length > 1 && args[1].length() == 32){ key = args[1].substring(0, 32); } - NUSGUI m; - try { - m = new NUSGUI(new NUSTitle(titleID, key), null); - } catch (ExitException e) { - System.out.println("Error: " + e.getMessage()); - return; - } - m.setVisible(true); }else{ - System.out.println("Need parameters: TITLEID [KEY]"); + titleID = getTitleID().getTitleID(); + } + if(titleID != 0){ + NUSGUI m = new NUSGUI(new NUSTitle(titleID, key), null); + m.setVisible(true); } } + + + + private static NUSTitleInformation getTitleID() { + List updatelist = readUpdateCSV(); + NUSTitleInformation result = null; + if(updatelist != null){ + result = new NUSTitleInformation(); + UpdateChooser.createAndShowGUI(updatelist,result); + synchronized (result) { + try { + result.wait(); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + return result; + } + + + + @SuppressWarnings("resource") + private static List readUpdateCSV() { + if(updateCSVPath == null) return null; + BufferedReader in = null; + List list = new ArrayList<>(); + try { + in = new BufferedReader(new FileReader(new File(updateCSVPath))); + String line; + while((line = in.readLine()) != null){ + String[] infos = line.split(";"); + if(infos.length != 7) { + System.out.println("Updatelist is broken!"); + return null; + } + long titleID = Util.StringToLong(infos[0].replace("-", "")); + int region = Integer.parseInt(infos[1]); + String content_platform = infos[2]; + String company_code = infos[3]; + String product_code = infos[4]; + String ID6 = infos[5]; + String longnameEN = infos[6]; + NUSTitleInformation info = new NUSTitleInformation(titleID, longnameEN, ID6, product_code, content_platform, company_code, region); + list.add(info); + } + in.close(); + } catch (IOException | NumberFormatException e) { + try { + in.close(); + } catch (IOException e1) { + } + System.out.println("Updatelist is broken!"); + return null; + } + return list; + } + + public static void readConfig() throws IOException { BufferedReader in = new BufferedReader(new FileReader(new File("config"))); - Downloader.URL_BASE = in.readLine(); - Util.commonKey = Util.hexStringToByteArray(in.readLine()); + Downloader.URL_BASE = in.readLine(); + String commonkey = in.readLine(); + if(commonkey.length() != 32){ + System.out.println("Commonkey length is wrong"); + System.exit(1); + } + Util.commonKey = Util.hexStringToByteArray(commonkey); + updateCSVPath = in.readLine(); in.close(); } diff --git a/src/de/mas/jnustool/TitleMetaData.java b/src/de/mas/jnustool/TitleMetaData.java index 908348c..d8320e2 100644 --- a/src/de/mas/jnustool/TitleMetaData.java +++ b/src/de/mas/jnustool/TitleMetaData.java @@ -3,17 +3,9 @@ package de.mas.jnustool; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; -import java.io.InputStream; import java.io.RandomAccessFile; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.security.DigestInputStream; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.util.Arrays; import de.mas.jnustool.util.Downloader; -import de.mas.jnustool.util.ExitException; import de.mas.jnustool.util.Settings; import de.mas.jnustool.util.Util; @@ -47,9 +39,10 @@ public class TitleMetaData { setTotalContentSize(); } - public TitleMetaData(byte[] downloadTMDToByteArray) throws IOException { - if(downloadTMDToByteArray != null){ - File tempFile = File.createTempFile("bla","blubb"); + public TitleMetaData(byte[] downloadTMDToByteArray) throws IOException { + if(downloadTMDToByteArray != null){ + File tempFile; + tempFile = File.createTempFile("bla","blubb"); FileOutputStream fos = new FileOutputStream(tempFile); fos.write(downloadTMDToByteArray); fos.close(); @@ -62,6 +55,7 @@ public class TitleMetaData { } private void parse(File tmd) throws IOException { + RandomAccessFile f = new RandomAccessFile(tmd, "r"); f.seek(0); this.signatureType = f.readInt(); @@ -163,7 +157,7 @@ public class TitleMetaData { return totalContentSize; } - public void downloadContents() throws IOException, ExitException{ + public void downloadContents() throws IOException{ String tmpPath = getContentPath(); File f = new File(tmpPath); if(!f.exists())f.mkdir(); @@ -173,22 +167,22 @@ public class TitleMetaData { f = new File(tmpPath + "/" + String.format("%08X", c.ID ) + ".app"); if(f.exists()){ if(f.length() == c.size){ - System.out.println("Skipping Content: " + String.format("%08X", c.ID)); + Logger.log("Skipping Content: " + String.format("%08X", c.ID)); }else{ if(Settings.downloadWhenCachedFilesMissingOrBroken){ - System.out.println("Content " +String.format("%08X", c.ID) + " is broken. Downloading it again."); + Logger.log("Content " +String.format("%08X", c.ID) + " is broken. Downloading it again."); Downloader.getInstance().downloadContent(titleID,c.ID,tmpPath); }else{ if(Settings.skipBrokenFiles){ - System.out.println("Content " +String.format("%08X", c.ID) + " is broken. Ignoring it."); + Logger.log("Content " +String.format("%08X", c.ID) + " is broken. Ignoring it."); }else{ - System.out.println("Content " +String.format("%08X", c.ID) + " is broken. Downloading not allowed."); - throw new ExitException("Content missing."); + Logger.log("Content " +String.format("%08X", c.ID) + " is broken. Downloading not allowed."); + System.exit(2); } } } }else{ - System.out.println("Download Content: " + String.format("%08X", c.ID)); + Logger.log("Download Content: " + String.format("%08X", c.ID)); Downloader.getInstance().downloadContent(titleID,c.ID,tmpPath); } } diff --git a/src/de/mas/jnustool/gui/JCheckBoxTree.java b/src/de/mas/jnustool/gui/JCheckBoxTree.java index ac93305..781bc40 100644 --- a/src/de/mas/jnustool/gui/JCheckBoxTree.java +++ b/src/de/mas/jnustool/gui/JCheckBoxTree.java @@ -160,8 +160,6 @@ public class JCheckBoxTree extends JTree { public JCheckBoxTree(NUSTitle nus) { super(); - - setModel(new DefaultTreeModel(nus.getFst().getFSTDirectory().getNodes())); diff --git a/src/de/mas/jnustool/gui/NUSGUI.java b/src/de/mas/jnustool/gui/NUSGUI.java index 5c061f7..af1d2fb 100644 --- a/src/de/mas/jnustool/gui/NUSGUI.java +++ b/src/de/mas/jnustool/gui/NUSGUI.java @@ -5,75 +5,80 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.ForkJoinPool; import javax.swing.JButton; import javax.swing.JFrame; +import javax.swing.JPanel; import javax.swing.JScrollPane; +import javax.swing.JSplitPane; +import javax.swing.JTextArea; +import javax.swing.ScrollPaneConstants; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreePath; import de.mas.jnustool.FEntry; import de.mas.jnustool.NUSTitle; import de.mas.jnustool.util.Settings; -import de.mas.jnustool.FEntryDownloader; public class NUSGUI extends JFrame { private static final long serialVersionUID = 4648172894076113183L; - + public static JTextArea output = new JTextArea(1,10); public NUSGUI(NUSTitle nus,Settings mode) { super(); - setSize(800, 600); - getContentPane().setLayout(new BorderLayout(0, 0)); - - final JCheckBoxTree cbt = new JCheckBoxTree(nus); - JScrollPane qPane = new JScrollPane(cbt, - JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, - JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); - this.getContentPane().add(qPane); + this.setResizable(false); + setSize(600, 768); + setTitle(String.format("%016X", nus.getTitleID())); + getContentPane().setLayout(null); + JSplitPane splitPane = new JSplitPane(); + splitPane.setBounds(0, 0, 594, 726); + splitPane.setOrientation(JSplitPane.VERTICAL_SPLIT); + getContentPane().add(splitPane, BorderLayout.NORTH); + JScrollPane qPane = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, + JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); + + + this.getContentPane().add(splitPane); + final JCheckBoxTree cbt = new JCheckBoxTree(nus); + qPane.setViewportView(cbt); + + JPanel panel = new JPanel(); + panel.setLayout(new BorderLayout(0, 0)); + panel.add(qPane); + splitPane.setLeftComponent(panel); JButton btnNewButton = new JButton("Download"); + panel.add(btnNewButton, BorderLayout.SOUTH); + btnNewButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - new Thread(new Runnable() { public void run() { - ForkJoinPool pool = ForkJoinPool.commonPool(); - List list = new ArrayList<>(); - + new Thread(new Runnable() { public void run() { + List list = new ArrayList<>(); TreePath[] paths = cbt.getCheckedPaths(); for (TreePath tp : paths) { - Object obj = tp.getPath()[tp.getPath().length-1]; if(((DefaultMutableTreeNode)obj).getUserObject() instanceof FEntry){ - FEntry f = (FEntry) ((DefaultMutableTreeNode)obj).getUserObject(); - if(!f.isDir() && f.isInNUSTitle()){ - list.add(new FEntryDownloader(f)); - } - + list.add((FEntry) ((DefaultMutableTreeNode)obj).getUserObject()); } } - pool.invokeAll(list); - System.out.println("Done!"); + + nus.decryptFEntries(list); }}).start(); } }); - getContentPane().add(btnNewButton, BorderLayout.SOUTH); + JScrollPane outputPane = new JScrollPane(output, + ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, + ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); - /*cbt.addCheckChangeEventListener(new JCheckBoxTree.CheckChangeEventListener() { - public void checkStateChanged(JCheckBoxTree.CheckChangeEvent event) { - System.out.println("event"); - TreePath[] paths = cbt.getCheckedPaths(); - for (TreePath tp : paths) { - for (Object pathPart : tp.getPath()) { - System.out.print(pathPart + ","); - } - System.out.println(); - } - } - });*/ + splitPane.setRightComponent(outputPane); + + splitPane.setDividerLocation(0.7); + splitPane.setResizeWeight(0.7); + + splitPane.setEnabled(false); this.setDefaultCloseOperation(EXIT_ON_CLOSE); } diff --git a/src/de/mas/jnustool/gui/UpdateChooser.java b/src/de/mas/jnustool/gui/UpdateChooser.java new file mode 100644 index 0000000..7bda788 --- /dev/null +++ b/src/de/mas/jnustool/gui/UpdateChooser.java @@ -0,0 +1,190 @@ +package de.mas.jnustool.gui; + +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.Collections; +import java.util.List; + +import javax.swing.BorderFactory; +import javax.swing.BoxLayout; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JList; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JSplitPane; +import javax.swing.JTable; +import javax.swing.JTextArea; +import javax.swing.ListSelectionModel; +import javax.swing.ScrollPaneConstants; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; + +import de.mas.jnustool.util.NUSTitleInformation; + +public class UpdateChooser extends JPanel { + /** + * + */ + private static final long serialVersionUID = 1L; + JTextArea output; + JList list; + JTable table; + String newline = "\n"; + ListSelectionModel listSelectionModel; + public UpdateChooser(JFrame window) { + super(new BorderLayout()); + setSize(800, 600); + + Collections.sort(list_); + output_.init(list_.get(0)); + String[] columnNames = { "TitleID", "Region", "Name" }; + String[][] tableData = new String[list_.size()][]; + int i = 0; + for(NUSTitleInformation n: list_){ + tableData[i] = new String[3]; + tableData[i][0] = n.getTitleIDAsString(); + tableData[i][1] = n.getRegionAsRegion().toString(); + tableData[i][2] = n.getLongnameEN(); + i++; + } + + + table = new JTable(tableData, columnNames); + + + + //table.setModel(tableModel); + for (int c = 0; c < table.getColumnCount(); c++) + { + Class col_class = table.getColumnClass(c); + table.setDefaultEditor(col_class, null); // remove editor + } + + table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); + table.getColumnModel().getColumn(0).setPreferredWidth(150); + table.getColumnModel().getColumn(1).setPreferredWidth(50); + table.getColumnModel().getColumn(2).setPreferredWidth(350); + + listSelectionModel = table.getSelectionModel(); + listSelectionModel.addListSelectionListener(new SharedListSelectionHandler()); + + + + table.setSelectionModel(listSelectionModel); + + table.addMouseListener(new MouseAdapter() { + public void mousePressed(MouseEvent me) { + if (me.getClickCount() == 2) { + synchronized (output_) { + window.setVisible(false); + output_.notifyAll(); + } + } + } + }); + + JScrollPane tablePane = new JScrollPane(table); + //Build control area (use default FlowLayout). + JPanel controlPane = new JPanel(); + + + listSelectionModel.setSelectionMode( + ListSelectionModel.SINGLE_SELECTION); + + //Build output area. + output = new JTextArea(1, 10); + output.setEditable(false); + JScrollPane outputPane = new JScrollPane(output, + ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, + ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); + + //Do the layout. + JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT); + add(splitPane, BorderLayout.CENTER); + + JPanel topHalf = new JPanel(); + topHalf.setLayout(new BoxLayout(topHalf, BoxLayout.LINE_AXIS)); + JPanel tableContainer = new JPanel(new GridLayout(1,1)); + tableContainer.setBorder(BorderFactory.createTitledBorder( + "Table")); + tableContainer.add(tablePane); + tablePane.setPreferredSize(new Dimension(420, 130)); + topHalf.setBorder(BorderFactory.createEmptyBorder(5,5,0,5)); + topHalf.add(tableContainer); + + topHalf.setMinimumSize(new Dimension(250, 50)); + topHalf.setPreferredSize(new Dimension(200, 110)); + splitPane.add(topHalf); + JPanel listContainer = new JPanel(new GridLayout(1,1)); + add(listContainer, BorderLayout.NORTH); + JButton btnNewButton = new JButton("Okay"); + btnNewButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + System.out.println("lol"); + synchronized (output_) { + window.setVisible(false); + output_.notifyAll(); + } + + } + }); + + + add(btnNewButton, BorderLayout.SOUTH); + + JPanel bottomHalf = new JPanel(new BorderLayout()); + bottomHalf.add(controlPane, BorderLayout.PAGE_START); + bottomHalf.add(outputPane, BorderLayout.CENTER); + //XXX: next line needed if bottomHalf is a scroll pane: + //bottomHalf.setMinimumSize(new Dimension(400, 50)); + + } + + private static NUSTitleInformation output_; + static List list_; + public static void createAndShowGUI(List list,NUSTitleInformation output) { + //Create and set up the window. + JFrame frame = new JFrame("Select the title"); + + //Create and set up the content pane. + list_ = list; + output_ =output; + UpdateChooser demo = new UpdateChooser(frame); + demo.setOpaque(true); + frame.setContentPane(demo); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + //Display the window. + frame.setSize(610, 600); + + frame.setResizable(false); + frame.setVisible(true); + + } + + class SharedListSelectionHandler implements ListSelectionListener { + public void valueChanged(ListSelectionEvent e) { + ListSelectionModel lsm = (ListSelectionModel)e.getSource(); + + if (lsm.isSelectionEmpty()) { + + } else { + // Find out which indexes are selected. + int minIndex = lsm.getMinSelectionIndex(); + int maxIndex = lsm.getMaxSelectionIndex(); + for (int i = minIndex; i <= maxIndex; i++) { + if (lsm.isSelectedIndex(i)) { + output_.init(list_.get(i)); + } + } + } + + } + } +} diff --git a/src/de/mas/jnustool/util/ByteArrayBuffer.java b/src/de/mas/jnustool/util/ByteArrayBuffer.java new file mode 100644 index 0000000..7799749 --- /dev/null +++ b/src/de/mas/jnustool/util/ByteArrayBuffer.java @@ -0,0 +1,33 @@ +package de.mas.jnustool.util; + +public class ByteArrayBuffer { + public byte[] buffer; + int lengthOfDataInBuffer; + + public ByteArrayBuffer(int length){ + buffer = new byte[(int) length]; + } + + public int getLengthOfDataInBuffer() { + return lengthOfDataInBuffer; + } + + public void setLengthOfDataInBuffer(int lengthOfDataInBuffer) { + this.lengthOfDataInBuffer = lengthOfDataInBuffer; + } + + public int getSpaceLeft() { + return buffer.length - getLengthOfDataInBuffer(); + } + + public void addLengthOfDataInBuffer(int bytesRead) { + lengthOfDataInBuffer += bytesRead; + } + + public void resetLengthOfDataInBuffer() { + setLengthOfDataInBuffer(0); + } + + + +} diff --git a/src/de/mas/jnustool/util/Decryption.java b/src/de/mas/jnustool/util/Decryption.java index dfd59b4..f2ebc43 100644 --- a/src/de/mas/jnustool/util/Decryption.java +++ b/src/de/mas/jnustool/util/Decryption.java @@ -1,12 +1,13 @@ package de.mas.jnustool.util; -import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.nio.ByteBuffer; +import java.security.InvalidAlgorithmParameterException; +import java.security.InvalidKeyException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Arrays; @@ -32,19 +33,14 @@ public class Decryption { this(decryptedKey,0); } - public Decryption(byte[] decryptedKey, long titleId) { + public Decryption(byte[] decryptedKey, long titleId) { try { cipher2 = Cipher.getInstance("AES/CBC/NoPadding"); - this.decryptedKey = decryptedKey; - init(titleId); - - } catch (NoSuchAlgorithmException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (NoSuchPaddingException e) { - // TODO Auto-generated catch block + } catch (NoSuchAlgorithmException | NoSuchPaddingException e) { e.printStackTrace(); } + this.decryptedKey = decryptedKey; + init(titleId); } @@ -64,13 +60,13 @@ public class Decryption { } public void init(byte[] decryptedKey,byte[] iv){ + this.decryptedKey = decryptedKey; + SecretKeySpec secretKeySpec = new SecretKeySpec(decryptedKey, "AES"); try { - this.decryptedKey = decryptedKey; - SecretKeySpec secretKeySpec = new SecretKeySpec(decryptedKey, "AES"); - cipher2.init(Cipher.DECRYPT_MODE, secretKeySpec, new IvParameterSpec(iv)); - } catch (Exception e) { - // TODO Auto-generated catch block + cipher2.init(Cipher.DECRYPT_MODE, secretKeySpec, new IvParameterSpec(iv)); + } catch (InvalidKeyException | InvalidAlgorithmParameterException e) { e.printStackTrace(); + System.exit(2); } } @@ -78,8 +74,8 @@ public class Decryption { try { return cipher2.doFinal(input); } catch (IllegalBlockSizeException | BadPaddingException e) { - // TODO Auto-generated catch block e.printStackTrace(); + System.exit(2); } return input; } @@ -92,8 +88,8 @@ public class Decryption { try { return cipher2.doFinal(input, offset, len); } catch (IllegalBlockSizeException | BadPaddingException e) { - // TODO Auto-generated catch block e.printStackTrace(); + System.exit(2); } return input; } @@ -130,19 +126,16 @@ public class Decryption { byte[] output = decryptFileChunk(blockBuffer,0x400,0xFC00,IV); hash = hash(output); - if(block == 0){ - + if(block == 0) hash[1] ^= contentID; - - } - if(Arrays.equals(hash, h0)){ - //System.out.println("checksum right"); - } - else{ + + if(!Arrays.equals(hash, h0)){ System.out.println("checksum failed"); System.out.println(Util.ByteArrayToString(hash)); System.out.println(Util.ByteArrayToString(h0)); - throw new IllegalArgumentException("checksumfail"); + throw new IllegalArgumentException("checksumfail"); + }else{ + //System.out.println("checksum right!"); } return output; } @@ -151,7 +144,6 @@ public class Decryption { try { byte[] hash = new byte[20]; MessageDigest md = MessageDigest.getInstance("SHA-1"); - hash = md.digest(hashThis); return hash; } catch (NoSuchAlgorithmException nsae) { @@ -162,67 +154,25 @@ public class Decryption { } - public void decryptFile(InputStream inputSteam, OutputStream outputStream,FEntry toDownload) throws IOException{ + public void decryptFile(InputStream inputStream, OutputStream outputStream,FEntry toDownload) throws IOException{ int BLOCKSIZE = 0x8000; long dlFileLength = toDownload.getFileLength(); if(dlFileLength > (dlFileLength/BLOCKSIZE)*BLOCKSIZE){ dlFileLength = ((dlFileLength/BLOCKSIZE)*BLOCKSIZE) +BLOCKSIZE; - } - - int bytesRead = -1; - + } + byte[] IV = new byte[16]; IV[1] = (byte)toDownload.getContentID(); - - byte[] downloadBuffer; - + byte[] blockBuffer = new byte[BLOCKSIZE]; - byte[] overflowBuffer = new byte[BLOCKSIZE]; - int overflowsize = 0; - int inBlockBuffer = 0; - byte[] tmp = new byte[BLOCKSIZE]; - boolean endd = false; - long downloadTotalsize = 0; + int inBlockBuffer; long wrote = 0; boolean first = true; - do{ - downloadBuffer = new byte[BLOCKSIZE-overflowsize]; - - bytesRead = inputSteam.read(downloadBuffer); - downloadTotalsize += bytesRead; - if(bytesRead ==-1){ - endd = true; - } - - if(!endd)System.arraycopy(downloadBuffer, 0, overflowBuffer, overflowsize,bytesRead); - - bytesRead += overflowsize; - - overflowsize = 0; - int oldInThisBlock = inBlockBuffer; - - if(oldInThisBlock + bytesRead > BLOCKSIZE){ - - int tooMuch = (oldInThisBlock + bytesRead) - BLOCKSIZE; - int toRead = BLOCKSIZE - oldInThisBlock; - - System.arraycopy(overflowBuffer, 0, blockBuffer, oldInThisBlock, toRead); - inBlockBuffer += toRead; - - overflowsize = tooMuch; - System.arraycopy(overflowBuffer, toRead, tmp, 0, tooMuch); - - System.arraycopy(tmp, 0, overflowBuffer, 0, tooMuch); - - - }else{ - if(!endd)System.arraycopy(overflowBuffer, 0, blockBuffer, inBlockBuffer, bytesRead); - inBlockBuffer +=bytesRead; - } - - if(inBlockBuffer == BLOCKSIZE || endd){ + ByteArrayBuffer overflow = new ByteArrayBuffer(BLOCKSIZE); + do{ + inBlockBuffer = getChunkFromStream(inputStream,blockBuffer,overflow,BLOCKSIZE); if(first){ first = false; }else{ @@ -237,101 +187,56 @@ public class Decryption { wrote += inBlockBuffer; outputStream.write(output, 0, inBlockBuffer); - - inBlockBuffer = 0; - } - - }while(downloadTotalsize < dlFileLength && !endd); + }while(inBlockBuffer == BLOCKSIZE); outputStream.close(); - inputSteam.close(); + inputStream.close(); } - - public void decryptFileHash(InputStream inputSteam, OutputStream outputStream,FEntry toDownload) throws IOException{ + public void decryptFileHash(InputStream inputStream, OutputStream outputStream,FEntry toDownload) throws IOException{ int BLOCKSIZE = 0x10000; int HASHBLOCKSIZE = 0xFC00; - long writeSize = HASHBLOCKSIZE; // Hash block size - long block = (toDownload.getFileOffset() / HASHBLOCKSIZE) & 0xF; - - long soffset = toDownload.getFileOffset() - (toDownload.getFileOffset() / HASHBLOCKSIZE * HASHBLOCKSIZE); - + long writeSize = HASHBLOCKSIZE; + long block = (toDownload.getFileOffset() / HASHBLOCKSIZE) & 0xF; + long soffset = toDownload.getFileOffset() - (toDownload.getFileOffset() / HASHBLOCKSIZE * HASHBLOCKSIZE); long size = toDownload.getFileLength(); if( soffset+size > writeSize ) writeSize = writeSize - soffset; - - int bytesRead = -1; - byte[] downloadBuffer; byte[] encryptedBlockBuffer = new byte[BLOCKSIZE]; - byte[] buffer = new byte[BLOCKSIZE]; - - int encryptedBytesInBuffer = 0; - int bufferPostion = 0; - - - byte[] tmp = new byte[BLOCKSIZE]; - boolean lastPart = false; + ByteArrayBuffer overflow = new ByteArrayBuffer(BLOCKSIZE); + long wrote = 0; - + int inBlockBuffer; do{ - downloadBuffer = new byte[BLOCKSIZE-bufferPostion]; - bytesRead = inputSteam.read(downloadBuffer); - int bytesInBuffer = bytesRead + bufferPostion; - if(bytesRead ==-1){ - lastPart = true; - }else{ - System.arraycopy(downloadBuffer, 0, buffer, bufferPostion,bytesRead); //copy downloaded stuff in buffer - bufferPostion = 0; - } - - if(encryptedBytesInBuffer + bytesInBuffer > BLOCKSIZE){ - int tooMuch = (encryptedBytesInBuffer + bytesInBuffer) - BLOCKSIZE; - int toRead = BLOCKSIZE - encryptedBytesInBuffer; + inBlockBuffer = getChunkFromStream(inputStream,encryptedBlockBuffer,overflow,BLOCKSIZE); - System.arraycopy(buffer, 0, encryptedBlockBuffer, encryptedBytesInBuffer, toRead); // make buffer with encrypteddata full - encryptedBytesInBuffer += toRead; - - bufferPostion = tooMuch; //set buffer position; - System.arraycopy(buffer, toRead, tmp, 0, tooMuch); - System.arraycopy(tmp, 0, buffer, 0, tooMuch); - - }else{ - if(!lastPart) System.arraycopy(buffer, 0, encryptedBlockBuffer, encryptedBytesInBuffer, bytesInBuffer); //When File if at the end, no more need to copy - encryptedBytesInBuffer +=bytesInBuffer; - } + if( writeSize > size ) + writeSize = size; - //If downloaded BLOCKSIZE, or file at the end: Decrypt! - if(encryptedBytesInBuffer == BLOCKSIZE || lastPart){ - - if( writeSize > size ) - writeSize = size; - - byte[] output = decryptFileChunkHash(encryptedBlockBuffer, BLOCKSIZE, (int) block,toDownload.getContentID()); - - if((wrote + writeSize) > toDownload.getFileLength()){ - writeSize = (int) (toDownload.getFileLength()- wrote); - } - - outputStream.write(output, (int)(0+soffset), (int)writeSize); - wrote +=writeSize; - encryptedBytesInBuffer = 0; - - block++; - if( block >= 16 ) - block = 0; - - if( soffset > 0) - { - writeSize = HASHBLOCKSIZE; - soffset = 0; - } - } - }while(wrote < toDownload.getFileLength() || lastPart); + byte[] output = decryptFileChunkHash(encryptedBlockBuffer, BLOCKSIZE, (int) block,toDownload.getContentID()); + + if((wrote + writeSize) > toDownload.getFileLength()){ + writeSize = (int) (toDownload.getFileLength()- wrote); + } + + outputStream.write(output, (int)(0+soffset), (int)writeSize); + wrote +=writeSize; + + block++; + if( block >= 16 ) + block = 0; + + if( soffset > 0) + { + writeSize = HASHBLOCKSIZE; + soffset = 0; + } + }while(wrote < toDownload.getFileLength() && (inBlockBuffer == BLOCKSIZE)); outputStream.close(); - inputSteam.close(); + inputStream.close(); } @@ -359,12 +264,36 @@ public class Decryption { decryptFile(input, outputStream, fileEntry); }else{ decryptFileHash(input, outputStream, fileEntry); - } - + } } - + private int getChunkFromStream(InputStream inputStream,byte[] output, ByteArrayBuffer overflowbuffer,int BLOCKSIZE) throws IOException { + int bytesRead = -1; + int inBlockBuffer = 0; + do{ + bytesRead = inputStream.read(overflowbuffer.buffer,overflowbuffer.getLengthOfDataInBuffer(),overflowbuffer.getSpaceLeft()); + if(bytesRead <= 0) break; + + overflowbuffer.addLengthOfDataInBuffer(bytesRead); + + if(inBlockBuffer + overflowbuffer.getLengthOfDataInBuffer() > BLOCKSIZE){ + int tooMuch = (inBlockBuffer + bytesRead) - BLOCKSIZE; + int toRead = BLOCKSIZE - inBlockBuffer; + + System.arraycopy(overflowbuffer.buffer, 0, output, inBlockBuffer, toRead); + inBlockBuffer += toRead; + + System.arraycopy(overflowbuffer.buffer, toRead, overflowbuffer.buffer, 0, tooMuch); + overflowbuffer.setLengthOfDataInBuffer(tooMuch); + }else{ + System.arraycopy(overflowbuffer.buffer, 0, output, inBlockBuffer, overflowbuffer.getLengthOfDataInBuffer()); + inBlockBuffer +=overflowbuffer.getLengthOfDataInBuffer(); + overflowbuffer.resetLengthOfDataInBuffer(); + } + }while(inBlockBuffer != BLOCKSIZE); + return inBlockBuffer; + } } diff --git a/src/de/mas/jnustool/util/Downloader.java b/src/de/mas/jnustool/util/Downloader.java index 8c2e503..6989f6b 100644 --- a/src/de/mas/jnustool/util/Downloader.java +++ b/src/de/mas/jnustool/util/Downloader.java @@ -104,8 +104,8 @@ public class Downloader { String URL = URL_BASE + "/" + String.format("%016X", titleID) + "/" + String.format("%08X", contentID); return downloadFileToByteArray(URL); } - public byte[] downloadTMDToByteArray(long titleID) throws IOException { - String URL = URL_BASE + "/" + String.format("%016X", titleID) + "/tmd"; + public byte[] downloadTMDToByteArray(long titleID) throws IOException { + String URL = URL_BASE + "/" + String.format("%016X", titleID) + "/tmd"; return downloadFileToByteArray(URL); } private byte[] downloadFileToByteArray(String fileURL) throws IOException { diff --git a/src/de/mas/jnustool/util/ExitException.java b/src/de/mas/jnustool/util/ExitException.java deleted file mode 100644 index 54eae42..0000000 --- a/src/de/mas/jnustool/util/ExitException.java +++ /dev/null @@ -1,14 +0,0 @@ -package de.mas.jnustool.util; - -public class ExitException extends Exception { - - public ExitException(String string) { - super(string); - } - - /** - * - */ - private static final long serialVersionUID = 1L; - -} diff --git a/src/de/mas/jnustool/util/NUSTitleInformation.java b/src/de/mas/jnustool/util/NUSTitleInformation.java new file mode 100644 index 0000000..b73b418 --- /dev/null +++ b/src/de/mas/jnustool/util/NUSTitleInformation.java @@ -0,0 +1,128 @@ +package de.mas.jnustool.util; + +import java.io.Serializable; + +public class NUSTitleInformation implements Comparable, Serializable{ + private static final long serialVersionUID = 1L; + + private long titleID; + private String longnameEN; + private String ID6; + private String product_code; + private String content_platform; + private String company_code; + private int region; + + + public enum Region{ + EUR, + USA, + JAP, + UKWN + } + + public NUSTitleInformation(long titleID, String longnameEN, String ID6, String product_code,String content_platform,String company_code,int region) { + setTitleID(titleID); + setLongnameEN(longnameEN); + setID6(ID6); + setProduct_code(product_code); + setCompany_code(company_code); + setContent_platform(content_platform); + setRegion(region); + } + + public NUSTitleInformation() { + // TODO Auto-generated constructor stub + } + + public Region getRegionAsRegion() { + switch (region) { + case 1: return Region.JAP; + case 2: return Region.USA; + case 4: return Region.EUR; + default: return Region.UKWN; + } + } + + public String getContent_platform() { + return content_platform; + } + + public void setContent_platform(String content_platform) { + this.content_platform = content_platform; + } + + public String getCompany_code() { + return company_code; + } + + public void setCompany_code(String company_code) { + this.company_code = company_code; + } + + public String getProduct_code() { + return product_code; + } + + public void setProduct_code(String product_code) { + this.product_code = product_code; + } + + public long getTitleID() { + return titleID; + } + + public void setTitleID(long titleID) { + this.titleID = titleID; + } + + public String getLongnameEN() { + return longnameEN; + } + + public void setLongnameEN(String longnameEN) { + this.longnameEN = longnameEN; + } + + public String getID6() { + return ID6; + } + + public void setID6(String iD6) { + ID6 = iD6; + } + + public int getRegion() { + return region; + } + + public void setRegion(int region) { + this.region = region; + } + + public String getTitleIDAsString() { + return String.format("%08X-%08X", titleID>>32,titleID<<32>>32); + + } + + @Override + public String toString(){ + return getTitleIDAsString() + ";" + region +";" + getContent_platform() + ";" + getCompany_code() + ";"+ getProduct_code()+ ";" + getID6() + ";" + getLongnameEN(); + } + + @Override + public int compareTo(NUSTitleInformation o) { + return getLongnameEN().compareTo(o.getLongnameEN()); + } + + public void init(NUSTitleInformation n) { + setTitleID(n.getTitleID()); + setRegion(n.region); + setCompany_code(n.company_code); + setContent_platform(n.content_platform); + setID6(n.ID6); + setLongnameEN(n.longnameEN); + setProduct_code(n.product_code); + } + +} diff --git a/updatetitles.csv b/updatetitles.csv new file mode 100644 index 0000000..5a6a2c7 --- /dev/null +++ b/updatetitles.csv @@ -0,0 +1,322 @@ +0005000E-10100600;1;WUP;00AF;WUP-U-AKNJ;AKNJAF;TEKKEN TAG TOURNAMENT 2 Wii U EDITION +0005000E-10101B00;4;WUP;0001;WUP-U-APLP;APLP01;LEGO® CITY UNDERCOVER +0005000E-10101C00;1;WUP;0001;WUP-U-ARPJ;ARPJ01;New SUPER MARIO BROS. U +0005000E-10101D00;2;WUP;0001;WUP-U-ARPE;ARPE01;New SUPER MARIO BROS. U +0005000E-10101E00;4;WUP;0001;WUP-U-ARPP;ARPP01;New SUPER MARIO BROS. U +0005000E-10101F00;1;WUP;0001;WUP-U-ALCJ;ALCJ01;Nintendo Land +0005000E-10102000;2;WUP;0001;WUP-U-ALCE;ALCE01;Nintendo Land +0005000E-10102100;4;WUP;0001;WUP-U-ALCP;ALCP01;Nintendo Land +0005000E-10102200;1;WUP;0001;WUP-U-ASTJ;ASTJ01;Wii Fit U +0005000E-10102300;2;WUP;0001;WUP-U-ASTE;ASTE01;Wii Fit U +0005000E-10102400;4;WUP;0001;WUP-U-ASTP;ASTP01;Wii Fit U +0005000E-10104D00;1;WUP;0008;WUP-U-AHDJ;AHDJ08;MONSTER HUNTER 3(tri-)G HD Ver. +0005000E-10106900;1;WUP;0001;WUP-U-AURJ;AURJ01;Mario & Sonic at the Sochi 2014 Olympic Winter Games +0005000E-10106B00;2;WUP;0041;WUP-U-ASSE;ASSE41;Assassin's Creed® III +0005000E-1010AE00;2;WUP;0041;WUP-U-AJDE;AJDE41;JUST DANCE 4 +0005000E-1010AF00;2;WUP;0041;WUP-U-AMVE;AMVE41;Marvel Avengers™: Battle for Earth +0005000E-1010B000;2;WUP;0041;WUP-U-ARBE;ARBE41;Rabbids Land +0005000E-1010B300;2;WUP;008P;WUP-U-AS2E;AS2E8P;Sonic & All-Stars Racing Transformed +0005000E-1010B400;2;WUP;0041;WUP-U-ASPE;ASPE41;ESPN Sports Connection +0005000E-1010B600;2;WUP;0041;WUP-U-AYSE;AYSE41;Your Shape® Fitness Evolved 2013 +0005000E-1010C700;2;WUP;0001;WUP-U-AURE;AURE01;Mario & Sonic at the Sochi 2014 Olympic Winter Games +0005000E-1010C800;4;WUP;0001;WUP-U-AURP;AURP01;Mario & Sonic at the Sochi 2014 Olympic Winter Games +0005000E-1010CF00;2;WUP;0052;WUP-U-AECE;AECE52;Call of Duty: Black Ops II +0005000E-1010DA00;2;WUP;0054;WUP-U-ANBE;ANBE54;NBA 2K13 +0005000E-1010DC00;2;WUP;0069;WUP-U-AMEE;AMEE69;Mass Effect™ 3 Special Edition +0005000E-1010DD00;2;WUP;0041;WUP-U-AZUE;AZUE41;ZombiU +0005000E-1010E300;2;WUP;0041;WUP-U-AS9E;AS9E41;Splinter Cell Blacklist +0005000E-1010EA00;1;WUP;00C8;WUP-U-AHBJ;AHBJC8;WARRIORS OROCHI 3 Hyper +0005000E-1010EB00;1;WUP;0001;WUP-P-AMKJ;AMKJ01;MARIO KART 8 +0005000E-1010EC00;2;WUP;0001;WUP-P-AMKE;AMKE01;MARIO KART 8 +0005000E-1010ED00;4;WUP;0001;WUP-P-AMKP;AMKP01;MARIO KART 8 +0005000E-1010EE00;4;WUP;0069;WUP-U-AF3P;AF3P69;FIFA 13 +0005000E-1010EF00;4;WUP;0041;WUP-U-AZUP;AZUP41;ZombiU +0005000E-1010F000;4;WUP;0041;WUP-U-AJDP;AJDP41;JUST DANCE 4 +0005000E-1010F500;4;WUP;0069;WUP-U-AMEP;AMEP69;Mass Effect™ 3 Special Edition +0005000E-1010F600;4;WUP;0041;WUP-U-ASSP;ASSP41;Assassin's Creed® III +0005000E-1010F700;4;WUP;0041;WUP-U-AYSP;AYSP41;Your Shape® Fitness Evolved 2013 +0005000E-1010F800;4;WUP;00AF;WUP-U-AKNP;AKNPAF;TEKKEN TAG TOURNAMENT 2 Wii U EDITION +0005000E-1010FB00;4;WUP;00NK;WUP-U-WDLP;WDLPNK;Puddle +0005000E-1010FC00;4;WUP;0041;WUP-U-ARBP;ARBP41;Rabbids Land +0005000E-1010FF00;4;WUP;00WR;WUP-U-AGPP;AGPPWR;Game Party Champions +0005000E-10110000;2;WUP;00AF;WUP-U-AKNE;AKNEAF;TEKKEN TAG TOURNAMENT 2 Wii U EDITION +0005000E-10110100;2;WUP;00JX;WUP-U-WASE;WASEJX;Nano Assault Neo +0005000E-10110200;2;WUP;00C8;WUP-U-AHBE;AHBEC8;WARRIORS OROCHI 3 Hyper(NA) +0005000E-10110600;4;WUP;00JX;WUP-U-WASP;WASPJX;Nano Assault Neo +0005000E-10110800;4;WUP;0041;WUP-U-AMVP;AMVP41;Marvel Avengers™: Battle for Earth +0005000E-10110900;1;WUP;00C8;WUP-U-ANGJ;ANGJC8;NINJA GAIDEN 3: Razor's Edge +0005000E-10110A00;2;WUP;0001;WUP-U-ANGE;ANGE01;NINJA GAIDEN 3: Razor's Edge +0005000E-10110B00;4;WUP;0001;WUP-U-ANGP;ANGP01;NINJA GAIDEN 3: Razor's Edge +0005000E-10110E00;1;WUP;0001;WUP-P-AXFJ;AXFJ01;Super Smash Bros. for Wii U +0005000E-10111700;2;WUP;00WR;WUP-U-AJSE;AJSEWR;Injustice: Gods Among Us +0005000E-10111A00;4;WUP;00WR;WUP-U-AJSP;AJSPWR;Injustice: Gods Among Us +0005000E-10111C00;1;WUP;00C8;WUP-U-AG9J;AG9JC8;Romance of the Three Kingdoms 12 +0005000E-10111D00;4;WUP;0041;WUP-U-ASPP;ASPP41;Sports Connection +0005000E-10111F00;4;WUP;008P;WUP-U-AS2P;AS2P8P;Sonic & All-Stars Racing Transformed +0005000E-10112000;2;WUP;00G9;WUP-U-ACRE;ACREG9;THE CROODS +0005000E-10112100;4;WUP;0041;WUP-U-AKFP;AKFP41;Know Your Friends +0005000E-10112200;4;WUP;00FZ;WUP-U-WBDP;WBDPFZ;Trine 2 Director's Cut +0005000E-10112300;1;WUP;0041;WUP-U-AZUJ;AZUJ41;ZombiU +0005000E-10112400;1;WUP;0041;WUP-U-ASSJ;ASSJ41;Assassin's Creed® III +0005000E-10112500;1;WUP;0041;WUP-U-ASPJ;ASPJ41;Sports Connection +0005000E-10112800;1;WUP;0041;WUP-U-AS9J;AS9J41;Splinter Cell Blacklist +0005000E-10112B00;4;WUP;00C8;WUP-U-AHBP;AHBPC8;WARRIORS OROCHI 3 Hyper(EU) +0005000E-10112F00;4;WUP;0054;WUP-U-ANBP;ANBP54;NBA 2K13 +0005000E-10113000;1;WUP;0013;WUP-U-AMEJ;AMEJ13;Mass Effect™ 3 Special Edition +0005000E-10113100;1;WUP;0008;WUP-U-ABHJ;ABHJ08;BIOHAZARD REVELATIONS Unveiled Edition +0005000E-10113400;4;WUP;0052;WUP-U-AECP;AECP52;Call of Duty: Black Ops II +0005000E-10113500;4;WUP;0052;WUP-U-AECI;AECI52;Call of Duty: Black Ops II +0005000E-10113700;4;WUP;0052;WUP-U-AECD;AECD52;Call of Duty: Black Ops II +0005000E-10113800;4;WUP;00Y4;WUP-U-WBAP;WBAPY4;Zen Pinball 2 +0005000E-10113C00;2;WUP;00GT;WUP-U-AFBE;AFBEGT;Funky Barn +0005000E-10115E00;1;WUP;00GD;WUP-U-ADQJ;ADQJGD;Dragon Quest X +0005000E-10115F00;2;WUP;00Y4;WUP-U-WBAE;WBAEY4;Zen Pinball 2 +0005000E-10116100;1;WUP;0001;WUP-P-AX5J;AX5J01;XenobladeX +0005000E-10116300;1;WUP;0001;WUP-U-ACMJ;ACMJ01;The Wonderful 101 +0005000E-10116500;4;WUP;00TW;WUP-U-WAAP;WAAPTW;Toki Tori 2+ +0005000E-10116600;1;WUP;00C8;WUP-U-AH9J;AH9JC8;Fist of the North Star: Ken's Rage 2 +0005000E-10117200;4;WUP;0008;WUP-U-AHDP;AHDP08;MONSTER HUNTER 3 ULTIMATE +0005000E-10117700;4;WUP;00TJ;WUP-U-WCAP;WCAPTJ;Chasing Aurora +0005000E-10118300;2;WUP;0008;WUP-U-AHDE;AHDE08;MONSTER HUNTER 3 ULTIMATE +0005000E-10118400;4;WUP;00GT;WUP-U-AFBP;AFBPGT;Funky Barn +0005000E-1011A700;4;WUP;0041;WUP-U-AZUD;AZUD41;ZombiU +0005000E-1011AF00;2;WUP;00XY;WUP-U-WBTE;WBTEXY;BIT.TRIP Presents... Runner2: Future Legend of Rhythm Alien +0005000E-1011B300;4;WUP;00TZ;WUP-U-AFBZ;AFBZTZ;Funky Barn (Download Version) +0005000E-1011B400;1;WUP;00GD;WUP-U-AECJ;AECJGD;Call of Duty: Black Ops II +0005000E-1011B600;1;WUP;00GD;WUP-U-AQDJ;AQDJGD;Dragon Quest X Beta test +0005000E-1011B700;4;WUP;0041;WUP-U-WLAP;WLAP41;Uplay +0005000E-1011BA00;2;WUP;0041;WUP-U-WLAE;WLAE41;Uplay +0005000E-1011C000;2;WUP;00TJ;WUP-U-WCAE;WCAETJ;Chasing Aurora +0005000E-10128400;4;WUP;0069;WUP-U-ANSP;ANSP69;Need for Speed™ Most Wanted U +0005000E-10128700;2;WUP;00TW;WUP-U-WAAE;WAAETW;Toki Tori 2+ +0005000E-10128800;2;WUP;0069;WUP-U-ANSE;ANSE69;Need for Speed™ Most Wanted U +0005000E-10128A00;2;WUP;00FZ;WUP-U-WBDE;WBDEFZ;Trine 2 Director's Cut +0005000E-10128F00;2;WUP;008P;WUP-U-ASNE;ASNE8P;SONIC LOST WORLD +0005000E-10129000;2;WUP;0008;WUP-U-WDKE;WDKE08;DuckTales: Remastered +0005000E-10129200;4;WUP;0008;WUP-U-WDKP;WDKP08;DuckTales: Remastered +0005000E-1012AC00;4;WUP;0041;WUP-U-AS9P;AS9P41;Splinter Cell Blacklist +0005000E-1012B100;4;WUP;008P;WUP-U-ASNP;ASNP8P;SONIC LOST WORLD +0005000E-1012B400;4;WUP;0008;WUP-U-ABHP;ABHP08;RESIDENT EVIL REVELATIONS +0005000E-1012B700;1;WUP;0013;WUP-U-ANSJ;ANSJ13;Need for Speed™ Most Wanted U +0005000E-1012BC00;1;WUP;0001;WUP-U-AC3J;AC3J01;PIKMIN 3 +0005000E-1012BD00;2;WUP;0001;WUP-U-AC3E;AC3E01;PIKMIN 3 +0005000E-1012BE00;4;WUP;0001;WUP-U-AC3P;AC3P01;PIKMIN 3 +0005000E-1012C500;4;WUP;00AF;WUP-U-ACRP;ACRPAF;THE CROODS +0005000E-1012CF00;2;WUP;0008;WUP-U-ABHE;ABHE08;RESIDENT EVIL REVELATIONS +0005000E-1012DC00;2;WUP;0001;WUP-U-ACME;ACME01;The Wonderful 101 +0005000E-1012F100;1;WUP;0001;WUP-U-AWSJ;AWSJ01;Wii Sports Club +0005000E-10131D00;1;WUP;0001;WUP-U-ASEJ;ASEJ01;???????? +0005000E-10131F00;1;WUP;0001;WUP-U-AYCJ;AYCJ01;yoshi's woolly world +0005000E-10132400;4;WUP;00WR;WUP-U-ALMP;ALMPWR;LEGO® MARVEL Super Heroes +0005000E-10132500;1;WUP;0001;WUP-U-WB9J;WB9J01;Wii Fit U Quick Check +0005000E-10132600;2;WUP;0001;WUP-U-WB9E;WB9E01;Wii Fit U Quick Check +0005000E-10132700;4;WUP;0001;WUP-U-WB9P;WB9P01;Wii Fit U Quick Check +0005000E-10132800;2;WUP;00UP;WUP-U-WEPE;WEPEUP;Unepic EnjoyUp Games +0005000E-10132900;2;WUP;004Q;WUP-U-ADSE;ADSE4Q;Disney INFINITY +0005000E-10132A00;4;WUP;00Y4;WUP-U-WA2P;WA2PY4;Star Wars Pinball +0005000E-10132B00;2;WUP;00WR;WUP-P-ALME;ALMEWR;LEGO® MARVEL Super Heroes +0005000E-10135200;2;WUP;00Y4;WUP-U-WA2E;WA2EY4;Star Wars Pinball +0005000E-10135300;4;WUP;0001;WUP-U-ACMP;ACMP01;The Wonderful 101 +0005000E-10135700;1;WUP;008P;WUP-U-ASNJ;ASNJ8P;SONIC LOST WORLD +0005000E-10136300;4;WUP;00XY;WUP-U-WBTP;WBTPXY;BIT.TRIP Presents... Runner2: Future Legend of Rhythm Alien +0005000E-10136C00;4;WUP;00WR;WUP-U-AZEP;AZEPWR;Batman™: Arkham Origins +0005000E-10136F00;4;WUP;004Q;WUP-U-ADSP;ADSP4Q;Disney Infinity +0005000E-10137000;4;WUP;004Q;WUP-U-ADSZ;ADSZ4Q;Disney Infinity +0005000E-10137C00;2;WUP;00WR;WUP-U-AZEE;AZEEWR;Batman™: Arkham Origins +0005000E-10137F00;2;WUP;0001;WUP-P-ARKE;ARKE01;Donkey Kong Country Tropical Freeze +0005000E-10138300;4;WUP;0001;WUP-P-ARKP;ARKP01;Donkey Kong Country Tropical Freeze +0005000E-10138700;4;WUP;00YV;WUP-P-WB6P;WB6PYV;Spin the Bottle: Bumpie's Party +0005000E-10138800;4;WUP;0041;WUP-U-ASBP;ASBP41;Assassin's Creed® IV Black Flag +0005000E-10138B00;2;WUP;0041;WUP-U-ASBE;ASBE41;Assassin's Creed® IV Black Flag +0005000E-10138E00;4;WUP;0041;WUP-U-WB7P;WB7P41;Rayman Legends Challenges App +0005000E-10138F00;1;WUP;0001;WUP-U-ADNJ;ADNJ01;Devil's Third +0005000E-10139200;2;WUP;0052;WUP-U-ASFE;ASFE52;Skylanders SWAP Force +0005000E-10139500;2;WUP;0041;WUP-U-WB7E;WB7E41;Rayman Legends Challenges App +0005000E-10139900;2;WUP;0041;WUP-P-AJ5E;AJ5E41;JUST DANCE® 2014 +0005000E-10140400;4;WUP;0052;WUP-U-ASFP;ASFP52;Skylanders SWAP Force +0005000E-10140700;1;WUP;00WR;WUP-U-AJSJ;AJSJWR;Injustice: Gods Among Us +0005000E-10142700;4;WUP;0001;WUP-P-AA9P;AA9P01;Art Academy: SketchPad +0005000E-10142A00;2;WUP;005G;WUP-U-AZBE;AZBE5G;Zumba Fitness World Party +0005000E-10142B00;1;WUP;0001;WUP-P-AA9J;AA9J01;Art Academy: SketchPad +0005000E-10142C00;2;WUP;0001;WUP-P-AA9E;AA9E01;Art Academy: SketchPad +0005000E-10143F00;4;WUP;0041;WUP-P-AJ5P;AJ5P41;JUST DANCE® 2014 +0005000E-10144000;2;WUP;00G9;WUP-U-ADVE;ADVEG9;Adventure Time: Explore the Dungeon Because I Don't Know! +0005000E-10144800;1;WUP;0001;WUP-P-ARKJ;ARKJ01;Donkey Kong Country Tropical Freeze +0005000E-10144D00;2;WUP;0001;WUP-U-AWSE;AWSE01;Wii Sports Club +0005000E-10144E00;4;WUP;0001;WUP-U-AWSP;AWSP01;Wii Sports Club +0005000E-10144F00;2;WUP;0001;WUP-P-AXFE;AXFE01;Super Smash Bros. for Wii U +0005000E-10145000;4;WUP;0001;WUP-P-AXFP;AXFP01;Super Smash Bros. for Wii U +0005000E-10145600;7;WUP;0001;WUP-U-ADBA;ADBA01;Animal Crossing Plaza +0005000E-10145800;4;WUP;00UP;WUP-U-WEPP;WEPPUP;Unepic EnjoyUp Games +0005000E-10145900;4;WUP;00HL;WUP-U-WCDP;WCDPHL;Coaster Crazy Deluxe +0005000E-10145F00;1;WUP;0001;WUP-P-WMGJ;WMGJ01;NES REMIX +0005000E-10146000;2;WUP;0001;WUP-P-WMGE;WMGE01;NES REMIX +0005000E-10146100;4;WUP;0001;WUP-P-WMGP;WMGP01;NES REMIX +0005000E-10146800;2;WUP;0052;WUP-P-ACPE;ACPE52;Call of Duty: Ghosts +0005000E-10147600;4;WUP;00DZ;WUP-P-WEVP;WEVPDZ;EvoFish +0005000E-10147F00;2;WUP;00YV;WUP-P-WB6E;WB6EYV;Spin the Bottle: Bumpie's Party +0005000E-10148000;1;WUP;00AF;WUP-P-AUNJ;AUNJAF;ONE PIECE UNLIMITED WORLD R +0005000E-10148200;2;WUP;00UP;WUP-U-WAEE;WAEEUP;Rock 'N Racing Off Road +0005000E-10148F00;1;WUP;0041;WUP-U-WLAJ;WLAJ41;Uplay +0005000E-10149200;4;WUP;00SS;WUP-U-WDFP;WDFPSS;Spot The Differences: Party! +0005000E-10149500;2;WUP;00CS;WUP-P-WKTE;WKTECS;Scram Kitty and his Buddy on Rails +0005000E-10149700;1;WUP;0001;WUP-P-WAUJ;WAUJ01;?? ?? +0005000E-1014C600;4;WUP;00CX;WUP-U-WGSP;WGSPCX;Giana Sisters Twisted Dreams +0005000E-1014C800;1;WUP;0041;WUP-U-ASBJ;ASBJ41;Assassin's Creed® IV Black Flag +0005000E-1014CB00;2;WUP;00CX;WUP-P-WGSE;WGSECX;Giana Sisters Twisted Dreams +0005000E-1014CF00;2;WUP;00HL;WUP-U-WCDE;WCDEHL;Coaster Crazy Deluxe +0005000E-1014D100;4;WUP;00CS;WUP-U-WKTP;WKTPCS;Scram Kitty and his Buddy on Rails +0005000E-1014D900;1;WUP;008P;WUP-P-APTJ;APTJ8P;PUYOPUYOTETRIS +0005000E-1014DA00;1;WUP;0008;WUP-U-AMFJ;AMFJ08;Monster Hunter Frontier G +0005000E-1014DE00;2;WUP;00WR;WUP-U-ALAE;ALAEWR;The LEGO® Movie Videogame +0005000E-1014E000;4;WUP;00WR;WUP-U-ALAP;ALAPWR;The LEGO® Movie Videogame +0005000E-1014E100;4;WUP;00AF;WUP-U-ADVP;ADVPAF;Adventure Time: Explore the Dungeon Because I Don't Know! +0005000E-1014E300;4;WUP;00GT;WUP-U-AZBP;AZBPGT;Zumba Fitness World Party +0005000E-10154600;1;WUP;00WR;WUP-U-AZEJ;AZEJWR;Batman™: Arkham Origins +0005000E-10154D00;4;WUP;00BU;WUP-U-WC3P;WC3PBU;The Mysterious Cities of Gold: Secret Paths +0005000E-10156100;4;WUP;0052;WUP-P-ACPP;ACPP52;Call of Duty: Ghosts +0005000E-10156500;2;WUP;00BU;WUP-U-WC3E;WC3EBU;The Mysterious Cities of Gold: Secret Paths +0005000E-10157600;4;WUP;0052;WUP-P-ACPI;ACPI52;Call of Duty: Ghosts +0005000E-10157900;1;WUP;00GD;WUP-P-ACPJ;ACPJGD;Call of Duty: Ghosts +0005000E-10159800;1;WUP;0001;WUP-U-AFCJ;AFCJ01;Wii Fit U (Free) +0005000E-10159900;2;WUP;0001;WUP-U-AFCE;AFCE01;Wii Fit U (Free) +0005000E-10159A00;4;WUP;0001;WUP-U-AFCP;AFCP01;Wii Fit U (promo) +0005000E-1015A300;1;WUP;00AF;WUP-U-ADSJ;ADSJAF;Disney INFINITY +0005000E-1015B200;2;WUP;0041;WUP-P-ACLE;ACLE41;CHILD of LIGHT +0005000E-1015D300;2;WUP;00AS;WUP-P-WLCE;WLCEAS;Lucadian Chronicles +0005000E-1015EB00;1;WUP;00R7;WUP-U-WHYJ;WHYJR7;Mighty Switch Force!™ Hyper Drive Edition +0005000E-10161F00;1;WUP;0001;WUP-U-ABAJ;ABAJ01;Mario Party 10 +0005000E-10162300;4;WUP;00YR;WUP-U-WCZP;WCZPYR;Color Zen +0005000E-10162B00;1;WUP;0001;WUP-P-AGMJ;AGMJ01;Splatoon +0005000E-10162D00;2;WUP;0001;WUP-U-ABAE;ABAE01;Mario Party 10 +0005000E-10169600;4;WUP;00UP;WUP-U-WEPS;WEPSUP;Unepic EnjoyUp Games +0005000E-1016A200;4;WUP;00SS;WUP-U-WBXP;WBXPSS;Bombing Bastards +0005000E-1016A400;4;WUP;00WR;WUP-P-BTMP;BTMPWR;LEGO® Batman™ 3 Beyond Gotham +0005000E-1016A600;1;WUP;00TF;WUP-P-WB6J;WB6JTF;?????????????? +0005000E-1016AB00;2;WUP;00SS;WUP-U-WBXE;WBXESS;Bombing Bastards +0005000E-1016AC00;2;WUP;009T;WUP-U-WMLE;WMLE9T;Armillo +0005000E-1016AD00;2;WUP;00WR;WUP-P-BTME;BTMEWR;LEGO® Batman™ 3 Beyond Gotham +0005000E-1016B200;2;WUP;009V;WUP-U-WMRE;WMRE9V;Master Reboot +0005000E-1016C700;4;WUP;009T;WUP-U-WMLP;WMLP9T;Armillo +0005000E-1016CE00;2;WUP;00YR;WUP-U-WCZE;WCZEYR;Color Zen +0005000E-1016D500;4;WUP;009Y;WUP-P-WCTP;WCTP9Y;Super Toy Cars +0005000E-1016D800;1;WUP;0041;WUP-P-ACLJ;ACLJ41;CHILD of LIGHT +0005000E-1016DC00;2;WUP;004Q;WUP-P-ADRE;ADRE4Q;Disney Infinity [2.0] +0005000E-1016DE00;2;WUP;009Y;WUP-P-WCTE;WCTE9Y;Super Toy Cars +0005000E-1016E100;2;WUP;00AY;WUP-P-WKNE;WKNEAY;Shovel Knight +0005000E-1016E300;2;WUP;008S;WUP-P-WGRE;WGRE8S;GravBlocks+ From Nothing Game Studios +0005000E-1016E800;4;WUP;009V;WUP-U-WMRP;WMRP9V;Master Reboot +0005000E-1016EA00;4;WUP;0041;WUP-P-ACLP;ACLP41;CHILD of LIGHT +0005000E-1016FF00;2;WUP;00NT;WUP-P-WFWE;WFWENT;Flowerworks HD Follie's Adventure +0005000E-10170200;2;WUP;007Z;WUP-U-WGAE;WGAE7Z;Pier Solar and the Great Architects +0005000E-10170600;1;WUP;00AF;WUP-U-APWJ;APWJAF;KAMEN RIDER BATTRIDE WAR ? PREMIUM TV&MOVIE SOUND ED. +0005000E-10170700;1;WUP;00AF;WUP-U-ABWJ;ABWJAF;KAMEN RIDER BATTRIDE WAR ? +0005000E-10172A00;2;WUP;009Z;WUP-N-HRLE;HRLE9Z;Crunchyroll +0005000E-10172B00;4;WUP;009Z;WUP-N-HRLP;HRLP9Z;Crunchyroll +0005000E-10173300;4;WUP;00UB;WUP-U-WCGP;WCGPUB;Stealth Inc 2 A Game of Clones +0005000E-10175B00;2;WUP;008P;WUP-P-BSSE;BSSE8P;Sonic Boom: Rise of Lyric +0005000E-10175D00;4;WUP;00AF;WUP-P-AUNP;AUNPAF;ONE PIECE Unlimited World Red +0005000E-10176500;2;WUP;00UB;WUP-U-WCGE;WCGEUB;Stealth Inc 2 A Game of Clones +0005000E-10176900;2;WUP;0001;WUP-P-AGME;AGME01;Splatoon +0005000E-10176A00;4;WUP;0001;WUP-P-AGMP;AGMP01;Splatoon +0005000E-10176F00;4;WUP;0041;WUP-P-BJDP;BJDP41;JUST DANCE® 2015 +0005000E-10177600;2;WUP;0001;WUP-U-ADNE;ADNE01;Devil's Third +0005000E-10177800;4;WUP;008P;WUP-P-BSSP;BSSP8P;Sonic Boom: Rise of Lyric +0005000E-10178F00;4;WUP;00AY;WUP-P-WKNP;WKNPAY;Shovel Knight +0005000E-10179100;2;WUP;0041;WUP-P-BJDE;BJDE41;JUST DANCE® 2015 +0005000E-1017BE00;1;WUP;0001;WUP-U-BXAJ;BXAJ01;Art Academy: Home Studio +0005000E-1017BF00;2;WUP;0001;WUP-U-BXAE;BXAE01;Art Academy: Home Studio +0005000E-1017C600;2;WUP;0052;WUP-P-BK7E;BK7E52;Skylanders Trap Team +0005000E-1017CD00;1;WUP;00C8;WUP-U-BWPJ;BWPJC8;Hyrule Warriors +0005000E-1017D800;2;WUP;0001;WUP-U-BWPE;BWPE01;Hyrule Warriors +0005000E-1017D900;4;WUP;0001;WUP-U-BWPP;BWPP01;Hyrule Warriors +0005000E-1017DA00;2;WUP;011S;WUP-P-ACQE;ACQE1S;Costume Quest 2 +0005000E-1017E000;4;WUP;00XQ;WUP-P-WK8P;WK8PXQ;Turtle Tale +0005000E-10180500;1;WUP;0001;WUP-P-AKBJ;AKBJ01;Captain Toad: Treasure Tracker +0005000E-10180600;2;WUP;0001;WUP-P-AKBE;AKBE01;Captain Toad: Treasure Tracker +0005000E-10180700;4;WUP;0001;WUP-P-AKBP;AKBP01;Captain Toad: Treasure Tracker +0005000E-10181F00;4;WUP;0052;WUP-P-BK7P;BK7P52;Skylanders Trap Team +0005000E-10182C00;4;WUP;00XT;WUP-U-AJTP;AJTPXT;Jett Tailfin +0005000E-10183000;2;WUP;010P;WUP-P-ARNE;ARNE0P;Runbow +0005000E-10183900;2;WUP;00UP;WUP-U-BMVE;BMVEUP;99Moves +0005000E-10184D00;2;WUP;0001;WUP-U-AYCE;AYCE01;Yoshi's Woolly World +0005000E-10187100;4;WUP;00LW;WUP-U-BUGP;BUGPLW;Underground +0005000E-10188B00;1;WUP;0001;WUP-U-AXYJ;AXYJ01;Kirby and the Rainbow Curse +0005000E-10188C00;4;WUP;004Q;WUP-P-ADRP;ADRP4Q;Disney Infinity [2.0] +0005000E-10188D00;4;WUP;004Q;WUP-P-ADRZ;ADRZ4Q;Disney Infinity [2.0] +0005000E-10189200;2;WUP;011C;WUP-P-BSPE;BSPE1C;Sportsball +0005000E-1018C400;1;WUP;00AF;WUP-P-BSFJ;BSFJAF;???F??????????? ????SF??????????? +0005000E-1018DB00;1;WUP;0001;WUP-U-AMAJ;AMAJ01;Super Mario Maker +0005000E-1018DC00;2;WUP;0001;WUP-U-AMAE;AMAE01;Super Mario Maker +0005000E-1018DD00;4;WUP;0001;WUP-U-AMAP;AMAP01;Super Mario Maker +0005000E-1018DE00;4;WUP;00NK;WUP-U-ATCP;ATCPNK;Tetrobot and Co. +0005000E-1018ED00;2;WUP;00NK;WUP-U-ATCE;ATCENK;Tetrobot and Co. +0005000E-10191700;4;WUP;00UP;WUP-U-BMVP;BMVPUP;99Moves +0005000E-10191800;4;WUP;00UP;WUP-U-WAEP;WAEPUP;Rock 'N Racing Off Road +0005000E-10192200;1;WUP;00AF;WUP-P-BRSJ;BRSJAF;KAMEN RIDER SUMMON RIDE! +0005000E-10194200;2;WUP;00WR;WUP-U-APZE;APZEWR;LEGO® DIMENSIONS™ +0005000E-10195D00;4;WUP;00WR;WUP-U-APZP;APZPWR;LEGO® DIMENSIONS™ +0005000E-10197800;4;WUP;011S;WUP-P-ACQP;ACQP1S;Costume Quest 2 +0005000E-10199000;1;WUP;0001;WUP-P-AVXJ;AVXJ01;Mario Tennis: Ultra Smash +0005000E-1019AD00;2;WUP;011A;WUP-P-BEQE;BEQE1A;Elliot Quest +0005000E-101A1B00;2;WUP;00RG;WUP-U-BS2E;BS2ERG;Swords & Soldiers II +0005000E-101A2600;1;WUP;00W4;WUP-U-WKFJ;WKFJW4;Kung Fu Rabbit +0005000E-101A2E00;1;WUP;00TF;WUP-P-WEXJ;WEXJTF;XType+ +0005000E-101A3500;2;WUP;0001;WUP-P-AVXE;AVXE01;Mario Tennis: Ultra Smash +0005000E-101A3600;4;WUP;0001;WUP-P-AVXP;AVXP01;Mario Tennis: Ultra Smash +0005000E-101A3B00;2;WUP;00LY;WUP-P-BLPE;BLPELY;Life of Pixel +0005000E-101A4900;4;WUP;00LY;WUP-U-BLPP;BLPPLY;Life of Pixel +0005000E-101A5C00;4;WUP;00WR;WUP-U-ALJP;ALJPWR;LEGO® Jurassic World™ +0005000E-101A5E00;4;WUP;00UB;WUP-U-ALLP;ALLPUB;OlliOlli +0005000E-101A5F00;2;WUP;00WY;WUP-U-BSXE;BSXEWY;Shantae and the Pirate's Curse +0005000E-101A6200;2;WUP;00WR;WUP-U-ALJE;ALJEWR;LEGO® Jurassic World™ +0005000E-101A6300;4;WUP;00YR;WUP-U-ACUP;ACUPYR;Cube Life: Island Survival +0005000E-101A6400;2;WUP;00YR;WUP-U-ACUE;ACUEYR;Cube Life: Island Survival +0005000E-101A6500;2;WUP;00VZ;WUP-P-BKFE;BKFEVZ;Kung Fu Panda Showdown of Legendary Legends +0005000E-101A6900;2;WUP;00UB;WUP-P-ALLE;ALLEUB;OlliOlli +0005000E-101A9500;4;WUP;00WY;WUP-U-BSXP;BSXPWY;Shantae and the Pirate's Curse +0005000E-101A9F00;2;WUP;0147;WUP-P-BDAE;BDAE47;Dot Arcade +0005000E-101AA500;4;WUP;00VZ;WUP-P-BKFP;BKFPVZ;Kung Fu Panda Showdown of Legendary Legends +0005000E-101ABC00;2;WUP;0001;WUP-U-AXYE;AXYE01;Kirby and the Rainbow Curse +0005000E-101AC700;2;WUP;00VZ;WUP-P-BFNE;BFNEVZ;Adventure Time Finn and Jake Investigations +0005000E-101AC900;2;WUP;004Q;WUP-P-BD3E;BD3E4Q;DISNEY INFINITY 3.0 EDITION +0005000E-101AFE00;4;WUP;00VZ;WUP-P-BFNP;BFNPVZ;Adventure Time Finn and Jake Investigations +0005000E-101B3D00;4;WUP;004Q;WUP-P-BD3P;BD3P4Q;DISNEY INFINITY 3.0: PLAY WITHOUT LIMITS +0005000E-101B3E00;4;WUP;004Q;WUP-P-BD3Z;BD3Z4Q;DISNEY INFINITY 3.0: PLAY WITHOUT LIMITS +0005000E-101B8500;2;WUP;0052;WUP-P-BS5E;BS5E52;Skylanders SuperChargers +0005000E-101B9000;2;WUP;0041;WUP-P-AJ6E;AJ6E41;JUST DANCE® 2016 +0005000E-101B9800;4;WUP;0041;WUP-P-AJ6P;AJ6P41;JUST DANCE® 2016 +0005000E-101BA400;2;WUP;0052;WUP-P-AGNE;AGNE52;Guitar Hero Live +0005000E-101BAA00;2;WUP;010C;WUP-U-ATTE;ATTE0C;Totem Topple +0005000E-101BB300;4;WUP;008V;WUP-P-WLSP;WLSP8V;ZaciSa: Defense of the Crayon Dimension! +0005000E-101BB800;4;WUP;011A;WUP-P-BEQP;BEQP1A;Elliot Quest +0005000E-101BC600;4;WUP;0052;WUP-P-AGNP;AGNP52;Guitar Hero Live +0005000E-101BE900;4;WUP;00WR;WUP-P-ALRP;ALRPWR;LEGO® MARVEL's Avengers +0005000E-101BEF00;2;WUP;00WR;WUP-P-ALRE;ALREWR;LEGO® MARVEL's Avengers +0005000E-101BFC00;4;WUP;0052;WUP-P-BS5P;BS5P52;Skylanders SuperChargers +0005000E-101C0700;4;WUP;00UB;WUP-U-AN3P;AN3PUB;Nova-111 +0005000E-101C0A00;2;WUP;00UB;WUP-U-AN3E;AN3EUB;Nova-111 +0005000E-101C0B00;2;WUP;00UB;WUP-P-BS7E;BS7EUB;The Swindle +0005000E-101C0C00;4;WUP;00UB;WUP-P-BS7P;BS7PUB;The Swindle +0005000E-101C3100;2;WUP;0167;WUP-U-AFEE;AFEE67;Freedom Planet +0005000E-101C3900;4;WUP;015G;WUP-P-AWBP;AWBP5G;Word Search by POWGI +0005000E-101C4C00;4;WUP;0001;WUP-P-AX5D;AX5D01;Xenoblade Chronicles X +0005000E-101C4D00;2;WUP;0001;WUP-P-AX5E;AX5E01;Xenoblade Chronicles X +0005000E-101C6A00;2;WUP;016E;WUP-P-AD5E;AD5E6E;Octodad: Dadliest Catch +0005000E-101C6E00;4;WUP;00RG;WUP-U-BS2P;BS2PRG;Swords & Soldiers II +0005000E-101C8B00;4;WUP;00YT;WUP-P-AWMP;AWMPYT;WICKED MONSTERS BLAST! HD PLUS +0005000E-101CC900;4;WUP;0167;WUP-U-AFEP;AFEP67;Freedom Planet +0005000E-101CE100;2;WUP;0175;WUP-U-ACHE;ACHE75;Canvaleon +0005000E-101D0700;4;WUP;0175;WUP-U-ACHP;ACHP75;Canvaleon +0005000E-101D0900;2;WUP;00FV;WUP-U-AGWE;AGWEFV;Gunman Clive HD Collection +0005000E-101D2C00;1;WUP;00SA;WUP-P-ATXJ;ATXJSA;Bike Rider UltraDX WORLD TOUR +0005000E-101D3900;4;WUP;017D;WUP-P-AQCP;AQCP7D;The Quiet Collection +0005000E-101D4200;2;WUP;00DV;WUP-P-ABPE;ABPEDV;Brunswick Pro Bowling +0005000E-101D6100;4;WUP;00FV;WUP-U-AGWP;AGWPFV;Gunman Clive HD Collection +0005000E-101D6D00;4;WUP;010P;WUP-P-ARNP;ARNP0P;Runbow +0005000E-101D7400;4;WUP;010C;WUP-U-ATTP;ATTP0C;Totem Topple +0005000E-101D7500;4;WUP;00DU;WUP-P-AUMP;AUMPDU;Minecraft: Wii U Edition +0005000E-101D9D00;2;WUP;00DU;WUP-P-AUME;AUMEDU;Minecraft: Wii U Edition +0005000E-101DBE00;1;WUP;0188;WUP-P-AUMJ;AUMJ88;Minecraft: Wii U Edition +0005000E-101DC100;4;WUP;016E;WUP-P-AD5P;AD5P6E;Octodad: Dadliest Catch +0005000E-101DDC00;1;WUP;00AF;WUP-P-BD3J;BD3JAF;????????????3.0