Removed old code, changed target framework to latest

This commit is contained in:
StudentBlake 2019-04-14 14:10:10 -04:00
parent ee752c1e3c
commit ae0ff7a7dd
6 changed files with 18 additions and 153 deletions

View file

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

View file

@ -5,7 +5,7 @@
View contents of XCI files and more!
## Features
* View metadata
* View metadata for XCI and NSP files
* Explore partitions
* Check NCA hashes
* Extract NCA
@ -13,18 +13,18 @@ View contents of XCI files and more!
Main | Partitions
:-------------------------:|:-------------------------:
![main](https://i.imgur.com/JvmhkPW.jpg) | ![partitions](https://i.imgur.com/x5Kqp9I.jpg)
![main](https://cdn.discordapp.com/attachments/377518386826969088/567048477058662401/1.JPG) | ![partitions](https://cdn.discordapp.com/attachments/377518386826969088/567048488823554051/2.JPG)
## Build Requirements
* Visual Studio 2017
* [Hactool](https://github.com/SciresM/hactool/releases)
* [Dumped keys](https://gbatemp.net/threads/how-to-get-switch-keys-for-hactool-xci-decrypting.506978/)
* [Visual Studio Community 2019](https://visualstudio.microsoft.com/downloads/)
* [hactool](https://github.com/SciresM/hactool/releases)
* [Lockpick](https://gbatemp.net/threads/switch-7-0-key-derivation-lockpick_rcm-payload.532916/)
## Build Instructions
* Open **XCI Explorer.sln**
* Change *Debug* to *Release* in the dropdown menu
* Go to *Build*, then *Build Solution*
* Extract **hactool.zip** to `XCI-Explorer/bin/Release/` folder
* Extract **hactool.zip** to `XCI-Explorer/bin/Release/tools/` folder
* Run **XCI-Explorer.exe**
## Special Thanks

View file

@ -7,11 +7,12 @@
<OutputType>WinExe</OutputType>
<AssemblyName>XCI-Explorer</AssemblyName>
<TargetFrameworkIdentifier>.NETFramework</TargetFrameworkIdentifier>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Platform)' == 'AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
@ -97,6 +98,7 @@
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>

View file

@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27703.2026
# Visual Studio Version 16
VisualStudioVersion = 16.0.28803.156
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XCI Explorer", "XCI Explorer.csproj", "{89DBE891-22C7-40FF-A3D3-36F26224E09D}"
EndProject
@ -20,6 +20,6 @@ Global
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {1F73AFFB-5BC0-4923-9D40-CD671B603EC9}
SolutionGuid = {F9C853DD-FEA7-470E-B594-C72A1C93ECBB}
EndGlobalSection
EndGlobal

View file

@ -758,146 +758,6 @@ namespace XCI_Explorer
return ByteArrayToString(hashValue);
}
private void LoadPartitionsOld()
{
string actualHash;
byte[] hashBuffer;
long offset;
TV_Partitions.Nodes.Clear();
TV_Parti = new TreeViewFileSystem(TV_Partitions);
rootNode = new BetterTreeNode("root");
rootNode.Offset = -1L;
rootNode.Size = -1L;
TV_Partitions.Nodes.Add(rootNode);
FileStream fileStream = new FileStream(TB_File.Text, FileMode.Open, FileAccess.Read);
HFS0.HSF0_Entry[] array = new HFS0.HSF0_Entry[HFS0.HFS0_Headers[0].FileCount];
fileStream.Position = XCI.XCI_Headers[0].HFS0OffsetPartition + 16 + 64 * HFS0.HFS0_Headers[0].FileCount;
long num = XCI.XCI_Headers[0].HFS0OffsetPartition + XCI.XCI_Headers[0].HFS0SizeParition;
byte[] array2 = new byte[64];
byte[] array3 = new byte[16];
byte[] array4 = new byte[24];
for (int i = 0; i < HFS0.HFS0_Headers[0].FileCount; i++)
{
fileStream.Position = XCI.XCI_Headers[0].HFS0OffsetPartition + 16 + 64 * i;
fileStream.Read(array2, 0, 64);
array[i] = new HFS0.HSF0_Entry(array2);
fileStream.Position = XCI.XCI_Headers[0].HFS0OffsetPartition + 16 + 64 * HFS0.HFS0_Headers[0].FileCount + array[i].Name_ptr;
int num2;
while ((num2 = fileStream.ReadByte()) != 0 && num2 != 0)
{
chars.Add((char)num2);
}
array[i].Name = new string(chars.ToArray());
chars.Clear();
offset = num + array[i].Offset;
hashBuffer = new byte[array[i].HashedRegionSize];
fileStream.Position = offset;
fileStream.Read(hashBuffer, 0, array[i].HashedRegionSize);
actualHash = SHA256Bytes(hashBuffer);
TV_Parti.AddFile(array[i].Name + ".hfs0", rootNode, offset, array[i].Size, array[i].HashedRegionSize, ByteArrayToString(array[i].Hash), actualHash);
BetterTreeNode betterTreeNode = TV_Parti.AddDir(array[i].Name, rootNode);
HFS0.HFS0_Header[] array5 = new HFS0.HFS0_Header[1];
fileStream.Position = array[i].Offset + num;
fileStream.Read(array3, 0, 16);
array5[0] = new HFS0.HFS0_Header(array3);
if (array[i].Name == "secure")
{
SecureSize = new long[array5[0].FileCount];
SecureOffset = new long[array5[0].FileCount];
SecureName = new string[array5[0].FileCount];
}
if (array[i].Name == "normal")
{
NormalSize = new long[array5[0].FileCount];
NormalOffset = new long[array5[0].FileCount];
}
HFS0.HSF0_Entry[] array6 = new HFS0.HSF0_Entry[array5[0].FileCount];
for (int j = 0; j < array5[0].FileCount; j++)
{
fileStream.Position = array[i].Offset + num + 16 + 64 * j;
fileStream.Read(array2, 0, 64);
array6[j] = new HFS0.HSF0_Entry(array2);
fileStream.Position = array[i].Offset + num + 16 + 64 * array5[0].FileCount + array6[j].Name_ptr;
while ((num2 = fileStream.ReadByte()) != 0 && num2 != 0)
{
chars.Add((char)num2);
}
array6[j].Name = new string(chars.ToArray());
chars.Clear();
if (array[i].Name == "secure")
{
SecureSize[j] = array6[j].Size;
SecureOffset[j] = array[i].Offset + array6[j].Offset + num + 16 + array5[0].StringTableSize + array5[0].FileCount * 64;
SecureName[j] = array6[j].Name;
}
if (array[i].Name == "normal")
{
NormalSize[j] = array6[j].Size;
NormalOffset[j] = array[i].Offset + array6[j].Offset + num + 16 + array5[0].StringTableSize + array5[0].FileCount * 64;
}
offset = array[i].Offset + array6[j].Offset + num + 16 + array5[0].StringTableSize + array5[0].FileCount * 64;
hashBuffer = new byte[array6[j].HashedRegionSize];
fileStream.Position = offset;
fileStream.Read(hashBuffer, 0, array6[j].HashedRegionSize);
actualHash = SHA256Bytes(hashBuffer);
TV_Parti.AddFile(array6[j].Name, betterTreeNode, offset, array6[j].Size, array6[j].HashedRegionSize, ByteArrayToString(array6[j].Hash), actualHash);
TreeNode[] array7 = TV_Partitions.Nodes.Find(betterTreeNode.Text, true);
if (array7.Length != 0)
{
TV_Parti.AddFile(array6[j].Name, (BetterTreeNode)array7[0], 0L, 0L);
}
}
}
long num3 = -9223372036854775808L;
for (int k = 0; k < SecureSize.Length; k++)
{
if (SecureSize[k] > num3)
{
gameNcaSize = SecureSize[k];
gameNcaOffset = SecureOffset[k];
num3 = SecureSize[k];
}
}
PFS0Offset = gameNcaOffset + 32768;
fileStream.Position = PFS0Offset;
fileStream.Read(array3, 0, 16);
PFS0.PFS0_Headers[0] = new PFS0.PFS0_Header(array3);
PFS0.PFS0_Entry[] array8;
array8 = new PFS0.PFS0_Entry[PFS0.PFS0_Headers[0].FileCount];
for (int m = 0; m < PFS0.PFS0_Headers[0].FileCount; m++)
{
fileStream.Position = PFS0Offset + 16 + 24 * m;
fileStream.Read(array4, 0, 24);
array8[m] = new PFS0.PFS0_Entry(array4);
PFS0Size += array8[m].Size;
}
TV_Parti.AddFile("boot.psf0", rootNode, PFS0Offset, 16 + 24 * PFS0.PFS0_Headers[0].FileCount + 64 + PFS0Size);
BetterTreeNode betterTreeNode2 = TV_Parti.AddDir("boot", rootNode);
for (int n = 0; n < PFS0.PFS0_Headers[0].FileCount; n++)
{
fileStream.Position = PFS0Offset + 16 + 24 * PFS0.PFS0_Headers[0].FileCount + array8[n].Name_ptr;
int num4;
while ((num4 = fileStream.ReadByte()) != 0 && num4 != 0)
{
chars.Add((char)num4);
}
array8[n].Name = new string(chars.ToArray());
chars.Clear();
TV_Parti.AddFile(array8[n].Name, betterTreeNode2, PFS0Offset + array8[n].Offset + 16 + PFS0.PFS0_Headers[0].StringTableSize + PFS0.PFS0_Headers[0].FileCount * 24, array8[n].Size);
TreeNode[] array9 = TV_Partitions.Nodes.Find(betterTreeNode2.Text, true);
if (array9.Length != 0)
{
TV_Parti.AddFile(array8[n].Name, (BetterTreeNode)array9[0], 0L, 0L);
}
}
fileStream.Close();
}
private void LoadPartitions()
{
string actualHash;

3
app.config Normal file
View file

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