nswdb.com
It's more than 440 they released today, not stopping....
doesnt look like they dumped street fighter 30th anniversary in nsp
nswdb.com
It's more than 440 they released today, not stopping....
I doubt they will release nsp versions of anything already released as xci.doesnt look like they dumped street fighter 30th anniversary in nsp
All I know is every last NSP I have works just fine and my console will never touch an external network again. So even if they can ban/block all of the current NSPs downloaded with public certs with a firmware or server update it won't matter to me, I'm sure I can find something out of several hundred games I already have to play on older firmware...
Has anyone go online with legit unbanned console recently since the big change in CDN system last week, and bought and installed an actual eShop game.
Then modded their Switch, and dump and extracted their nand backup, to see if 'nintendo' infact with legit game bought thru eShop, stores these so called extra worthless metadata (xml's/jpg's) files on your Switch nand.
Maybe the problem is two-fold, not only are the previous dumps 'wrong', but maybe the current nsp installers, are not 'installing and looking' for all the files that the real switch does with legit eshop.
Remember tinfoil and other apps are all based on devmenu and early cdn tools, and devmenu is from early system firmware, it does not mean that even tho everything works fine now without this 'extra metadata', that it is not at least tracked and logged or stored by nintendo themselves at some point during the whole actual legit eShop buy,fetch,install process on the switch.
And you got to remember also, even if the above is 'useless' right now, does not mean in future like with v6.0 firmware when 'paid online' launches in 3 to 4 weeks, that these 'files' are now 'needed' and 'logged' and 'looked for'.
856 Mercenary Kings Limited Run Games, Inc.en BigBlueBox 2 LA-H-AEUWA 0100F900046C4000 391F4040 bbb-h-aeuwa Mercenary.Kings.USA.NSW-BigBlueBox 637452800 3.0.1 NSW Game 1
523 Mercenary Kings Tribute Games Inc.en BigBlueBox 1 LA-N-AEUWA 0100F900046C4000 C1CCCDFB bbb-n-aeuwa Mercenary.Kings.eShop.NSW-BigBlueBox 251521886 3.0.1 eShop 1
what's the difference between north america and usa?
The extra added xml files are generated from the NCAs during the NSP packing, hence you can repack ANY NSP and generate these files. The files are required for developers and for submission to Nintendo for review. Since we are not developing the game (it's already finished) and we are not submitting it to Nintendo for review (it's on the EShop) these are totally useless.
Unlike what you may think NSP's are NOT what eShop uses. eShop does NOT use a container file, they are raw separate files just like all Nintendo systems use. This was the case with Wii, 3DS and Wii U they are all raw files downloaded from eShop (not WADS, CIAS or NSPS). The containers were used for developers and submissions NOT for piracy and these extra files are useless and should be abandoned as the "proper way" to do retail pirated games.
I believe the NA is actually "not applicable", used to mean region-free or multi-region, as opposed to north america. So the eshop release is the same for multiple/all regions, whereas the Limited Run cart release is a USA release (but still works on Switches from every region as the console itself is region-free).856 Mercenary Kings Limited Run Games, Inc.en BigBlueBox 2 LA-H-AEUWA 0100F900046C4000 391F4040 bbb-h-aeuwa Mercenary.Kings.USA.NSW-BigBlueBox 637452800 3.0.1 NSW Game 1
523 Mercenary Kings Tribute Games Inc.en BigBlueBox 1 LA-N-AEUWA 0100F900046C4000 C1CCCDFB bbb-n-aeuwa Mercenary.Kings.eShop.NSW-BigBlueBox 251521886 3.0.1 eShop 1
what's the difference between north america and usa?
[XmlRoot("Application", Namespace = null, IsNullable = false)]
public class ControlData
{
private static readonly ILog logger = LogManager.GetLogger(typeof(ControlData));
[XmlElement(ElementName = "Title")]
public ControlTitle[] Titles { get; set; }
[XmlElement(ElementName = "SupportedLanguage")]
public string[] SupportedLanguages
{
get
{
List<string> r = new List<string>();
for (uint i = 0, mask = 1; i < Titles.Length; i++, mask <<= 1)
{
if ((SupportedLanguagesFlag & mask) != 0)
r.Add(((SwitchLanguage)i).ToString());
}
return r.ToArray();
}
set
{
int flag = 0;
for (uint i = 0; i < value.Length; i++)
{
string l = value[i];
if (!string.IsNullOrWhiteSpace(l))
{
if (Enum.TryParse(l, out SwitchLanguage lang))
{
flag |= (1 << (int)lang);
}
}
}
SupportedLanguagesFlag = flag;
}
}
[XmlIgnore]
public int SupportedLanguagesFlag { get; private set; }
[XmlElement(ElementName = "ParentalControl")]
public ParentalControlOption ParentalControl { get; set; }
[XmlElement(ElementName = "Isbn")]
public string Isbn { get; set; }
[XmlElement(ElementName = "StartupUserAccount")]
public StartupUserAccountOption StartupUserAccount { get; set; }
[XmlElement(ElementName = "Screenshot")]
public ScreenshotOption Screenshot { get; set; }
[XmlElement(ElementName = "VideoCapture")]
public VideoCaptureOption VideoCapture { get; set; }
[XmlElement(ElementName = "TouchScreenUsagae")]
public TouchScreenUsageOption TouchScreenUsage { get; set; }
[XmlElement(ElementName = "PlayLogPolicy")]
public PlayLogPolicyOption PlayLogPolicy { get; set; }
[XmlElement(ElementName = "DataLossConfirmation")]
public DataLossConfirmationOption DataLossConfirmation { get; set; }
[XmlElement(ElementName = "Attribute")]
public AttributeOption Attribute { get; set; }
[XmlElement(ElementName = "PresenceGroupId")]
public string PresenceGroupId { get; set; }
[XmlElement(ElementName = "DisplayVersion")]
public string DisplayVersion { get; set; }
[XmlElement(ElementName = "AddOnContentBaseId")]
public string AddOnContentBaseId { get; set; }
[XmlElement(ElementName = "SaveDataOwnerId")]
public string SaveDataOwnerId { get; set; }
[XmlElement(ElementName = "UserAccountSaveDataSize")]
public string UserAccountSaveDataSize { get; set; }
[XmlElement(ElementName = "UserAccountSaveDataJournalSize")]
public string UserAccountSaveDataJournalSize { get; set; }
[XmlElement(ElementName = "DeviceSaveDataSize")]
public string DeviceSaveDataSize { get; set; }
[XmlElement(ElementName = "Rating")]
public ControlRating[] Ratings { get; set; }
[XmlElement(ElementName = "LocalCommunicationId")]
public string[] LocalCommunicationIds { get; set; }
[XmlElement(ElementName = "SeedForPseudoDeviceId")]
public string SeedForPseudoDeviceId { get; set; }
[XmlElement(ElementName = "BcatPassphrase")]
public string BcatPassphrase { get; set; }
[XmlElement(ElementName = "DeviceSaveDataJournalSize")]
public string DeviceSaveDataJournalSize { get; set; }
[XmlElement(ElementName = "BcatDeliveryCacheStorageSize")]
public string BcatDeliveryCacheStorageSize { get; set; }
[XmlElement(ElementName = "ApplicationErrorCodeCategory")]
public string ApplicationErrorCodeCategory { get; set; }
[XmlElement(ElementName = "LogoType")]
public LogoTypeOption LogoType { get; set; }
[XmlElement(ElementName = "LogoHandling")]
public LogoHandlingOption LogoHandling { get; set; }
[XmlElement(ElementName = "Icon")]
public List<ControlIcon> Icons { get; set; }
[XmlElement(ElementName = "CrashReport")]
public CrashReportOption CrashReport { get; set; }
[XmlElement(ElementName = "RuntimeAddOnContentInstall")]
public RuntimeAddOnContentInstallOption RuntimeAddOnContentInstall { get; set; }
[XmlElement(ElementName = "PlayLogQueryCapability")]
public PlayLogQueryCapabilityOption PlayLogQueryCapability { get; set; }
[XmlElement(ElementName = "ProgramIndex")]
public uint ProgramIndex { get; set; }
[XmlElement(ElementName = "AddOnContentRegistrationType")]
public AddOnContentRegistrationTypeOption AddOnContentRegistrationType { get; set; }
[XmlElement(ElementName = "UserAccountSaveDataSizeMax")]
public string UserAccountSaveDataSizeMax { get; set; }
[XmlElement(ElementName = "UserAccountSaveDataJournalSizeMax")]
public string UserAccountSaveDataJournalSizeMax { get; set; }
[XmlElement(ElementName = "DeviceSaveDataSizeMax")]
public string DeviceSaveDataSizeMax { get; set; }
[XmlElement(ElementName = "DeviceSaveDataJournalSizeMax")]
public string DeviceSaveDataJournalSizeMax { get; set; }
[XmlElement(ElementName = "TemporaryStorageSize")]
public string TemporaryStorageSize { get; set; }
[XmlElement(ElementName = "CacheStorageSize")]
public string CacheStorageSize { get; set; }
[XmlElement(ElementName = "CacheStorageJournalSize")]
public string CacheStorageJournalSize { get; set; }
[XmlElement(ElementName = "CacheStorageDataAndJournalSizeMax")]
public string CacheStorageDataAndJournalSizeMax { get; set; }
[XmlElement(ElementName = "CacheStorageIndexMax")]
public string CacheStorageIndexMax { get; set; }
[XmlElement(ElementName = "Hdcp")]
public HdcpOption Hdcp { get; set; }
[XmlIgnore]
public byte[] Reserved { get; set; }
public ControlData()
{
}
public static ControlData Parse(string file)
{
using (var fs = File.OpenRead(file))
{
using (BinaryReader br = new BinaryReader(fs))
{
ControlData data = new ControlData();
// Reading switch title control file (control.nacp)
// See http://switchbrew.org/index.php?title=Control.nacp
string parent = Path.GetDirectoryName(file);
data.Titles = new ControlTitle[0x10];
data.Icons = new List<ControlIcon>();
// 0x0 + 0x3000 (0x10 entries of 0x300 each) - language entries for developer (or publisher?) name and title name
for (int i = 0; i < data.Titles.Length; i++)
{
ControlTitle title = new ControlTitle();
title.Name = br.ReadUTF8NullTerminated(0x200);
title.Publisher = br.ReadUTF8NullTerminated(0x100);
title.Language = (SwitchLanguage)i;
if (!string.IsNullOrWhiteSpace(title.Name))
data.Titles[i] = title;
string icon = parent + Path.DirectorySeparatorChar + "icon_" + title.Language + ".bin";
if (File.Exists(icon))
{
string hash = Crypto.ComputeHash(File.OpenRead(icon)).ToHex();
data.Icons.Add(new ControlIcon { Language = title.Language, NxIconHash = hash });
}
}
// 0x3000 + 0x25 ISBN
data.Isbn = br.ReadUTF8NullTerminated(0x25);
if (string.IsNullOrWhiteSpace(data.Isbn)) data.Isbn = null;
// 0x3025 + 0x3 TouchScreenUsage, StartupUserAccount, ???
byte sa = br.ReadByte(); data.StartupUserAccount = (StartupUserAccountOption)sa;
byte t = br.ReadByte(); data.TouchScreenUsage = (TouchScreenUsageOption)t;
br.ReadByte();
// 0x3028 + 0x4 Attribute? None, Demo
uint a = br.ReadUInt32(); data.Attribute = (AttributeOption)a;
// 0x302C + 0x4 Supported languages, one bit for each supported language
// AmericanEnglish is the LSB, value&1. There are only 15 languages, so the 17 MS bits are 0
// If all languages are supported, the value if 00 00 7F FF (FF 7F 00 00 when written to disk)
data.SupportedLanguagesFlag = br.ReadInt32();
// 0x3030 + 0x4 Parental Control options flag
data.ParentalControl = (ParentalControlOption)br.ReadInt32();
// 0x3034 + 0x4 VideoCapture, Screenshot, DataLossConfirmation, PlayLogPolicy
byte v = br.ReadByte(); data.VideoCapture = (VideoCaptureOption)v;
byte s = br.ReadByte(); data.Screenshot = (ScreenshotOption)s;
byte d = br.ReadByte(); data.DataLossConfirmation = (DataLossConfirmationOption)d;
byte p = br.ReadByte(); data.PlayLogPolicy = (PlayLogPolicyOption)p;
// 0x3038 + 0x8 presence group ID or savedataownerid
data.PresenceGroupId = "0x" + br.ReadHex64();
// 0x3040 + 0x20 RatingAge
byte[] rating = br.ReadBytes(0x20);
data.Ratings = new ControlRating[rating.Length];
for (int i = 0; i < rating.Length; i++)
{
byte r = rating[i];
if (r == 0xFF) // not a valid age thus not supported
data.Ratings[i] = null;
else
data.Ratings[i] = new ControlRating { Organisation = (RatingOrganisation)i, Age = r, };
}
// 0x3060 + 0x10 Application version string
data.DisplayVersion = br.ReadUTF8NullTerminated(0x10);
// 0x3070 + 0x8 Base titleID for DLC, set even when DLC is not used. Usually app_titleID+0x1000
data.AddOnContentBaseId = "0x" + br.ReadHex64();
// 0x3078 + 0x8 presence group ID or savedataownerid
data.SaveDataOwnerId = "0x" + br.ReadHex64();
// 0x3080 + 0x8 UserAccountSaveDataSize
data.UserAccountSaveDataSize = "0x" + br.ReadHex64();
// 0x3088 + 0x8 UserAccountSaveDataSize
data.UserAccountSaveDataJournalSize = "0x" + br.ReadHex64();
// 0x3090 + 0x8 DeviceSaveDataSize
data.DeviceSaveDataSize = "0x" + br.ReadHex64();
// 0x3098 + 0x8 DeviceSaveDataJournalSize
data.DeviceSaveDataJournalSize = "0x" + br.ReadHex64();
// 0x30A0 + 0x8 BcatDeliveryCacheStorageSize
data.BcatDeliveryCacheStorageSize = "0x" + br.ReadHex64();
// 0x30A8 + 0x8 ApplicationErrorCodeCategory
data.ApplicationErrorCodeCategory = br.ReadUTF8NullTerminated(0x8);
if (string.IsNullOrWhiteSpace(data.ApplicationErrorCodeCategory)) data.ApplicationErrorCodeCategory = null;
// 0x30b0 + (0x8) * 0x8 LocalCommunicationId (array of 8) - just the title ID 8 times?
data.LocalCommunicationIds = new string[0x8];
for (int i = 0; i < 0x8; i++)
data.LocalCommunicationIds[i] = "0x" + br.ReadHex64();
// 0x30F0 + 0x4 LogoType ??
data.LogoType = (LogoTypeOption)br.ReadByte();
// Things get really shaky past here, I don't really know what anything does or how big it is
// 0x30F1 + 0x1 LogoHandling ??
data.LogoHandling = (LogoHandlingOption)br.ReadByte();
br.ReadBytes(6); // I dunno, but the ID that comes next is at 30F8
// 0x30F8 + 0x8 SeedForPseudoDeviceId
data.SeedForPseudoDeviceId = "0x" + br.ReadHex64();
// 0x3100 + 0x40 BcatPassphrase (0 when unused)
data.BcatPassphrase = br.ReadUTF8NullTerminated(0x40);
if (string.IsNullOrWhiteSpace(data.BcatPassphrase)) data.BcatPassphrase = null;
// The following fields are not for sure. I just guessed at their sizes. The fact that
// they all added up to exactly 0x60 bytes made me feel confident about it
data.AddOnContentRegistrationType = (AddOnContentRegistrationTypeOption)br.ReadUInt32();
data.UserAccountSaveDataSizeMax = "0x" + br.ReadHex64();
data.UserAccountSaveDataJournalSizeMax = "0x" + br.ReadHex64();
data.DeviceSaveDataSizeMax = "0x" + br.ReadHex64();
data.DeviceSaveDataJournalSizeMax = "0x" + br.ReadHex64();
data.TemporaryStorageSize = "0x" + br.ReadHex64();
data.CacheStorageSize = "0x" + br.ReadHex64();
data.CacheStorageJournalSize = "0x" + br.ReadHex64();
data.CacheStorageDataAndJournalSizeMax = "0x" + br.ReadHex64();
data.CacheStorageIndexMax = "0x" + br.ReadHex64();
data.Hdcp = (HdcpOption)br.ReadUInt32();
data.CrashReport = (CrashReportOption)br.ReadUInt32();
data.RuntimeAddOnContentInstall = (RuntimeAddOnContentInstallOption)br.ReadUInt32();
data.PlayLogQueryCapability = (PlayLogQueryCapabilityOption)br.ReadUInt32();
data.ProgramIndex = br.ReadUInt32();
// 0x31A0 + 0xE60 Normally all-zero?
data.Reserved = br.ReadBytes(0xE60);
return data;
}
}
}
internal void GenerateXml(string controlXmlFile)
{
// Create a new file stream to write the serialized object to a file
using (TextWriter writer = new StreamWriter(controlXmlFile))
{
XmlSerializer xmls = new XmlSerializer(typeof(ControlData));
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
xmls.Serialize(writer, this, ns);
}
logger.Info($"Generated XML file {Path.GetFileName(controlXmlFile)}!");
}
}
[XmlRoot(ElementName = "Title")]
public class ControlTitle
{
[XmlElement(ElementName = "Language")]
public SwitchLanguage Language { get; set; }
[XmlElement(ElementName = "Name")]
public string Name { get; set; }
[XmlElement(ElementName = "Publisher")]
public string Publisher { get; set; }
}
[XmlRoot(ElementName = "Rating")]
public class ControlRating
{
[XmlElement(ElementName = "Organisation")]
public RatingOrganisation Organisation { get; set; }
[XmlElement(ElementName = "Age")]
public byte Age { get; set; }
}
[XmlRoot(ElementName = "Icon")]
public class ControlIcon
{
[XmlElement(ElementName = "Language")]
public SwitchLanguage Language { get; set; }
[XmlElement(ElementName = "NxIconHash")]
public string NxIconHash { get; set; }
}
public enum VideoCaptureOption { Deny, Allow }
public enum ScreenshotOption { Allow, Deny }
public enum StartupUserAccountOption { None, Required, RequiredWithNetworkServiceAccountAvailable }
public enum TouchScreenUsageOption { None, Supported, Required }
public enum AttributeOption { None, Demo }
public enum PlayLogPolicyOption { All, LogOnly, PL_None }
public enum DataLossConfirmationOption { None, Required }
public enum ParentalControlOption { None, FreeCommunication }
public enum LogoTypeOption { LicensedByNintendo, DistributedByNintendo, Nintendo }
public enum LogoHandlingOption { Auto, Unknown_1, Unknown_2, Unknown_3, Unknown_4 } // I have no source for what this should be called
public enum AddOnContentRegistrationTypeOption { OnDemand, Unknown_1, Unknown_2, Unknown_3, Unknown_4 }
public enum HdcpOption { None, Unknown_1, Unknown_2, Unknown_3, Unknown_4 }
public enum CrashReportOption { Deny, Allow, Unknown_2, Unknown_3, Unknown_4 }
public enum RuntimeAddOnContentInstallOption { Deny, Allow, Unknown_2, Unknown_3, Unknown_4 }
public enum PlayLogQueryCapabilityOption { None, Unknown_1, Unknown_2, Unknown_3, Unknown_4 }
The extra added xml files are generated from the NCAs during the NSP packing, hence you can repack ANY NSP and generate these files. The files are required for developers and for submission to Nintendo for review. Since we are not developing the game (it's already finished) and we are not submitting it to Nintendo for review (it's on the EShop) these are totally useless.
Unlike what you may think NSP's are NOT what eShop uses. eShop does NOT use a container file, they are raw separate files just like all Nintendo systems use. This was the case with Wii, 3DS and Wii U they are all raw files downloaded from eShop (not WADS, CIAS or NSPS). The containers were used for developers and submissions NOT for piracy and these extra files are useless and should be abandoned as the "proper way" to do retail pirated games.
Big Blue Waffle needs to put in a png of the retail or gtfo.Finally someone with a clue posting something not completely inaccurate.
If you want to pirate game, nsp from eshop is more than enough. If you are into the "preservation dream" (and believe me, you are not), then sure, you can collect other useless garbage crap files. BigBlackBalls should also add a .txt file mentioning the main color of the retail package, while they are at it... To make it COMPLETE. LOL.
Finally someone with a clue posting something not completely inaccurate.
If you want to pirate game, nsp from eshop is more than enough. If you are into the "preservation dream" (and believe me, you are not), then sure, you can collect other useless garbage crap files. BigBlackBalls should also add a .txt file mentioning the main color of the retail package, while they are at it... To make it COMPLETE. LOL.
So why do you always lie to the general public? The only thing slightly true is the CDN changes, which were already known beforehand. Why do you always lie when time always exposes your lies?Ok some more clues, Yes, I been hinting about the upcoming 'firm 6 series' to be rolled out soon publicly, lucky its already in beta for those with devkits, so we have time to find ways around it!
Alot of changes under the hood by big 'N', the top 4 are:
#1: massive file checks on both xci and nsp
#2: massive cdn changes
#3: massive efuses changes
#4: all new keys, and cart3 coming later on!
Top 4 things we will need to do and wait for:
#1: FIRST Don't Update to 6.x!
#2: Work Towards Emunand, and/or improved ways and apps to be able 'upgrading' without changes to 'fuses' similar to the current manual guides.
#3: New hardware might be needed to bypass 6.x checks. (ie. modded Joycons with UARTs added)
#4: Hopefully #2, will help remove the need for #3. (currently, only developers need #3 to find better solutions)
Hope the above answers your quest!
That's all for now, folks!