示例#1
0
 private void TestFcrtDoWork(object sender, DoWorkEventArgs e)
 {
     try {
         var args = e.Argument as EventArg <string, string>;
         if (args != null)
         {
             using (var reader = new NANDReader(args.Data1)) {
                 AddOutput("Looking for FCRT.bin in NAND:{0}", Environment.NewLine);
                 var data     = _x360NAND.GetFcrt(reader);
                 var keyutils = new CpukeyUtils();
                 var key      = keyutils.GetCPUKeyFromTextFile(args.Data2);
                 AddOutput("{0}Decrypting FCRT.bin...{0}", Environment.NewLine);
                 var crypt = new Cryptography();
                 crypt.DecryptFcrt(ref data, StringUtils.HexToArray(key));
                 AddOutput("Verifying FCRT.bin... Result: ");
                 AddOutput(crypt.VerifyFcrtDecrypted(ref data) ? "OK!" : "Failed!");
             }
         }
     }
     catch (Exception ex) {
         AddOutput("FAILED!");
         AddException(ex.ToString());
     }
     AddOutput(Environment.NewLine);
     AddDone();
 }
示例#2
0
        private static bool GetAsciiKey(NANDReader reader, int offset, out string key)
        {
            Debug.SendDebug("Grabbing ASCII Key @ 0x{0:X}", offset);
            key        = null;
            reader.Lba = (uint)(offset / 0x4000);
            if (offset % 0x4000 > 0)
            {
                reader.Seek(offset % 0x4000, SeekOrigin.Current);
            }
            //reader.Seek(offset, SeekOrigin.Begin);
            var tmp = reader.ReadBytes(0x10);

            try {
                key = Encoding.ASCII.GetString(tmp);
                try {
                    CpukeyUtils.VerifyCpuKey(key);
                    return(true);
                }
                catch (X360UtilsException ex) {
                    Debug.SendDebug(ex.ToString());
                    return(false);
                }
            }
            catch {
                return(false);
            }
        }
示例#3
0
        private void testKvInfobtn_Click(object sender, EventArgs e)
        {
            _sw = Stopwatch.StartNew();
            var ofd = new OpenFileDialog();

            if (ofd.ShowDialog() != DialogResult.OK)
            {
                return;
            }
            var nand = ofd.FileName;

            ofd.FileName = "cpukey.txt";
            if (ofd.ShowDialog() != DialogResult.OK)
            {
                return;
            }
            var bw = new BackgroundWorker();

            bw.DoWork += (o, args) => {
                try {
                    var keyutils = new CpukeyUtils();
                    var key      = keyutils.GetCPUKeyFromTextFile(ofd.FileName);
                    using (var reader = new NANDReader(nand)) {
                        AddOutput("Grabbing & Decrypting KV From NAND: ");
                        var kv     = _x360NAND.GetKeyVault(reader, key);
                        var kvinfo = new Keyvault();
                        AddOutput(Environment.NewLine);
                        AddOutput("Console ID: {0}", kvinfo.GetConsoleID(ref kv));
                        AddOutput(Environment.NewLine);
                        AddOutput("Console Serial: {0}", kvinfo.GetConsoleSerial(ref kv));
                        AddOutput(Environment.NewLine);
                        AddOutput("DVDKey: {0}", kvinfo.GetDVDKey(ref kv));
                        AddOutput(Environment.NewLine);
                        AddOutput("FCRT Flag: 0x{0:X}", kvinfo.GetFCRTFlag(ref kv));
                        AddOutput(Environment.NewLine);
                        AddOutput("FCRT Required: {0}", kvinfo.FCRTRequired(ref kv));
                        AddOutput(Environment.NewLine);
                        AddOutput("FCRT Used: {0}", kvinfo.FCRTUsed(ref kv));
                        AddOutput(Environment.NewLine);
                        AddOutput("Game Region: {0}", kvinfo.GetGameRegion(ref kv, true));
                        AddOutput(Environment.NewLine);
                        AddOutput("MFR-Date (DDMMYY): {0}", kvinfo.GetMfrDate(ref kv, Keyvault.DateFormats.DDMMYY));
                        AddOutput(Environment.NewLine);
                        AddOutput("OSIG: {0}", kvinfo.GetOSIGData(ref kv));
                    }
                }
                catch (X360UtilsException ex) {
                    AddOutput("FAILED!");
                    AddException(ex.ToString());
                }
                AddOutput(Environment.NewLine);
                AddDone();
            };
            bw.RunWorkerCompleted += BwCompleted;
            bw.RunWorkerAsync();
        }
示例#4
0
 private static bool GetByteKey(NANDReader reader, int offset, out byte[] key)
 {
     Debug.SendDebug("Grabbing Byte Key @ 0x{0:X}", offset);
     reader.Lba = (uint)(offset / 0x4000);
     if (offset % 0x4000 > 0)
     {
         reader.Seek(offset % 0x4000, SeekOrigin.Current);
     }
     //reader.Seek(offset, SeekOrigin.Begin);
     key = reader.ReadBytes(0x10);
     try {
         CpukeyUtils.VerifyCpuKey(ref key);
         return(true);
     }
     catch (X360UtilsException ex) {
         Debug.SendDebug(ex.ToString());
         return(false);
     }
 }
