コード例 #1
0
        public static void Process(Context ctx)
        {
            if (ctx.Options.SdPath == null)
            {
                ctx.Logger.LogMessage("SD path must be specified.");
                return;
            }

            Span <AesXtsKey> keys = ctx.KeySet.SdCardEncryptionKeys;

            using var baseFile = new LocalFile(ctx.Options.InFile, OpenMode.Read);

            AesXtsFile xtsFile     = null;
            int        contentType = 0;

            for (int i = 0; i < keys.Length; i++)
            {
                byte[] kekSource     = keys[i].SubKeys[0].DataRo.ToArray();
                byte[] validationKey = keys[i].SubKeys[1].DataRo.ToArray();

                try
                {
                    xtsFile     = new AesXtsFile(OpenMode.Read, baseFile, ctx.Options.SdPath.ToU8String(), kekSource, validationKey, 0x4000);
                    contentType = i;

                    break;
                }
                catch (HorizonResultException) { }
            }

            if (xtsFile == null)
            {
                ctx.Logger.LogMessage("Error: NAX0 key derivation failed. Check SD card seed and relative path.");
                return;
            }

            ctx.Logger.LogMessage(xtsFile.Print(contentType));

            if (string.IsNullOrWhiteSpace(ctx.Options.PlaintextOut))
            {
                return;
            }

            xtsFile.AsStorage().WriteAllBytes(ctx.Options.PlaintextOut, ctx.Logger);
            ctx.Logger.LogMessage($"Saved Decrypted NAX0 Content to {ctx.Options.PlaintextOut}...");
        }
コード例 #2
0
        private static string Print(this AesXtsFile xtsFile, int contentType)
        {
            int colLen = 36;
            var sb     = new StringBuilder();

            sb.AppendLine();

            sb.AppendLine("NAX0:");

            AesXtsFileHeader header = xtsFile.Header;
            uint             magic  = header.Magic;

            PrintItem(sb, colLen, "    Magic:", Util.GetUtf8String(SpanHelpers.AsReadOnlyByteSpan(ref magic)));
            PrintItem(sb, colLen, "    Content Type:", GetContentType(contentType));
            PrintItem(sb, colLen, "    Content Size:", $"{header.Size:x12}");
            PrintItem(sb, colLen, "    Header HMAC:", header.Signature);
            PrintItem(sb, colLen, "    Encrypted Keys:", header.EncryptedKey1.Concat(header.EncryptedKey2).ToArray());
            PrintItem(sb, colLen, "    Decrypted Keys:", header.DecryptedKey1.Concat(header.DecryptedKey2).ToArray());

            return(sb.ToString());
        }