diff --git a/NUS Downloader/Form1.Designer.cs b/NUS Downloader/Form1.Designer.cs index fe6494a..484d978 100644 --- a/NUS Downloader/Form1.Designer.cs +++ b/NUS Downloader/Form1.Designer.cs @@ -567,7 +567,6 @@ this.saveaswadbox.TabIndex = 43; this.saveaswadbox.Text = "SaveAs"; this.saveaswadbox.UseVisualStyleBackColor = true; - this.saveaswadbox.Paint += new System.Windows.Forms.PaintEventHandler(this.saveaswadbox_Paint); // // deletecontentsbox // diff --git a/NUS Downloader/Form1.cs b/NUS Downloader/Form1.cs index 72c2352..db273f1 100644 --- a/NUS Downloader/Form1.cs +++ b/NUS Downloader/Form1.cs @@ -10,7 +10,6 @@ using System.ComponentModel; using System.Threading; using System.Text; using wyDay.Controls; - using System.Diagnostics; @@ -18,55 +17,86 @@ namespace NUS_Downloader { public partial class Form1 : Form { - const string NUSURL = "http://nus.cdn.shop.wii.com/ccs/download/"; - const string DSiNUSURL = "http://nus.cdn.t.shop.nintendowifi.net/ccs/download/"; + private const string WII_NUS_URL = "http://nus.cdn.shop.wii.com/ccs/download/"; + private const string DSI_NUS_URL = "http://nus.cdn.t.shop.nintendowifi.net/ccs/download/"; // TODO: Always remember to change version! - string version = "v1.5a Beta"; - WebClient generalWC = new WebClient(); - static RijndaelManaged rijndaelCipher; - static bool dsidecrypt = false; + private string version = "v1.5a Beta"; + private WebClient generalWC = new WebClient(); + private static RijndaelManaged rijndaelCipher; + private static bool dsidecrypt = false; // Cross-thread Windows Formsing - delegate void AddToolStripItemToStripCallback(int type, ToolStripMenuItem additionitem, XmlAttributeCollection attributes); //TODO - delegate void WriteStatusCallback(string Update); - + private delegate void AddToolStripItemToStripCallback( + int type, ToolStripMenuItem additionitem, XmlAttributeCollection attributes); + + //TODO + private delegate void WriteStatusCallback(string Update); + // Images do not compare unless globalized... - Image green = Properties.Resources.bullet_green; - Image orange = Properties.Resources.bullet_orange; - Image redorb = Properties.Resources.bullet_red; - Image redgreen = Properties.Resources.bullet_redgreen; - Image redorange = Properties.Resources.bullet_redorange; + private Image green = Properties.Resources.bullet_green; + private Image orange = Properties.Resources.bullet_orange; + private Image redorb = Properties.Resources.bullet_red; + private Image redgreen = Properties.Resources.bullet_redgreen; + private Image redorange = Properties.Resources.bullet_redorange; // Certs storage - byte[] cert_CA = new byte[0x400]; - byte[] cert_CACP = new byte[0x300]; - byte[] cert_CAXS = new byte[0x300]; + private byte[] cert_CA = new byte[0x400]; + private byte[] cert_CACP = new byte[0x300]; + private byte[] cert_CAXS = new byte[0x300]; - byte[] cert_CA_sha1 = new byte[20] {0x5B, 0x7D, 0x3E, 0xE2, 0x87, 0x06, 0xAD, 0x8D, 0xA2, 0xCB, 0xD5, 0xA6, 0xB7, 0x5C, 0x15, 0xD0, 0xF9, 0xB6, 0xF3, 0x18}; - byte[] cert_CACP_sha1 = new byte[20] {0x68, 0x24, 0xD6, 0xDA, 0x4C, 0x25, 0x18, 0x4F, 0x0D, 0x6D, 0xAF, 0x6E, 0xDB, 0x9C, 0x0F, 0xC5, 0x75, 0x22, 0xA4, 0x1C}; - byte[] cert_CAXS_sha1 = new byte[20] {0x09, 0x78, 0x70, 0x45, 0x03, 0x71, 0x21, 0x47, 0x78, 0x24, 0xBC, 0x6A, 0x3E, 0x5E, 0x07, 0x61, 0x56, 0x57, 0x3F, 0x8A}; + private byte[] cert_CA_sha1 = new byte[20] + { + 0x5B, 0x7D, 0x3E, 0xE2, 0x87, 0x06, 0xAD, 0x8D, 0xA2, 0xCB, 0xD5, 0xA6, 0xB7, + 0x5C, 0x15, 0xD0, 0xF9, 0xB6, 0xF3, 0x18 + }; - byte[] cert_total_sha1 = new byte[20] {0xAC, 0xE0, 0xF1, 0x5D, 0x2A, 0x85, 0x1C, 0x38, 0x3F, 0xE4, 0x65, 0x7A, 0xFC, 0x38, 0x40, 0xD6, 0xFF, 0xE3, 0x0A, 0xD0}; + private byte[] cert_CACP_sha1 = new byte[20] + { + 0x68, 0x24, 0xD6, 0xDA, 0x4C, 0x25, 0x18, 0x4F, 0x0D, 0x6D, 0xAF, 0x6E, + 0xDB, 0x9C, 0x0F, 0xC5, 0x75, 0x22, 0xA4, 0x1C + }; - string WAD_Saveas_Filename; + private byte[] cert_CAXS_sha1 = new byte[20] + { + 0x09, 0x78, 0x70, 0x45, 0x03, 0x71, 0x21, 0x47, 0x78, 0x24, 0xBC, 0x6A, + 0x3E, 0x5E, 0x07, 0x61, 0x56, 0x57, 0x3F, 0x8A + }; + + private byte[] cert_total_sha1 = new byte[20] + { + 0xAC, 0xE0, 0xF1, 0x5D, 0x2A, 0x85, 0x1C, 0x38, 0x3F, 0xE4, 0x65, 0x7A, + 0xFC, 0x38, 0x40, 0xD6, 0xFF, 0xE3, 0x0A, 0xD0 + }; + + private string WAD_Saveas_Filename; // TODO: OOP scripting - string script_filename; - bool script_mode = false; - string[] nusentries; + private string script_filename; + private bool script_mode = false; + private string[] nusentries; // Proxy stuff... - string proxy_url; - string proxy_usr; - string proxy_pwd; + private string proxy_url; + private string proxy_usr; + private string proxy_pwd; // Database thread private BackgroundWorker fds; // Common Key hash - byte[] wii_commonkey_sha1 = new byte[20] { 0xEB, 0xEA, 0xE6, 0xD2, 0x76, 0x2D, 0x4D, 0x3E, 0xA1, 0x60, 0xA6, 0xD8, 0x32, 0x7F, 0xAC, 0x9A, 0x25, 0xF8, 0x06, 0x2B }; - byte[] wii_commonkey_sha1_asstring = new byte[20] { 0x56, 0xdd, 0x4e, 0xb3, 0x59, 0x75, 0xc2, 0xfd, 0x5a, 0xe8, 0xba, 0x8c, 0x7d, 0x89, 0x9a, 0xc5, 0xe6, 0x17, 0x54, 0x19 }; + private byte[] wii_commonkey_sha1 = new byte[20] + { + 0xEB, 0xEA, 0xE6, 0xD2, 0x76, 0x2D, 0x4D, 0x3E, 0xA1, 0x60, 0xA6, 0xD8, + 0x32, 0x7F, 0xAC, 0x9A, 0x25, 0xF8, 0x06, 0x2B + }; + + private byte[] wii_commonkey_sha1_asstring = new byte[20] + { + 0x56, 0xdd, 0x4e, 0xb3, 0x59, 0x75, 0xc2, 0xfd, 0x5a, 0xe8, + 0xba, 0x8c, 0x7d, 0x89, 0x9a, 0xc5, 0xe6, 0x17, 0x54, 0x19 + }; + /* public struct WADHeader { @@ -87,10 +117,12 @@ namespace NUS_Downloader public byte[] Type; public byte[] Size; public byte[] SHAHash; - }; + } ; - public enum ContentTypes : int { - Shared = 0x8001, Normal = 0x0001 + public enum ContentTypes : int + { + Shared = 0x8001, + Normal = 0x0001 } // This is the standard entry to the GUI @@ -129,7 +161,7 @@ namespace NUS_Downloader scripter.RunWorkerAsync(); } - + /* CLI MODE DEPRECATED... // Vars bool startnow = false; @@ -229,7 +261,7 @@ namespace NUS_Downloader string currentdir = Directory.GetCurrentDirectory(); //if (currentdir.EndsWith(Convert.ToString(Path.DirectorySeparatorChar.ToString())) == false) - //currentdir += Path.DirectorySeparatorChar.ToString(); + //currentdir += Path.DirectorySeparatorChar.ToString(); // Check for Wii common key bin file... if (File.Exists(Path.Combine(currentdir, "key.bin")) == false) @@ -241,10 +273,13 @@ namespace NUS_Downloader else { WriteStatus("Common Key detected."); - if ((Convert.ToBase64String(ComputeSHA(LoadCommonKey("key.bin")))) != (Convert.ToBase64String(wii_commonkey_sha1))) - { // Hmm, seems to be a bad hash + if ((Convert.ToBase64String(ComputeSHA(LoadCommonKey("key.bin")))) != + (Convert.ToBase64String(wii_commonkey_sha1))) + { + // Hmm, seems to be a bad hash // Let's check if it matches the hex string version... - if ((Convert.ToBase64String(ComputeSHA(LoadCommonKey("key.bin")))) != (Convert.ToBase64String(wii_commonkey_sha1_asstring))) + if ((Convert.ToBase64String(ComputeSHA(LoadCommonKey("key.bin")))) != + (Convert.ToBase64String(wii_commonkey_sha1_asstring))) WriteStatus(" - (PS: Your common key isn't hashing right!)"); else { @@ -252,7 +287,7 @@ namespace NUS_Downloader // Directory stuff //string keydir = Directory.GetCurrentDirectory(); //if (!(keydir.EndsWith(Path.DirectorySeparatorChar.ToString())) || !(keydir.EndsWith(Path.AltDirectorySeparatorChar.ToString()))) - //keydir += Path.DirectorySeparatorChar.ToString(); + //keydir += Path.DirectorySeparatorChar.ToString(); TextReader ckreader = new StreamReader(Path.Combine(currentdir, "key.bin")); String ckashex = ckreader.ReadLine(); ckreader.Close(); @@ -304,8 +339,10 @@ namespace NUS_Downloader { proxy_usr = proxy_file[1]; SetAllEnabled(false); - ProxyVerifyBox.Visible = true; ProxyVerifyBox.Enabled = true; - ProxyPwdBox.Enabled = true; SaveProxyBtn.Enabled = true; + ProxyVerifyBox.Visible = true; + ProxyVerifyBox.Enabled = true; + ProxyPwdBox.Enabled = true; + SaveProxyBtn.Enabled = true; ProxyVerifyBox.Select(); } } @@ -341,7 +378,7 @@ namespace NUS_Downloader } catch { - // ... + // ... } } } @@ -435,11 +472,13 @@ namespace NUS_Downloader // Loop through each content and display name, hash, index for (int i = 0; i < nbr_cont; i++) { - WriteStatus(" Content " + (i + 1) + ": " + tmdcontents[i] + " (" + Convert.ToString(int.Parse(tmdsizes[i], System.Globalization.NumberStyles.HexNumber)) + " bytes)"); + WriteStatus(" Content " + (i + 1) + ": " + tmdcontents[i] + " (" + + Convert.ToString(int.Parse(tmdsizes[i], System.Globalization.NumberStyles.HexNumber)) + + " bytes)"); byte[] hash = new byte[20]; for (int x = 0; x < 20; x++) { - hash[x] = tmdhashes[(i * 20) + x]; + hash[x] = tmdhashes[(i*20) + x]; } WriteStatus(" - Hash: " + DisplayBytes(hash, "").Substring(0, 8) + "..."); WriteStatus(" - Index: " + tmdindices[i]); @@ -458,7 +497,8 @@ namespace NUS_Downloader string sysversion = ""; for (int i = 0; i < 8; i++) sysversion += MakeProperLength(ConvertToHex(Convert.ToString(tmd[0x184 + i]))); - sysversion = Convert.ToString(int.Parse(sysversion.Substring(14, 2), System.Globalization.NumberStyles.HexNumber)); + sysversion = + Convert.ToString(int.Parse(sysversion.Substring(14, 2), System.Globalization.NumberStyles.HexNumber)); return sysversion; } @@ -468,10 +508,10 @@ namespace NUS_Downloader /// The TMD. /// int Count of Contents private int ContentCount(byte[] tmd) - { + { // nbr_cont (0xDE) len=0x02 int nbr_cont = 0; - nbr_cont = (tmd[0x1DE] * 256) + tmd[0x1DF]; + nbr_cont = (tmd[0x1DE]*256) + tmd[0x1DF]; return nbr_cont; } @@ -484,7 +524,7 @@ namespace NUS_Downloader { // nbr_cont (0xE0) len=0x02 int bootidx = 0; - bootidx = (tmd[0x1E0] * 256) + tmd[0x1E1]; + bootidx = (tmd[0x1E0]*256) + tmd[0x1E1]; return bootidx; } @@ -514,7 +554,7 @@ namespace NUS_Downloader { Debug.WriteLine("InvokeRequired..."); WriteStatusCallback wsc = new WriteStatusCallback(WriteStatus); - this.Invoke(wsc, new object[] { Update }); + this.Invoke(wsc, new object[] {Update}); return; } // Small function for writing text to the statusbox... @@ -565,9 +605,9 @@ namespace NUS_Downloader // Nope. Resize the buffer, put in the byte we've just // read, and continue - byte[] newBuffer = new byte[buffer.Length * 2]; + byte[] newBuffer = new byte[buffer.Length*2]; Array.Copy(buffer, newBuffer, buffer.Length); - newBuffer[read] = (byte)nextByte; + newBuffer[read] = (byte) nextByte; buffer = newBuffer; read++; } @@ -600,7 +640,7 @@ namespace NUS_Downloader private string ConvertToHex(string decval) { // Convert text string to unsigned integer - int uiDecimal = System.Convert.ToInt32(decval); + int uiDecimal = System.Convert.ToInt32(decval); return String.Format("{0:x2}", uiDecimal); } @@ -679,10 +719,10 @@ namespace NUS_Downloader for (int i = 0; i < length; i++) { - contentnames[i] = MakeProperLength(ConvertToHex(Convert.ToString(tmdfile[startoffset]))) + - MakeProperLength(ConvertToHex(Convert.ToString(tmdfile[startoffset + 1]))) + - MakeProperLength(ConvertToHex(Convert.ToString(tmdfile[startoffset + 2]))) + - MakeProperLength(ConvertToHex(Convert.ToString(tmdfile[startoffset + 3]))); + contentnames[i] = MakeProperLength(ConvertToHex(Convert.ToString(tmdfile[startoffset]))) + + MakeProperLength(ConvertToHex(Convert.ToString(tmdfile[startoffset + 1]))) + + MakeProperLength(ConvertToHex(Convert.ToString(tmdfile[startoffset + 2]))) + + MakeProperLength(ConvertToHex(Convert.ToString(tmdfile[startoffset + 3]))); startoffset += 36; } @@ -703,13 +743,13 @@ namespace NUS_Downloader for (int i = 0; i < length; i++) { contentsizes[i] = MakeProperLength(ConvertToHex(Convert.ToString(tmdfile[startoffset]))) + - MakeProperLength(ConvertToHex(Convert.ToString(tmdfile[startoffset + 1]))) + - MakeProperLength(ConvertToHex(Convert.ToString(tmdfile[startoffset + 2]))) + - MakeProperLength(ConvertToHex(Convert.ToString(tmdfile[startoffset + 3]))) + - MakeProperLength(ConvertToHex(Convert.ToString(tmdfile[startoffset + 4]))) + - MakeProperLength(ConvertToHex(Convert.ToString(tmdfile[startoffset + 5]))) + - MakeProperLength(ConvertToHex(Convert.ToString(tmdfile[startoffset + 6]))) + - MakeProperLength(ConvertToHex(Convert.ToString(tmdfile[startoffset + 7]))); + MakeProperLength(ConvertToHex(Convert.ToString(tmdfile[startoffset + 1]))) + + MakeProperLength(ConvertToHex(Convert.ToString(tmdfile[startoffset + 2]))) + + MakeProperLength(ConvertToHex(Convert.ToString(tmdfile[startoffset + 3]))) + + MakeProperLength(ConvertToHex(Convert.ToString(tmdfile[startoffset + 4]))) + + MakeProperLength(ConvertToHex(Convert.ToString(tmdfile[startoffset + 5]))) + + MakeProperLength(ConvertToHex(Convert.ToString(tmdfile[startoffset + 6]))) + + MakeProperLength(ConvertToHex(Convert.ToString(tmdfile[startoffset + 7]))); contentsizes[i] = TrimLeadingZeros(contentsizes[i]); /*contentsizes[i] = Convert.ToString(tmdfile[startoffset]) + Convert.ToString(tmdfile[startoffset + 1]) + @@ -741,7 +781,7 @@ namespace NUS_Downloader { for (int x = 0; x < 20; x++) { - contenthashes[(i * 20) + x] = tmdfile[startoffset + x]; + contenthashes[(i*20) + x] = tmdfile[startoffset + x]; } startoffset += 36; } @@ -762,9 +802,9 @@ namespace NUS_Downloader for (int i = 0; i < length; i++) { if (tmdfile[startoffset] == 0x80) - contenttypes[i] = (int)ContentTypes.Shared; + contenttypes[i] = (int) ContentTypes.Shared; else - contenttypes[i] = (int)ContentTypes.Normal; + contenttypes[i] = (int) ContentTypes.Normal; startoffset += 36; } @@ -844,7 +884,8 @@ namespace NUS_Downloader // Current directory... string currentdir = Directory.GetCurrentDirectory(); - if (!(currentdir.EndsWith(Path.DirectorySeparatorChar.ToString())) || !(currentdir.EndsWith(Path.AltDirectorySeparatorChar.ToString()))) + if (!(currentdir.EndsWith(Path.DirectorySeparatorChar.ToString())) || + !(currentdir.EndsWith(Path.AltDirectorySeparatorChar.ToString()))) currentdir += Path.DirectorySeparatorChar.ToString(); // Prevent crossthread issues @@ -855,7 +896,7 @@ namespace NUS_Downloader // Wii / DSi bool wiimode = (consoleCBox.SelectedIndex == 0); - + // Set UserAgent to Wii value generalWC.Headers.Add("User-Agent", "wii libnup/1.0"); @@ -896,10 +937,9 @@ namespace NUS_Downloader // Windows 7? if (IsWin7()) - { + { // Windows 7 Taskbar progress can be used. dlprogress.ShowInTaskbar = true; - } // Download TMD before the rest... @@ -912,7 +952,6 @@ namespace NUS_Downloader } catch (Exception ex) { - WriteStatus("Download Failed: " + tmdfull); WriteStatus(" - Reason: " + ex.Message.ToString().Replace("The remote server returned an error: ", "")); SetEnableforDownload(true); @@ -935,7 +974,8 @@ namespace NUS_Downloader if (ignoreticket.Checked == false) { WriteStatus("Download Failed: cetk"); - WriteStatus(" - Reason: " + ex.Message.ToString().Replace("The remote server returned an error: ", "")); + WriteStatus(" - Reason: " + + ex.Message.ToString().Replace("The remote server returned an error: ", "")); WriteStatus("You may be able to retrieve the contents by Ignoring the Ticket (Check below)"); SetEnableforDownload(true); downloadstartbtn.Text = "Start NUS Download!"; @@ -1066,7 +1106,7 @@ namespace NUS_Downloader { totalcontentsize += int.Parse(tmdsizes[i], System.Globalization.NumberStyles.HexNumber); } - WriteStatus("Total Size: " + (long)totalcontentsize + " bytes"); + WriteStatus("Total Size: " + (long) totalcontentsize + " bytes"); for (int i = 0; i < tmdcontents.Length; i++) { @@ -1079,13 +1119,15 @@ namespace NUS_Downloader } else { - DownloadNUSFile(titleid, tmdcontents[i], titledirectory, int.Parse(tmdsizes[i], System.Globalization.NumberStyles.HexNumber), wiimode); + DownloadNUSFile(titleid, tmdcontents[i], titledirectory, + int.Parse(tmdsizes[i], System.Globalization.NumberStyles.HexNumber), wiimode); } } catch (Exception ex) { WriteStatus("Download Failed: " + tmdcontents[i]); - WriteStatus(" - Reason: " + ex.Message.ToString().Replace("The remote server returned an error: ", "")); + WriteStatus(" - Reason: " + + ex.Message.ToString().Replace("The remote server returned an error: ", "")); SetEnableforDownload(true); downloadstartbtn.Text = "Start NUS Download!"; dlprogress.Value = 0; @@ -1094,14 +1136,16 @@ namespace NUS_Downloader } // Progress reporting advances... - downloadstartbtn.Text = "Content: (" + (i + 1) + Path.AltDirectorySeparatorChar.ToString() + contentstrnum + ")"; + downloadstartbtn.Text = "Content: (" + (i + 1) + Path.AltDirectorySeparatorChar.ToString() + + contentstrnum + ")"; currentcontentlocation += int.Parse(tmdsizes[i], System.Globalization.NumberStyles.HexNumber); // Decrypt stuff... if (decryptbox.Checked == true) { // Create content file holder - byte[] contbuf = FileLocationToByteArray(titledirectory + Path.DirectorySeparatorChar.ToString() + tmdcontents[i]); + byte[] contbuf = + FileLocationToByteArray(titledirectory + Path.DirectorySeparatorChar.ToString() + tmdcontents[i]); // IV (00+IDX+more000) byte[] iv = new byte[16]; @@ -1110,7 +1154,7 @@ namespace NUS_Downloader iv[x] = 0x00; } iv[1] = tmdindices[i]; - + initCrypt(iv, titlekey); /* Create decrypted file @@ -1120,7 +1164,10 @@ namespace NUS_Downloader decfs.Close(); WriteStatus(" - Decrypted: " + zeros + i.ToString("X2") + ".app"); */ - FileStream decfs = new FileStream(titledirectory + Path.DirectorySeparatorChar.ToString() + tmdcontents[i] + ".app", FileMode.Create); + FileStream decfs = + new FileStream( + titledirectory + Path.DirectorySeparatorChar.ToString() + tmdcontents[i] + ".app", + FileMode.Create); decfs.Write(Decrypt(contbuf), 0, int.Parse(tmdsizes[i], System.Globalization.NumberStyles.HexNumber)); decfs.Close(); WriteStatus(" - Decrypted: " + tmdcontents[i] + ".app"); @@ -1129,7 +1176,7 @@ namespace NUS_Downloader byte[] hash = new byte[20]; for (int x = 0; x < 20; x++) { - hash[x] = tmdhashes[(i * 20) + x]; + hash[x] = tmdhashes[(i*20) + x]; } byte[] deccont = Decrypt(contbuf); Array.Resize(ref deccont, int.Parse(tmdsizes[i], System.Globalization.NumberStyles.HexNumber)); @@ -1145,7 +1192,7 @@ namespace NUS_Downloader } } - dlprogress.Value = Convert.ToInt32(((currentcontentlocation / totalcontentsize) * 100)); + dlprogress.Value = Convert.ToInt32(((currentcontentlocation/totalcontentsize)*100)); } WriteStatus("NUS Download Finished."); @@ -1158,13 +1205,12 @@ namespace NUS_Downloader SetEnableforDownload(true); downloadstartbtn.Text = "Start NUS Download!"; dlprogress.Value = 0; - + if (IsWin7()) dlprogress.ShowInTaskbar = false; if (script_mode) statusbox.Text = ""; - } /// @@ -1182,7 +1228,9 @@ namespace NUS_Downloader if (titleversion.Text == "") titledirectory = Path.Combine(currentdir, titleidbox.Text + Path.DirectorySeparatorChar.ToString()); else - titledirectory = Path.Combine(currentdir, titleidbox.Text + "v" + titleversion.Text + Path.DirectorySeparatorChar.ToString()); + titledirectory = Path.Combine(currentdir, + titleidbox.Text + "v" + titleversion.Text + + Path.DirectorySeparatorChar.ToString()); // Keep local directory if present and checked out... if ((localuse.Checked) && (Directory.Exists(titledirectory))) @@ -1212,7 +1260,9 @@ namespace NUS_Downloader if (titleversion.Text == "") titledirectory = Path.Combine(currentdir, titleidbox.Text + Path.DirectorySeparatorChar.ToString()); else - titledirectory = Path.Combine(currentdir, titleidbox.Text + "v" + titleversion.Text + Path.DirectorySeparatorChar.ToString()); + titledirectory = Path.Combine(currentdir, + titleidbox.Text + "v" + titleversion.Text + + Path.DirectorySeparatorChar.ToString()); if (Directory.Exists(titledirectory)) Directory.Delete(titledirectory, true); @@ -1228,14 +1278,15 @@ namespace NUS_Downloader /// The placementdir. /// The sizeinbytes. /// if set to true [iswiititle]. - private void DownloadNUSFile(string titleid, string filename, string placementdir, int sizeinbytes, bool iswiititle) + private void DownloadNUSFile(string titleid, string filename, string placementdir, int sizeinbytes, + bool iswiititle) { // Create NUS URL... string nusfileurl; if (iswiititle) - nusfileurl = NUSURL + titleid + Path.AltDirectorySeparatorChar.ToString() + filename; + nusfileurl = WII_NUS_URL + titleid + Path.AltDirectorySeparatorChar.ToString() + filename; else - nusfileurl = DSiNUSURL + titleid + Path.AltDirectorySeparatorChar.ToString() + filename; + nusfileurl = DSI_NUS_URL + titleid + Path.AltDirectorySeparatorChar.ToString() + filename; WriteStatus("Grabbing " + filename + "..."); @@ -1247,7 +1298,7 @@ namespace NUS_Downloader generalWC.DownloadFile(nusfileurl, placementdir + filename); } - void StatusChange(string status) + private void StatusChange(string status) { WriteStatus(status); } @@ -1264,7 +1315,8 @@ namespace NUS_Downloader // Obtain Current Directory string currentdir = Directory.GetCurrentDirectory(); - if (!(currentdir.EndsWith(Path.DirectorySeparatorChar.ToString())) || !(currentdir.EndsWith(Path.AltDirectorySeparatorChar.ToString()))) + if (!(currentdir.EndsWith(Path.DirectorySeparatorChar.ToString())) || + !(currentdir.EndsWith(Path.AltDirectorySeparatorChar.ToString()))) currentdir += Path.DirectorySeparatorChar.ToString(); // Create instance of WAD Packing class @@ -1290,21 +1342,21 @@ namespace NUS_Downloader return; } packer.Certs = certsbuf; - + // Read TMD/TIK into Packer. packer.Ticket = FileLocationToByteArray(totaldirectory + Path.DirectorySeparatorChar.ToString() + @"cetk"); packer.TMD = FileLocationToByteArray(totaldirectory + Path.DirectorySeparatorChar.ToString() + tmdfilename); - + // Get the TMD variables in here instead... int contentcount = ContentCount(packer.TMD); string[] contentnames = GetContentNames(packer.TMD, contentcount); - + packer.tmdnames = GetContentNames(packer.TMD, contentcount); packer.tmdsizes = GetContentSizes(packer.TMD, contentcount); if (wadnamebox.Text.Contains("[v]") == true) wadnamebox.Text = wadnamebox.Text.Replace("[v]", "v" + titleversion.Text); - + if (!(String.IsNullOrEmpty(WAD_Saveas_Filename))) { packer.FileName = System.IO.Path.GetFileName(WAD_Saveas_Filename); @@ -1312,11 +1364,12 @@ namespace NUS_Downloader } else { - string wad_filename = totaldirectory + Path.DirectorySeparatorChar.ToString() + RemoveIllegalCharacters(wadnamebox.Text); + string wad_filename = totaldirectory + Path.DirectorySeparatorChar.ToString() + + RemoveIllegalCharacters(wadnamebox.Text); packer.Directory = totaldirectory; packer.FileName = System.IO.Path.GetFileName(wad_filename); } - + // Gather contents... byte[][] contents_array = new byte[contentcount][]; for (int a = 0; a < contentcount; a++) @@ -1324,10 +1377,10 @@ namespace NUS_Downloader contents_array[a] = FileLocationToByteArray(totaldirectory + contentnames[a]); } packer.Contents = contents_array; - + // Send operations over to the packer... packer.PackWAD(); - + // Delete contents now... if (deletecontentsbox.Checked) { @@ -1347,6 +1400,7 @@ namespace NUS_Downloader } } + /* /// /// Returns next 0x40 padded length. /// @@ -1361,13 +1415,13 @@ namespace NUS_Downloader while (remainder != 0) { thelength += 1; - remainder = thelength % 0x40; + remainder = thelength%0x40; } //WriteStatus("Initial Size: " + currentlength); //WriteStatus("0x40 Size: " + thelength); - return (long)thelength; + return (long) thelength; } /// @@ -1386,7 +1440,7 @@ namespace NUS_Downloader Array.Reverse(b); return b; - } + }*/ private void consoleCBox_SelectedIndexChanged(object sender, EventArgs e) { @@ -1448,7 +1502,7 @@ namespace NUS_Downloader if (IsWin7()) WriteStatus("Windows 7 Features: Enabled"); - + WriteStatus(""); WriteStatus("Special thanks to:"); WriteStatus(" * Crediar for his wadmaker tool + source, and for the advice!"); @@ -1460,7 +1514,7 @@ namespace NUS_Downloader WriteStatus(" * Wyatt O'Day for the Windows7ProgressBar Control."); WriteStatus(" * Napo7 for testing proxy usage."); } - + private void packbox_CheckedChanged(object sender, EventArgs e) { if (packbox.Checked == true) @@ -1474,7 +1528,6 @@ namespace NUS_Downloader wadnamebox.Enabled = false; wadnamebox.Text = ""; } - } private void titleidbox_TextChanged(object sender, EventArgs e) @@ -1578,7 +1631,7 @@ namespace NUS_Downloader /// /// A byte[]. /// - static public byte[] ComputeSHA(byte[] data) + public static byte[] ComputeSHA(byte[] data) { SHA1 sha = new SHA1CryptoServiceProvider(); // This is one implementation of the abstract class SHA1. @@ -1594,7 +1647,8 @@ namespace NUS_Downloader { // Directory stuff string currentdir = Directory.GetCurrentDirectory(); - if (!(currentdir.EndsWith(Path.DirectorySeparatorChar.ToString())) || !(currentdir.EndsWith(Path.AltDirectorySeparatorChar.ToString()))) + if (!(currentdir.EndsWith(Path.DirectorySeparatorChar.ToString())) || + !(currentdir.EndsWith(Path.AltDirectorySeparatorChar.ToString()))) currentdir += Path.DirectorySeparatorChar.ToString(); if (File.Exists(currentdir + keyfile) == true) @@ -1617,7 +1671,7 @@ namespace NUS_Downloader // Directory stuff string currentdir = Directory.GetCurrentDirectory(); //if (!(currentdir.EndsWith(Path.DirectorySeparatorChar.ToString())) || !(currentdir.EndsWith(Path.AltDirectorySeparatorChar.ToString()))) - //currentdir += Path.DirectorySeparatorChar.ToString(); + //currentdir += Path.DirectorySeparatorChar.ToString(); if (File.Exists(Path.Combine(currentdir, keyfile)) == true) { @@ -1676,7 +1730,7 @@ namespace NUS_Downloader xDoc.Load("database.xml"); // Variables - string[] XMLNodeTypes = new string[5] { "SYS", "IOS", "VC", "WW", "UPD" }; + string[] XMLNodeTypes = new string[5] {"SYS", "IOS", "VC", "WW", "UPD"}; int totalLength = xDoc.SelectNodes("/database/*").Count; int rnt = 0; @@ -1698,9 +1752,10 @@ namespace NUS_Downloader // Okay, so now report the progress... rnt = rnt + 1; - float currentProgress = ((float)rnt / (float)totalLength) * (float)100; - worker.ReportProgress(Convert.ToInt16(Math.Round(currentProgress))); - + float currentProgress = ((float) rnt/(float) totalLength)*(float) 100; + if (Convert.ToInt16(Math.Round(currentProgress))%10 == 0) + worker.ReportProgress(Convert.ToInt16(Math.Round(currentProgress))); + // Lol. XmlNodeList ChildrenOfTheNode = XMLSpecificNodeTypeList[x].ChildNodes; @@ -1716,7 +1771,8 @@ namespace NUS_Downloader break; case "titleIDs": updateScript = ChildrenOfTheNode[z].InnerText; - XMLToolStripItem.AccessibleDescription = updateScript; // TODO: Find somewhere better to put this. AND FAST. + XMLToolStripItem.AccessibleDescription = updateScript; + // TODO: Find somewhere better to put this. AND FAST. break; case "version": string[] versions = ChildrenOfTheNode[z].InnerText.Split(','); @@ -1727,13 +1783,15 @@ namespace NUS_Downloader { if (ChildrenOfTheNode[z].InnerText != "") { - ToolStripMenuItem regitem = (ToolStripMenuItem)XMLToolStripItem.DropDownItems[b]; + ToolStripMenuItem regitem = + (ToolStripMenuItem) XMLToolStripItem.DropDownItems[b]; regitem.DropDownItems.Add("Latest Version"); for (int y = 0; y < versions.Length; y++) { regitem.DropDownItems.Add("v" + versions[y]); } - regitem.DropDownItemClicked += new ToolStripItemClickedEventHandler(deepitem_clicked); + regitem.DropDownItemClicked += + new ToolStripItemClickedEventHandler(deepitem_clicked); } } } @@ -1755,7 +1813,8 @@ namespace NUS_Downloader { for (int y = 0; y < regions.Length; y++) { - XMLToolStripItem.DropDownItems.Add(RegionFromIndex(Convert.ToInt32(regions[y]), xDoc)); + XMLToolStripItem.DropDownItems.Add(RegionFromIndex(Convert.ToInt32(regions[y]), + xDoc)); } } break; @@ -1791,15 +1850,15 @@ namespace NUS_Downloader /// The type. /// The additionitem. /// The attributes. - void AddToolStripItemToStrip(int type, ToolStripMenuItem additionitem, XmlAttributeCollection attributes) + private void AddToolStripItemToStrip(int type, ToolStripMenuItem additionitem, XmlAttributeCollection attributes) { - Debug.WriteLine("Adding item..."); + Debug.WriteLine(String.Format("Adding item (Type: {0})...", type)); // Check if thread-safe if (this.InvokeRequired) { Debug.WriteLine("InvokeRequired..."); AddToolStripItemToStripCallback atsitsc = new AddToolStripItemToStripCallback(AddToolStripItemToStrip); - this.Invoke(atsitsc, new object[] { type, additionitem, attributes }); + this.Invoke(atsitsc, new object[] {type, additionitem, attributes}); return; } // Deal with VC list depth... @@ -1891,7 +1950,7 @@ namespace NUS_Downloader } } - void deepitem_clicked(object sender, ToolStripItemClickedEventArgs e) + private void deepitem_clicked(object sender, ToolStripItemClickedEventArgs e) { titleidbox.Text = e.ClickedItem.OwnerItem.OwnerItem.Text.Substring(0, 16); titleidbox.Text = titleidbox.Text.Replace("XX", e.ClickedItem.OwnerItem.Text.Substring(0, 2)); @@ -1912,11 +1971,14 @@ namespace NUS_Downloader } // Prepare StatusBox... - string titlename = e.ClickedItem.OwnerItem.OwnerItem.Text.Substring(19, (e.ClickedItem.OwnerItem.OwnerItem.Text.Length - 19)); + string titlename = e.ClickedItem.OwnerItem.OwnerItem.Text.Substring(19, + (e.ClickedItem.OwnerItem.OwnerItem.Text. + Length - 19)); statusbox.Text = " --- " + titlename + " ---"; // Check if a ticket is present... - if ((e.ClickedItem.OwnerItem.OwnerItem.Image) == (orange) || (e.ClickedItem.OwnerItem.OwnerItem.Image) == (redorange)) + if ((e.ClickedItem.OwnerItem.OwnerItem.Image) == (orange) || + (e.ClickedItem.OwnerItem.OwnerItem.Image) == (redorange)) { ignoreticket.Checked = true; WriteStatus("Note: This title has no ticket and cannot be packed/decrypted!"); @@ -1935,7 +1997,8 @@ namespace NUS_Downloader } // Check for danger item - if ((e.ClickedItem.OwnerItem.OwnerItem.Image) == (redgreen) || (e.ClickedItem.OwnerItem.OwnerItem.Image) == (redorange)) + if ((e.ClickedItem.OwnerItem.OwnerItem.Image) == (redgreen) || + (e.ClickedItem.OwnerItem.OwnerItem.Image) == (redorange)) { WriteStatus("\r\n" + e.ClickedItem.OwnerItem.OwnerItem.ToolTipText); } @@ -1970,7 +2033,7 @@ namespace NUS_Downloader wadnamebox.Text = wadnamebox.Text.Replace("[v]", "v" + titleversion.Text); } - void wwitem_regionclicked(object sender, ToolStripItemClickedEventArgs e) + private void wwitem_regionclicked(object sender, ToolStripItemClickedEventArgs e) { titleidbox.Text = e.ClickedItem.OwnerItem.Text.Substring(0, 16); titleversion.Text = ""; @@ -1979,7 +2042,7 @@ namespace NUS_Downloader // Prepare StatusBox... string titlename = e.ClickedItem.OwnerItem.Text.Substring(19, (e.ClickedItem.OwnerItem.Text.Length - 19)); statusbox.Text = " --- " + titlename + " ---"; - + // Check if a ticket is present... if ((e.ClickedItem.OwnerItem.Image) == (orange) || (e.ClickedItem.OwnerItem.Image) == (redorange)) { @@ -2006,14 +2069,15 @@ namespace NUS_Downloader } } - void upditem_itemclicked(object sender, ToolStripItemClickedEventArgs e) + private void upditem_itemclicked(object sender, ToolStripItemClickedEventArgs e) { WriteStatus("Preparing to run download script..."); Control.CheckForIllegalCrossThreadCalls = false; script_mode = true; statusbox.Text = ""; WriteStatus("Starting script download. Please be patient!"); - string[] NUS_Entries = e.ClickedItem.AccessibleDescription.Split('\n'); // TODO: Find somewhere better to put this. AND FAST! + string[] NUS_Entries = e.ClickedItem.AccessibleDescription.Split('\n'); + // TODO: Find somewhere better to put this. AND FAST! for (int i = 0; i < NUS_Entries.Length; i++) { WriteStatus(NUS_Entries[i]); @@ -2026,10 +2090,10 @@ namespace NUS_Downloader } - void sysitem_versionclicked(object sender, ToolStripItemClickedEventArgs e) + private void sysitem_versionclicked(object sender, ToolStripItemClickedEventArgs e) { titleidbox.Text = e.ClickedItem.OwnerItem.Text.Substring(0, 16); - + if (e.ClickedItem.Text != "Latest Version") { if (e.ClickedItem.Text.Contains("v")) @@ -2066,7 +2130,7 @@ namespace NUS_Downloader { ignoreticket.Checked = false; } - + // Change WAD name if packed is already checked... if (packbox.Checked) { @@ -2091,8 +2155,8 @@ namespace NUS_Downloader /// The index. /// XmlDocument with database inside /// Region desc - string RegionFromIndex(int index, XmlDocument databasexml) - { + private string RegionFromIndex(int index, XmlDocument databasexml) + { /* Typical Region XML * 41 (All/System) @@ -2157,8 +2221,8 @@ namespace NUS_Downloader /// /// removes the illegal chars /// legal string - private string RemoveIllegalCharacters(string databasestr) - { + private static string RemoveIllegalCharacters(string databasestr) + { // Database strings must contain filename-legal characters. foreach (char illegalchar in System.IO.Path.GetInvalidFileNameChars()) { @@ -2168,67 +2232,13 @@ namespace NUS_Downloader return databasestr; } - /// - /// Zeroes the signature in TMD/TIK. - /// - /// TMD/TIK - /// Zeroed TMD/TIK - private byte[] ZeroSignature(byte[] tmdortik) - { - // Write all 0x00 to signature... - // Sig starts at 0x04 in both TMD/TIK - for (int i = 0; i < 256; i++) - { - tmdortik[i + 4] = 0x00; - } - - WriteStatus(" - Signature Emptied..."); - return tmdortik; - } - - /// - /// Trucha Signs a TMD/TIK - /// - /// The tmdortik. - /// Fake-signed byte[] - private byte[] TruchaSign(byte[] tmdortik) - { - // Loop through 2 bytes worth of numbers until hash starts with 0x00... - // Padding starts at 0x104 in both TMD/TIK, seems like a good place to me... - - byte[] payload = new byte[2]; - byte[] hashobject = new byte[tmdortik.Length - 0x104]; - - for (int i = 0; i < 65535; i++) - { - payload = incrementAtIndex(payload, 1); - - tmdortik[0x104] = payload[0]; - tmdortik[0x105] = payload[1]; - - for (int x = 0; x < (tmdortik.Length - 0x104); x++) - { - hashobject[x] = tmdortik[0x104 + x]; - } - - if (ComputeSHA(hashobject)[0] == 0x00) - { - WriteStatus(" - Successfully Trucha Signed."); - return tmdortik; - } - } - - WriteStatus(" - Sign FAIL!"); - return tmdortik; - } - /// /// Increments at an index. /// /// The array. /// The index. /// - static public byte[] incrementAtIndex(byte[] array, int index) + public static byte[] incrementAtIndex(byte[] array, int index) { if (array[index] == byte.MaxValue) { @@ -2279,14 +2289,13 @@ namespace NUS_Downloader { try { - ToolStripMenuItem menuitem = (ToolStripMenuItem)item; + ToolStripMenuItem menuitem = (ToolStripMenuItem) item; menuitem.DropDown.ShowItemToolTips = false; } catch (Exception) { // Do nothing, some objects will not cast. } - } } @@ -2360,7 +2369,6 @@ namespace NUS_Downloader } } wadnamebox.Text = RemoveIllegalCharacters(wadnamebox.Text); - } /// @@ -2374,10 +2382,15 @@ namespace NUS_Downloader byte[] Ticket = new byte[0x2A4]; // RSA Signature Heading... - Ticket[1] = 0x01; Ticket[3] = 0x01; + Ticket[1] = 0x01; + Ticket[3] = 0x01; // Signature Issuer... (Root-CA00000001-XS00000003) - byte[] SignatureIssuer = new byte[0x1A] { 0x52, 0x6F, 0x6F, 0x74, 0x2D, 0x43, 0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x2D, 0x58, 0x53, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33 }; + byte[] SignatureIssuer = new byte[0x1A] + { + 0x52, 0x6F, 0x6F, 0x74, 0x2D, 0x43, 0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, + 0x30, 0x31, 0x2D, 0x58, 0x53, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x33 + }; for (int a = 0; a < 0x40; a++) { Ticket[0x140 + a] = SignatureIssuer[a]; @@ -2402,8 +2415,10 @@ namespace NUS_Downloader } // Misc FF... - Ticket[0x1E4] = 0xFF; Ticket[0x1E5] = 0xFF; - Ticket[0x1E6] = 0xFF; Ticket[0x1E7] = 0xFF; + Ticket[0x1E4] = 0xFF; + Ticket[0x1E5] = 0xFF; + Ticket[0x1E6] = 0xFF; + Ticket[0x1E7] = 0xFF; // Unknown 0x01... Ticket[0x221] = 0x01; @@ -2427,12 +2442,6 @@ namespace NUS_Downloader return System.Text.RegularExpressions.Regex.IsMatch(test, @"\A\b[0-9a-fA-F]+\b\Z"); } - - - - - - /// /// Pads to multiple of.... /// @@ -2441,17 +2450,12 @@ namespace NUS_Downloader /// Padded byte[] private byte[] PadToMultipleOf(byte[] src, int pad) { - int len = (src.Length + pad - 1) / pad * pad; - + int len = (src.Length + pad - 1)/pad*pad; + Array.Resize(ref src, len); return src; } - - - - - /// /// Determines whether OS is win7. /// @@ -2467,10 +2471,9 @@ namespace NUS_Downloader { byte[] resultArray = new byte[arrayLen]; - for(int i = arrayLen - 1 ; i >= 0; i--) + for (int i = arrayLen - 1; i >= 0; i--) { - resultArray[i] = (byte)((theInt >> (8 * i)) & 0xFF); - + resultArray[i] = (byte) ((theInt >> (8*i)) & 0xFF); } Array.Reverse(resultArray); @@ -2485,7 +2488,6 @@ namespace NUS_Downloader return resultArray; } - /// /// Does byte[] contain byte[]? @@ -2494,7 +2496,7 @@ namespace NUS_Downloader /// Small byte[] which may be in large one. /// messed up int[] with offsets. private int[] ByteArrayContainsByteArray(byte[] bigboy, byte[] littleman) - { + { // bigboy.Contains(littleman); // returns offset { cnt , ofst }; int[] offset = new int[5]; @@ -2552,7 +2554,9 @@ namespace NUS_Downloader databasedl.UseDefaultCredentials = true; } - string wiibrewsource = databasedl.DownloadString("http://www.wiibrew.org/wiki/NUS_Downloader/database?cachesmash=" + System.DateTime.Now.ToString()); + string wiibrewsource = + databasedl.DownloadString("http://www.wiibrew.org/wiki/NUS_Downloader/database?cachesmash=" + + System.DateTime.Now.ToString()); //statusbox.Refresh(); // Strip out HTML @@ -2561,14 +2565,15 @@ namespace NUS_Downloader // Shrink to fix only the database string startofdatabase = "<database v"; string endofdatabase = "</database>"; - wiibrewsource = wiibrewsource.Substring(wiibrewsource.IndexOf(startofdatabase), wiibrewsource.Length - wiibrewsource.IndexOf(startofdatabase)); + wiibrewsource = wiibrewsource.Substring(wiibrewsource.IndexOf(startofdatabase), + wiibrewsource.Length - wiibrewsource.IndexOf(startofdatabase)); wiibrewsource = wiibrewsource.Substring(0, wiibrewsource.IndexOf(endofdatabase) + endofdatabase.Length); // Fix ", <, >, and spaces - wiibrewsource = wiibrewsource.Replace("<","<"); - wiibrewsource = wiibrewsource.Replace(">",">"); - wiibrewsource = wiibrewsource.Replace(""",'"'.ToString()); - wiibrewsource = wiibrewsource.Replace(" "," "); // Shouldn't occur, but they happen... + wiibrewsource = wiibrewsource.Replace("<", "<"); + wiibrewsource = wiibrewsource.Replace(">", ">"); + wiibrewsource = wiibrewsource.Replace(""", '"'.ToString()); + wiibrewsource = wiibrewsource.Replace(" ", " "); // Shouldn't occur, but they happen... // Return parsed xml database... e.Result = wiibrewsource; @@ -2576,7 +2581,6 @@ namespace NUS_Downloader private void RetrieveNewDatabase_Completed(object sender, RunWorkerCompletedEventArgs e) { - string database = e.Result.ToString(); string currentversion = GetDatabaseVersion("database.xml"); string onlineversion = GetDatabaseVersion(database); @@ -2623,7 +2627,6 @@ namespace NUS_Downloader { WriteStatus("Database successfully updated!"); } - } private void updateDatabaseToolStripMenuItem_Click(object sender, EventArgs e) @@ -2654,7 +2657,9 @@ namespace NUS_Downloader /// public string SendSOAPRequest(string soap_xml) { - System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create("http://nus.shop.wii.com:80/nus/services/NetUpdateSOAP"); + System.Net.HttpWebRequest req = + (System.Net.HttpWebRequest) + System.Net.HttpWebRequest.Create("http://nus.shop.wii.com:80/nus/services/NetUpdateSOAP"); req.Method = "POST"; req.UserAgent = "wii libnup/1.0"; req.Headers.Add("SOAPAction", '"' + "urn:nus.wsapi.broadon.com/" + '"'); @@ -2697,7 +2702,7 @@ namespace NUS_Downloader try { string result; - System.Net.HttpWebResponse resp = (System.Net.HttpWebResponse)req.GetResponse(); + System.Net.HttpWebResponse resp = (System.Net.HttpWebResponse) req.GetResponse(); using (Stream responseStream = resp.GetResponseStream()) { @@ -2716,7 +2721,6 @@ namespace NUS_Downloader return ex.Message.ToString(); } - } private void emulateUpdate_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e) @@ -2725,7 +2729,7 @@ namespace NUS_Downloader statusbox.Text = ""; WriteStatus("Starting Wii System Update..."); - extrasStrip.Close(); + extrasStrip.Close(); string deviceID = "4362227770"; string messageID = "13198105123219138"; @@ -2743,15 +2747,18 @@ namespace NUS_Downloader RegionID: KOR, Country: KO; */ string soap_req = "\n" + - "\n\n" + - "1.0\n" + messageID + "\n" + deviceID + "\n" + - "" + RegionID + "\n" + CountryCode + "\n\n0000000100000001\n" + - "2\n\n\n0000000100000002\n" + - "33\n\n\n0000000100000009\n" + - "516\n\n" + attr + "\n\n" + - "\n\n"; + " xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"" + + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" + + "\n\n" + + "1.0\n" + messageID + "\n" + deviceID + + "\n" + + "" + RegionID + "\n" + CountryCode + + "\n\n0000000100000001\n" + + "2\n\n\n0000000100000002\n" + + "33\n\n\n0000000100000009\n" + + "516\n\n" + attr + + "\n\n" + + "\n\n"; WriteStatus(" - Sending SOAP Request to NUS..."); WriteStatus(" - Region: " + RegionID); @@ -2795,23 +2802,24 @@ namespace NUS_Downloader if ((File.Exists("database.xml") == true) && ((!(String.IsNullOrEmpty(NameFromDatabase(TitleID)))))) statusbox.Text += String.Format(" [{0}]", NameFromDatabase(TitleID)); - script_text += String.Format("{0} {1}\n", TitleID, DisplayBytes(NewIntegertoByteArray(Convert.ToInt32(Version), 2), "")); + script_text += String.Format("{0} {1}\n", TitleID, + DisplayBytes(NewIntegertoByteArray(Convert.ToInt32(Version), 2), "")); } WriteStatus(" - Outputting results to NUS script..."); // Current directory... string currentdir = Directory.GetCurrentDirectory(); - if (!(currentdir.EndsWith(Path.DirectorySeparatorChar.ToString())) || !(currentdir.EndsWith(Path.AltDirectorySeparatorChar.ToString()))) - currentdir += Path.DirectorySeparatorChar.ToString(); - if (!(Directory.Exists(currentdir + "scripts"))) + if (!(Directory.Exists(Path.Combine(currentdir, "scripts")))) { - Directory.CreateDirectory(currentdir + "scripts"); + Directory.CreateDirectory(Path.Combine(currentdir, "scripts")); WriteStatus(" - Created 'scripts\' directory."); } string time = RemoveIllegalCharacters(DateTime.Now.ToShortTimeString()); - File.WriteAllText(String.Format(currentdir + "scripts\\{0}_Update_{1}_{2}_{3} {4}.nus", RegionID, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Year, time), script_text); + File.WriteAllText( + String.Format(Path.Combine(currentdir, "scripts\\{0}_Update_{1}_{2}_{3} {4}.nus"), RegionID, + DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Year, time), script_text); WriteStatus(" - Script written!"); WriteStatus(" - Run this script if you feel like downloading the update!"); } @@ -2860,7 +2868,8 @@ namespace NUS_Downloader } // Search for cert_CA - if ((!(tmdortik.Length < 0x400)) && ((Convert.ToBase64String(ComputeSHA(cert_CA)) != Convert.ToBase64String(cert_CA_sha1)))) + if ((!(tmdortik.Length < 0x400)) && + ((Convert.ToBase64String(ComputeSHA(cert_CA)) != Convert.ToBase64String(cert_CA_sha1)))) { for (int a = 0; a < (tmdortik.Length - 0x400); a++) { @@ -2924,7 +2933,7 @@ namespace NUS_Downloader xDoc.Load("database.xml"); // Variables - string[] XMLNodeTypes = new string[4] { "SYS", "IOS", "VC", "WW" }; + string[] XMLNodeTypes = new string[4] {"SYS", "IOS", "VC", "WW"}; // Loop through XMLNodeTypes for (int i = 0; i < XMLNodeTypes.Length; i++) // FOR THE FOUR TYPES OF NODES @@ -2945,7 +2954,9 @@ namespace NUS_Downloader case "titleID": if (ChildrenOfTheNode[z].InnerText == titleid) found_it = true; - else if ((ChildrenOfTheNode[z].InnerText.Substring(0, 14) + "XX") == (titleid.Substring(0, 14) + "XX") && (titleid.Substring(0, 14) != "00000001000000")) + else if ((ChildrenOfTheNode[z].InnerText.Substring(0, 14) + "XX") == + (titleid.Substring(0, 14) + "XX") && + (titleid.Substring(0, 14) != "00000001000000")) found_it = true; else found_it = false; @@ -2955,7 +2966,7 @@ namespace NUS_Downloader } } - if (found_it) + if (found_it) { for (int z = 0; z < ChildrenOfTheNode.Count; z++) // FOR EACH CHILD NODE { @@ -2979,32 +2990,24 @@ namespace NUS_Downloader deletecontentsbox.Enabled = packbox.Enabled; } - private void saveaswadbox_Paint(object sender, PaintEventArgs e) - { - //e.Graphics. - /*Rectangle rect = new Rectangle(0, 0, 16, 16); - if (saveaswadbox.Checked) - e.Graphics.DrawImageUnscaledAndClipped(green, rect); - else - e.Graphics.DrawImageUnscaled(orange, -7, -5); */ - } - private void SaveProxyBtn_Click(object sender, EventArgs e) { // Current directory... string currentdir = Directory.GetCurrentDirectory(); - if (!(currentdir.EndsWith(Path.DirectorySeparatorChar.ToString())) || !(currentdir.EndsWith(Path.AltDirectorySeparatorChar.ToString()))) - currentdir += Path.DirectorySeparatorChar.ToString(); - if ((String.IsNullOrEmpty(ProxyURL.Text)) && (String.IsNullOrEmpty(ProxyUser.Text)) && ((File.Exists(currentdir + "proxy.txt")))) + if ((String.IsNullOrEmpty(ProxyURL.Text)) && (String.IsNullOrEmpty(ProxyUser.Text)) && + ((File.Exists(Path.Combine(currentdir, "proxy.txt"))))) { - File.Delete(currentdir + "proxy.txt"); + File.Delete(Path.Combine(currentdir, "proxy.txt")); proxyBox.Visible = false; - proxy_usr = ""; proxy_url = ""; proxy_pwd = ""; + proxy_usr = ""; + proxy_url = ""; + proxy_pwd = ""; WriteStatus("Proxy settings deleted!"); return; } - else if ((String.IsNullOrEmpty(ProxyURL.Text)) && (String.IsNullOrEmpty(ProxyUser.Text)) && ((!(File.Exists(currentdir + "proxy.txt"))))) + else if ((String.IsNullOrEmpty(ProxyURL.Text)) && (String.IsNullOrEmpty(ProxyUser.Text)) && + ((!(File.Exists(Path.Combine(currentdir, "proxy.txt")))))) { proxyBox.Visible = false; WriteStatus("No proxy settings saved!"); @@ -3027,15 +3030,17 @@ namespace NUS_Downloader if (!(String.IsNullOrEmpty(proxy_file))) { - File.WriteAllText(currentdir + "proxy.txt", proxy_file); + File.WriteAllText(Path.Combine(currentdir, "proxy.txt"), proxy_file); WriteStatus("Proxy settings saved!"); } proxyBox.Visible = false; SetAllEnabled(false); - ProxyVerifyBox.Visible = true; ProxyVerifyBox.Enabled = true; - ProxyPwdBox.Enabled = true; SaveProxyBtn.Enabled = true; + ProxyVerifyBox.Visible = true; + ProxyVerifyBox.Enabled = true; + ProxyPwdBox.Enabled = true; + SaveProxyBtn.Enabled = true; ProxyVerifyBox.Select(); } @@ -3043,14 +3048,12 @@ namespace NUS_Downloader { // Current directory... string currentdir = Directory.GetCurrentDirectory(); - if (!(currentdir.EndsWith(Path.DirectorySeparatorChar.ToString())) || !(currentdir.EndsWith(Path.AltDirectorySeparatorChar.ToString()))) - currentdir += Path.DirectorySeparatorChar.ToString(); // Check for Proxy Settings file... - if (File.Exists(currentdir + "proxy.txt") == true) + if (File.Exists(Path.Combine(currentdir, "proxy.txt")) == true) { - string[] proxy_file = File.ReadAllLines(currentdir + "proxy.txt"); - + string[] proxy_file = File.ReadAllLines(Path.Combine(currentdir, "proxy.txt")); + ProxyURL.Text = proxy_file[0]; if (proxy_file.Length > 1) { @@ -3077,23 +3080,21 @@ namespace NUS_Downloader private void ProxyAssistBtn_Click(object sender, EventArgs e) { MessageBox.Show("If you are behind a proxy, set these settings to get through to NUS." + - " If you have an alternate port for accessing your proxy, add ':' followed by the port." + - " You will be prompted for your password each time you run NUSD, for privacy purposes."); + " If you have an alternate port for accessing your proxy, add ':' followed by the port." + + " You will be prompted for your password each time you run NUSD, for privacy purposes."); } private void loadNUSScriptToolStripMenuItem_Click(object sender, EventArgs e) { // Current directory... string currentdir = Directory.GetCurrentDirectory(); - if (!(currentdir.EndsWith(Path.DirectorySeparatorChar.ToString())) || !(currentdir.EndsWith(Path.AltDirectorySeparatorChar.ToString()))) - currentdir += Path.DirectorySeparatorChar.ToString(); // Open a NUS script. OpenFileDialog ofd = new OpenFileDialog(); ofd.Multiselect = false; ofd.Filter = "NUS Scripts|*.nus|All Files|*.*"; - if (Directory.Exists(currentdir + "scripts")) - ofd.InitialDirectory = currentdir + "scripts"; + if (Directory.Exists(Path.Combine(currentdir, "scripts"))) + ofd.InitialDirectory = Path.Combine(currentdir, "scripts"); ofd.Title = "Load a NUS/Wiimpersonator script."; if (ofd.ShowDialog() != DialogResult.Cancel) @@ -3130,14 +3131,20 @@ namespace NUS_Downloader for (int a = 0; a < NUS_Entries.Length; a++) { // Download the title - WriteStatus(String.Format("===== Running Download ({0}/{1}) =====", a+1, NUS_Entries.Length)); + WriteStatus(String.Format("===== Running Download ({0}/{1}) =====", a + 1, NUS_Entries.Length)); string[] title_info = NUS_Entries[a].Split(' '); // don't let the delete issue reappear... if (string.IsNullOrEmpty(title_info[0])) break; titleidbox.Text = title_info[0]; - titleversion.Text = Convert.ToString(256*(byte.Parse(title_info[1].Substring(0, 2), System.Globalization.NumberStyles.HexNumber))); - titleversion.Text = Convert.ToString(Convert.ToInt32(titleversion.Text) + byte.Parse(title_info[1].Substring(2, 2), System.Globalization.NumberStyles.HexNumber)); + titleversion.Text = + Convert.ToString(256* + (byte.Parse(title_info[1].Substring(0, 2), + System.Globalization.NumberStyles.HexNumber))); + titleversion.Text = + Convert.ToString(Convert.ToInt32(titleversion.Text) + + byte.Parse(title_info[1].Substring(2, 2), + System.Globalization.NumberStyles.HexNumber)); button3_Click("Scripter", EventArgs.Empty); @@ -3155,7 +3162,7 @@ namespace NUS_Downloader private void getCommonKeyMenuItem_Click(object sender, EventArgs e) { WriteStatus("Preparing to retrieve common key..."); - + // Begin the epic grab for freedom WebClient databasedl = new WebClient(); statusbox.Refresh(); @@ -3191,14 +3198,14 @@ namespace NUS_Downloader // Find our start point string startofcommonkey = "Common key ("; - keyspostsource = keyspostsource.Substring(keyspostsource.IndexOf(startofcommonkey) + startofcommonkey.Length, 32); + keyspostsource = keyspostsource.Substring( + keyspostsource.IndexOf(startofcommonkey) + startofcommonkey.Length, 32); WriteStatus("Got the common key as: " + keyspostsource); byte[] commonkey = HexStringToByteArray(keyspostsource); if (WriteCommonKey("key.bin", commonkey)) { BootChecks(); } - } public static string ByteArrayToHexString(byte[] Bytes) @@ -3208,8 +3215,8 @@ namespace NUS_Downloader foreach (byte B in Bytes) { - Result.Append(HexAlphabet[(int)(B >> 4)]); - Result.Append(HexAlphabet[(int)(B & 0xF)]); + Result.Append(HexAlphabet[(int) (B >> 4)]); + Result.Append(HexAlphabet[(int) (B & 0xF)]); } return Result.ToString(); @@ -3217,23 +3224,21 @@ namespace NUS_Downloader public static byte[] HexStringToByteArray(string Hex) { - byte[] Bytes = new byte[Hex.Length / 2]; - int[] HexValue = new int[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0B, 0x0C, 0x0D, - 0x0E, 0x0F }; + byte[] Bytes = new byte[Hex.Length/2]; + int[] HexValue = new int[] + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0B, 0x0C, 0x0D, + 0x0E, 0x0F + }; for (int x = 0, i = 0; i < Hex.Length; i += 2, x += 1) { - Bytes[x] = (byte)(HexValue[Char.ToUpper(Hex[i + 0]) - '0'] << 4 | - HexValue[Char.ToUpper(Hex[i + 1]) - '0']); + Bytes[x] = (byte) (HexValue[Char.ToUpper(Hex[i + 0]) - '0'] << 4 | + HexValue[Char.ToUpper(Hex[i + 1]) - '0']); } return Bytes; } - - - - - } -} +} \ No newline at end of file