示例#5
0
        public string GetKeyFromXeLL(IPAddress ipadrAddress)
        {
            switch (ipadrAddress.AddressFamily)
            {
            case AddressFamily.InterNetwork:
                var pinger = new Ping();
                var reply  = pinger.Send(ipadrAddress, 1000);
                if (reply != null && reply.Status != IPStatus.Success)
                {
                    reply = pinger.Send(ipadrAddress, 1000);
                }
                if (reply == null || reply.Status != IPStatus.Success)
                {
                    throw new TimeoutException(string.Format("Ping Timeout for {0}", ipadrAddress));
                }
                FuseDownloader(ipadrAddress);
                var keyutils = new CpukeyUtils();
                return(keyutils.GetCPUKeyFromTextFile("FUSE.txt"));

            default:
                throw new NotSupportedException("IP Must be IPv4!");
            }
        }
示例#6
0
        private void bootloaderbtn_Click(object sender, EventArgs e)
        {
            _sw = Stopwatch.StartNew();
            var ofd = new OpenFileDialog();

            if (ofd.ShowDialog() != DialogResult.OK)
            {
                return;
            }
            var nand = ofd.FileName;

            ofd.FileName = "cpukey.txt";
            var nokey = ofd.ShowDialog() != DialogResult.OK;
            var bw    = new BackgroundWorker();

            bw.DoWork += (o, args) => {
                try {
                    var keyutils = new CpukeyUtils();
                    var key      = "";
                    if (!nokey)
                    {
                        key = keyutils.GetCPUKeyFromTextFile(ofd.FileName);
                    }
                    using (var reader = new NANDReader(nand)) {
                        AddOutput("Getting bootloaders...{0}", Environment.NewLine);
                        var bls = _x360NAND.GetBootLoaders(reader, true);
                        if (nokey)
                        {
                            try {
                                AddOutput("Attempting to grab key from NAND... {0}", Environment.NewLine);
                                key = _x360NAND.GetNandCpuKey(reader);
                                AddOutput("Key found! {0}{1}", key, Environment.NewLine);
                                nokey = false;
                            }
                            catch (X360UtilsException ex) {
                                if (ex.ErrorCode != X360UtilsException.X360UtilsErrors.DataNotFound)
                                {
                                    throw;
                                }
                            }
                        }
                        byte[] lastkey = null;
                        foreach (var bl in bls)
                        {
                            AddOutput("Bootloader Information for: {0}{1}", bl.Type, Environment.NewLine);
                            AddOutput("Build: {0}{1}", bl.Build, Environment.NewLine);
                            AddOutput("Size: 0x{0:X}{1}", bl.Size, Environment.NewLine);
                            AddOutput("Encryption type: {0}{1}", bl.CryptoType, Environment.NewLine);
                            if (!nokey)
                            {
                                if (lastkey != null)
                                {
                                    bl.Key = lastkey;
                                }
                                if (!bl.Decrypted)
                                {
                                    try {
                                        AddOutput("Decrypting the bootloader...{0}", Environment.NewLine);
                                        if (bl.CryptoType != Cryptography.BlEncryptionTypes.MfgCbb && bl.Type == Bootloader.BootLoaderTypes.CBB)
                                        {
                                            AddOutput("Decrypting with key: {0}{1}", key, Environment.NewLine);
                                            bl.Decrypt(StringUtils.HexToArray(key));
                                            AddOutput("Decryption result: {0}{1}", bl.Decrypted ? "Success!" : "Failed!", Environment.NewLine);
                                        }
                                        else if (bl.CryptoType == Cryptography.BlEncryptionTypes.MfgCbb && bl.Type == Bootloader.BootLoaderTypes.CBB)
                                        {
                                            AddOutput("Decrypting with key: {0}{1}", Main.MfgBlKey, Environment.NewLine);
                                            bl.Decrypt(Main.MfgBlKeyBytes);
                                            AddOutput("Decryption result: {0}{1}", bl.Decrypted ? "Success!" : "Failed!", Environment.NewLine);
                                        }
                                        else
                                        {
                                            AddOutput("Decrypting with key: {0}{1}", Main.FirstBlKey, Environment.NewLine);
                                            bl.Decrypt(Main.FirstBlKeyBytes);
                                            AddOutput("Decryption result: {0}{1}", bl.Decrypted ? "Success!" : "Failed!", Environment.NewLine);
                                        }
                                    }
                                    catch (NotImplementedException) {
                                        AddOutput("Not implemented for this bootloader version...{0}", Environment.NewLine);
                                    }
                                }
                                if (bl.OutKey != null)
                                {
                                    AddOutput("OutKey: {0}{1}", StringUtils.ArrayToHex(bl.OutKey), Environment.NewLine);
                                }
                                if (bl.Key != null)
                                {
                                    AddOutput("Key: {0}{1}", StringUtils.ArrayToHex(bl.Key), Environment.NewLine);
                                }

                                lastkey = bl.OutKey;
                            }
                        }
                    }
                }
                catch (X360UtilsException ex) {
                    AddOutput("FAILED!");
                    AddException(ex.ToString());
                }
                AddOutput(Environment.NewLine);
                AddDone();
            };
            bw.RunWorkerCompleted += BwCompleted;
            bw.RunWorkerAsync();
        }