diff --git a/NUS Downloader/Form1.Designer.cs b/NUS Downloader/Form1.Designer.cs
index 787afe0..defd3f7 100644
--- a/NUS Downloader/Form1.Designer.cs
+++ b/NUS Downloader/Form1.Designer.cs
@@ -91,7 +91,6 @@
this.button5 = new System.Windows.Forms.Button();
this.button6 = new System.Windows.Forms.Button();
this.button7 = new System.Windows.Forms.Button();
- this.label12 = new System.Windows.Forms.Label();
this.shamelessvariablelabel = new System.Windows.Forms.Label();
this.button3 = new System.Windows.Forms.Button();
this.contentsEdit = new System.Windows.Forms.ListBox();
@@ -695,16 +694,6 @@
this.button7.UseVisualStyleBackColor = true;
this.button7.Click += new System.EventHandler(this.button7_Click);
//
- // label12
- //
- this.label12.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
- this.label12.Location = new System.Drawing.Point(239, 465);
- this.label12.Name = "label12";
- this.label12.Size = new System.Drawing.Size(23, 15);
- this.label12.TabIndex = 29;
- this.label12.Text = resources.GetString("label12.Text");
- this.label12.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
- //
// shamelessvariablelabel
//
this.shamelessvariablelabel.AutoSize = true;
@@ -896,7 +885,6 @@
this.Controls.Add(this.button17);
this.Controls.Add(this.button3);
this.Controls.Add(this.shamelessvariablelabel);
- this.Controls.Add(this.label12);
this.Controls.Add(this.button1);
this.Controls.Add(this.ticketgpbox);
this.Controls.Add(this.button5);
@@ -1007,7 +995,6 @@
private System.Windows.Forms.TextBox timelimitsecs;
private System.Windows.Forms.Label label11;
private System.Windows.Forms.Button button7;
- private System.Windows.Forms.Label label12;
private System.Windows.Forms.Label shamelessvariablelabel;
private System.Windows.Forms.Button button3;
private System.Windows.Forms.ListBox contentsEdit;
diff --git a/NUS Downloader/Form1.cs b/NUS Downloader/Form1.cs
index d4b0808..140323e 100644
--- a/NUS Downloader/Form1.cs
+++ b/NUS Downloader/Form1.cs
@@ -2287,7 +2287,7 @@ namespace NUS_Downloader
private void button8_Click(object sender, EventArgs e)
{
// Move selected content upwards (down an index)...
- if (contentsEdit.SelectedIndex < 0)
+ if (contentsEdit.SelectedIndex <= 0)
return;
int sel_idx = contentsEdit.SelectedIndex;
@@ -2465,7 +2465,7 @@ namespace NUS_Downloader
contents[c].Type[0] = 0x00;
// Pad to be 16 byte aligned
- contentbytes = AlignByteArray(contentbytes, 16);
+ contentbytes = PadToMultipleOf(contentbytes, 16);
// Encrypt with correct index IV/titlekey
byte[] ivindex = new byte[16];
@@ -2526,15 +2526,16 @@ namespace NUS_Downloader
}
byte[] decContent = Decrypt(contentbytes);
- Array.Resize(ref decContent, int.Parse(tmdsizes[c], System.Globalization.NumberStyles.HexNumber));
+ Array.Resize(ref decContent, int.Parse(tmdsizes[thiscontentidx], System.Globalization.NumberStyles.HexNumber));
if ((Convert.ToBase64String(ComputeSHA(decContent))) == Convert.ToBase64String(hash))
{
- WriteStatus(" - Hash Check: Content is Unchanged...");
+ WriteStatus(" - Hash Check: Content is Unchanged...");
contents[c].SHAHash = hash;
+ WriteStatus("HASH: " + DisplayBytes(hash, ""));
}
else
{
- WriteStatus(" - Hash Check: Content changed (probably REALLY BAD)...");
+ WriteStatus(" - Hash Check: Content changed (probably REALLY BAD)...");
contents[c].SHAHash = ComputeSHA(decContent);
}
@@ -2549,7 +2550,8 @@ namespace NUS_Downloader
ivindex[1] = (byte)c;
// Pad back to 0x16 alignment
- AlignByteArray(decContent, 0x16);
+ //AlignByteArray(decContent, 0x16
+ decContent = PadToMultipleOf(decContent, 16);
initCrypt(newiv, dtitlekey);
@@ -2576,10 +2578,10 @@ namespace NUS_Downloader
contents[c].ContentID[3] = byte.Parse(filename.Substring(6, 2), System.Globalization.NumberStyles.HexNumber);
contents[c].Index = new byte[2];
- contents[c].Index = InttoByteArray(c, 2); // TODOTODOTODO
+ contents[c].Index = NewIntegertoByteArray(c, 2);
contents[c].Type = new byte[2];
- contents[c].Type[0] = 0x01;
+ contents[c].Type[1] = 0x01;
if (contentsEdit.Items[c].ToString().Contains(" [S]"))
contents[c].Type[0] = 0x80;
else
@@ -2587,12 +2589,13 @@ namespace NUS_Downloader
contents[c].Size = new byte[8];
// TODOCHECK THIS OVER
- contents[c].Size = InttoByteArray(contentbytes.Length, 8);
+ contents[c].Size = NewIntegertoByteArray(contentbytes.Length, 8);
}
+ }
// Write all this stuff to the TMD...
byte[] contentSection = new byte[contents.Length * 36];
-
+ //TODO: At some points we don't have a hash... see above?
for (int h = 0; h < contents.Length; h++)
{
for (int i = 0; i < contents[h].ContentID.Length; i++)
@@ -2612,12 +2615,12 @@ namespace NUS_Downloader
for (int l = 0; l < contents[h].Size.Length; l++)
{
- contentSection[(h * 36) + (contents[h].ContentID.Length + contents[h].Index.Length + contents[h].Type.Length + l)] = contents[h].Type[l];
+ contentSection[(h * 36) + (contents[h].ContentID.Length + contents[h].Index.Length + contents[h].Type.Length + l)] = contents[h].Size[l];
}
for (int m = 0; m < contents[h].SHAHash.Length; m++)
{
- contentSection[(h * 36) + (contents[h].ContentID.Length + contents[h].Index.Length + contents[h].Type.Length + contents[h].Size.Length + m)] = contents[h].Type[m];
+ contentSection[(h * 36) + (contents[h].ContentID.Length + contents[h].Index.Length + contents[h].Type.Length + contents[h].Size.Length + m)] = contents[h].SHAHash[m];
}
}
@@ -2633,30 +2636,46 @@ namespace NUS_Downloader
FileStream testtmd = new FileStream(fileinfo[0] + fileinfo[1], FileMode.Open);
testtmd.Write(tmd, 0, tmd.Length);
testtmd.Close();
- }
+
}
- // Pad Byte[] to specific alignment...
+ /* Pad Byte[] to specific alignment...
private byte[] AlignByteArray(byte[] content, int alignto)
{
long thelength = content.Length - 1;
- long remainder = 1;
+ long remainder = thelength % alignto;
while (remainder != 0)
{
thelength += 1;
remainder = thelength % alignto;
}
-
+ // DEBUG:
+ WriteStatus("Aligning by: " + alignto + " ... New Length: " + thelength);
+ WriteStatus(" Dif: " + (thelength - content.Length));
Array.Resize(ref content, (int)thelength);
return content;
+ } */
+
+ private byte[] PadToMultipleOf(byte[] src, int pad)
+ {
+ int len = (src.Length + pad - 1) / pad * pad;
+
+ // DEBUG:
+ WriteStatus("New Length: " + len);
+ WriteStatus("Dif: " + (len - src.Length));
+
+ Array.Resize(ref src, len);
+ return src;
}
+
private void button17_Click(object sender, EventArgs e)
{
// Move groupbox to display title modder...
contentModBox.Location = new Point(278, 12);
contentModBox.Visible = true;
+ contentModBox.BringToFront();
}
private void button13_Click(object sender, EventArgs e)
@@ -2680,5 +2699,30 @@ namespace NUS_Downloader
{
return (Environment.OSVersion.VersionString.Contains("6.1") == true);
}
+
+ private byte[] NewIntegertoByteArray(int theInt, int arrayLen)
+ {
+ byte[] resultArray = new byte[arrayLen];
+
+ for(int i = arrayLen - 1 ; i >= 0; i--)
+ {
+ resultArray[i] = (byte)((theInt >> (8 * i)) & 0xFF);
+
+ }
+ Array.Reverse(resultArray);
+
+ // Fix duplication, rewrite extra to 0x00;
+ if (arrayLen > 4)
+ {
+ for (int i = 0; i < (arrayLen - 4); i++)
+ {
+ resultArray[i] = 0x00;
+ }
+ }
+
+ // DEBUG
+ WriteStatus("byte[] result: " + DisplayBytes(resultArray, " "));
+ return resultArray;
+ }
}
}
diff --git a/NUS Downloader/Form1.resx b/NUS Downloader/Form1.resx
index d63ad55..6ef1cbc 100644
--- a/NUS Downloader/Form1.resx
+++ b/NUS Downloader/Form1.resx
@@ -123,14 +123,6 @@
159, 17
-
- Notice:
-
-* Fake signed content requires an IOS with the fake signing bug to install/use.
-* Be careful with Ticket values, they are best left alone.
-* Enter values in decimal, not hexadecimal. Exception: Title ID.
-* Always have a brick restoration method in place (BootMii boot2).
-
@@ -261,7 +253,7 @@
XTesb3QPLh88M+QwdP6m681Lt7xuXbu94vbgcOjwnZHokdE77DtTd1PuvriXeW/h/sYH6AdFD6UeVjxS
fNTws+7PbaOWo6fHXMf6Hwc/vj/OGn/2S8Yv7ycKnpCfVEyqTDZPmU2dmnafvvF05dOJZ+nPFmYKf5X+
tfa5zvMffnP8rX82YnbiBf/Fp99LXsq/PPRq2aueuYC5R69TXy/MF72Rf3P4LeNt37vwd5MLWe+x7ys/
- 6H7o/ujz8cGn1E+f/gUDmPP8usTo0wAAAAlwSFlzAAALEAAACxABrSO9dQAAAntJREFUWEftl6GOgkEM
+ 6H7o/ujz8cGn1E+f/gUDmPP8usTo0wAAAAlwSFlzAAALDwAACw8BkvkDpQAAAntJREFUWEftl6GOgkEM
hHlwDAKHw+EwKCQWgcOikQjO8Ax795FMMtf0390EfsKRExsC2+3OtJ1umZRSJp+4PpIUiXorYrfb7QdT
XkG1vexMF7Gv67Vo1cr2crmU8/k8CI6zAJQvgeXMarUqy+Wy7Pf7X+d973A4VH07tiYxHHOh1vF4TJ3z
+2KxKPP5vGy329QG4iKAPwHdbDZlOp2W2Wx29+HBWa/Xg3u1IDeJEV1AcDErAw1g2QCOlQXgdDrd90SC
@@ -322,7 +314,7 @@
XTesb3QPLh88M+QwdP6m681Lt7xuXbu94vbgcOjwnZHokdE77DtTd1PuvriXeW/h/sYH6AdFD6UeVjxS
fNTws+7PbaOWo6fHXMf6Hwc/vj/OGn/2S8Yv7ycKnpCfVEyqTDZPmU2dmnafvvF05dOJZ+nPFmYKf5X+
tfa5zvMffnP8rX82YnbiBf/Fp99LXsq/PPRq2aueuYC5R69TXy/MF72Rf3P4LeNt37vwd5MLWe+x7ys/
- 6H7o/ujz8cGn1E+f/gUDmPP8usTo0wAAAAlwSFlzAAALEAAACxABrSO9dQAAAwJJREFUWEfdmNG1IUEQ
+ 6H7o/ujz8cGn1E+f/gUDmPP8usTo0wAAAAlwSFlzAAALDwAACw8BkvkDpQAAAwJJREFUWEfdmNG1IUEQ
hrEBIAIyQASIgI1giYCzASADIkAEiAARLBFgA1g874Ne3+ypuT013YN73Qf3Yc7M9HRX1V/1199NyhiT
+orXlwRFoV4S2GazMcvl0hwOhysGN+NeCli/3zfFYvFajpRJp9PBnff5fB4D+DLA2u12AESuWq0WAdjp
/oyAewlgVMoG1Ww2zeVyMeVyORxPpzJmtVqF4EJg+/3eYKDX6wX3wWAQPvOuL76Px2OzXq+9PHfxHz+T
diff --git a/NUS Downloader/NUS Downloader.csproj b/NUS Downloader/NUS Downloader.csproj
index da16609..23cf61e 100644
--- a/NUS Downloader/NUS Downloader.csproj
+++ b/NUS Downloader/NUS Downloader.csproj
@@ -63,15 +63,18 @@
Form
+ PreserveNewest
Form1.cs
+ PreserveNewest
Form1.cs
Designer
+ PreserveNewest
ResXFileCodeGenerator