Merge pull request #51 from zzpong/master

master_key_0a supported, fix issue #50 and more
This commit is contained in:
Blake 2020-03-08 12:30:22 -04:00 committed by GitHub
commit c854cd45a3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 53 additions and 24 deletions

View file

@ -11,9 +11,9 @@ using System.Runtime.InteropServices;
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("XCI Explorer")]
[assembly: AssemblyCopyright("Copyright © 2019")]
[assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("206c6c47-87b1-477f-b6e6-f7e7c1a92f8f")]
[assembly: AssemblyFileVersion("1.4.9")]
[assembly: AssemblyVersion("1.4.9")]
[assembly: AssemblyFileVersion("1.5.0")]
[assembly: AssemblyVersion("1.5.0")]

View file

@ -7,7 +7,7 @@
<OutputType>WinExe</OutputType>
<AssemblyName>XCI-Explorer</AssemblyName>
<TargetFrameworkIdentifier>.NETFramework</TargetFrameworkIdentifier>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
<NuGetPackageImportStamp>

View file

@ -67,7 +67,7 @@ namespace XCI_Explorer
{
using (var client = new WebClient())
{
client.DownloadFile(Util.Base64Decode("aHR0cHM6Ly9wYXN0ZWJpbi5jb20vcmF3L3dZbUxUTkxx"), "keys.txt");
client.DownloadFile(Util.Base64Decode("aHR0cHM6Ly9wYXN0ZWJpbi5jb20vcmF3L2NWR3JQSHp6"), "keys.txt");
}
}
@ -124,6 +124,7 @@ namespace XCI_Explorer
where x.Length > 1
select x).ToDictionary((string[] x) => x[0].Trim(), (string[] x) => x[1]);
Mkey = "master_key_";
string MkeyL = "master_key_";
if (NCA.NCA_Headers[0].MasterKeyRev == 0 || NCA.NCA_Headers[0].MasterKeyRev == 1)
{
Mkey += "00";
@ -131,12 +132,18 @@ namespace XCI_Explorer
else if (NCA.NCA_Headers[0].MasterKeyRev < 17)
{
int num = NCA.NCA_Headers[0].MasterKeyRev - 1;
Mkey = Mkey + "0" + num.ToString();
string capchar = num.ToString("X");
string lowchar = capchar.ToLower();
Mkey = Mkey + "0" + capchar;
MkeyL = MkeyL + "0" + lowchar;
}
else if (NCA.NCA_Headers[0].MasterKeyRev >= 17)
{
int num2 = NCA.NCA_Headers[0].MasterKeyRev - 1;
string capchar = num2.ToString("X");
string lowchar = capchar.ToLower();
Mkey += num2.ToString();
MkeyL += num2.ToString();
}
try
{
@ -144,10 +151,18 @@ namespace XCI_Explorer
return true;
}
catch
{
try
{
MkeyL = dictionary[MkeyL].Replace(" ", "");
return true;
}
catch
{
return false;
}
}
}
private void ProcessFile()
{
@ -188,7 +203,7 @@ namespace XCI_Explorer
MessageBox.Show("File is corrupt or unsupported.");
}
}
catch(Exception e)
catch (Exception e)
{
MessageBox.Show("Error: " + e.ToString() + "\nFile is corrupt or unsupported.");
}
@ -634,15 +649,24 @@ namespace XCI_Explorer
else if (strArray[0] == "Master Key Revision")
{
string MasterKey = strArray[1].Trim();
int keyblob;
if (MasterKey.Contains("Unknown"))
{
int keyblob;
if (int.TryParse(new string(MasterKey.TakeWhile(Char.IsDigit).ToArray()), out keyblob))
{
MasterKey = Util.GetMkey((byte)(keyblob + 1)).Replace("MasterKey", "");
}
}
TB_MKeyRev.Text = "MasterKey" + MasterKey;
}
else
{
MasterKey = MasterKey.Split(new char[2] { 'x', ' ' })[1];
keyblob = Convert.ToInt32(MasterKey, 16);
MasterKey = Util.GetMkey((byte)(keyblob + 1));
TB_MKeyRev.Text = MasterKey;
}
break;
}
}
@ -650,10 +674,19 @@ namespace XCI_Explorer
process.Close();
}
catch { }
if (Directory.Exists("tmp"))
try
{
File.Delete("meta");
Directory.Delete("data", true);
}
catch { }
try
{
Directory.Delete("tmp", true);
}
catch { }
TB_Capacity.Text = "eShop";
@ -684,15 +717,12 @@ namespace XCI_Explorer
if (SecureName[si].EndsWith(".cnmt.nca"))
{
if (File.Exists("meta"))
try
{
File.Delete("meta");
}
if (Directory.Exists("data"))
{
Directory.Delete("data", true);
}
catch { }
using (FileStream fileStream2 = File.OpenWrite("meta"))
{
@ -755,15 +785,12 @@ namespace XCI_Explorer
if (ncaTarget.Contains(SecureName[si]))
{
if (File.Exists("meta"))
try
{
File.Delete("meta");
}
if (Directory.Exists("data"))
{
Directory.Delete("data", true);
}
catch { }
using (FileStream fileStream2 = File.OpenWrite("meta"))
{

View file

@ -10,6 +10,8 @@ namespace XCI_Explorer
{
switch (id)
{
case 250:
return "1GB";
case 248:
return "2GB";
case 240:
@ -51,7 +53,7 @@ namespace XCI_Explorer
case 10:
return "MasterKey9 (9.0.0-9.0.1)";
case 11:
return "MasterKey10 (?)";
return "MasterKey10 (9.1.0-9.2.0)";
case 12:
return "MasterKey11 (?)";
case 13:

View file

@ -1,3 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2"/></startup></configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/></startup></configuration>