Example #1
0
        public static void Encrypt(object sender, EventArgs e)
        {
            var tsi = sender as ToolStripMenuItem;

            if (!Shared.PrepareFiles("Open a decrypted " + tsi?.Tag + " file...", "Save your encrypted file...", ".dec", out var openFile, out var saveFile, true))
            {
                return;
            }

            try
            {
                using (var openFs = new BinaryReaderX(openFile))
                    using (var outFs = new BinaryWriterX(saveFile))
                        switch (tsi?.Tag)
                        {
                        case Types.BlowFishCBC:
                            var key = InputBox.Show("Input encryption key:", "Encrypt Blowfish");

                            if (key == String.Empty)
                            {
                                throw new Exception("Key can't be empty!");
                            }
                            var bf = new BlowFish(key);
                            outFs.Write(bf.Encrypt_CBC(openFs.ReadAllBytes()));
                            break;

                        case Types.BlowFishECB:
                            key = InputBox.Show("Input encryption key:", "Encrypt Blowfish");

                            if (key == String.Empty)
                            {
                                throw new Exception("Key can't be empty!");
                            }
                            bf = new BlowFish(key);
                            outFs.Write(bf.Encrypt_ECB(openFs.ReadAllBytes()));
                            break;

                        case Types.MTMobile:
                            var key1 = InputBox.Show("Input 1st encryption key:", "Encrypt MTMobile");
                            var key2 = InputBox.Show("Input 2nd encryption key:", "Encrypt MTMobile");

                            if (key1 == String.Empty || key2 == String.Empty)
                            {
                                throw new Exception("Keys can't be empty!");
                            }
                            outFs.Write(MTFramework.Encrypt(openFs.BaseStream, key1, key2));
                            break;
                        }

                MessageBox.Show($"Successfully encrypted {Path.GetFileName(openFile.Name)}.", tsi.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), tsi?.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
                File.Delete(saveFile.Name);
            }
        }
Example #2
0
        public static void Decrypt(object sender, EventArgs e)
        {
            var tsi  = sender as ToolStripMenuItem;
            var name = (tsi.Tag.ToString() == "normal") ? "3DS" : tsi.Tag.ToString();

            FileStream openFile;
            FileStream saveFile = null;

            if ((Types)tsi.Tag != Types.NSW_XCI && (Types)tsi.Tag != Types.NSW_NCA)
            {
                if (!Shared.PrepareFiles("Open an encrypted " + name + " file...", "Save your decrypted file...", ".dec", out openFile, out saveFile))
                {
                    return;
                }
            }
            else
            {
                var ofd = new OpenFileDialog
                {
                    Title  = "Open an encrypted " + name + " file...",
                    Filter = "All Files (*.*)|*.*"
                };
                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    openFile = File.Open(ofd.FileName, FileMode.Open, FileAccess.ReadWrite);
                }
                else
                {
                    return;
                }
            }

            bool show = true;

            try
            {
                using (var openBr = new BinaryReaderX(openFile))
                {
                    switch (tsi.Tag)
                    {
                    case Types.BlowFishCBC:
                        using (var outFs = new BinaryWriterX(saveFile))
                        {
                            var key = InputBox.Show("Input decryption key:", "Decrypt Blowfish");

                            if (key == String.Empty)
                            {
                                throw new Exception("Key can't be empty!");
                            }
                            var bf = new BlowFish(key);
                            outFs.Write(bf.Decrypt_CBC(openBr.ReadAllBytes()));
                        }
                        break;

                    case Types.BlowFishECB:
                        using (var outFs = new BinaryWriterX(saveFile))
                        {
                            var key = InputBox.Show("Input decryption key:", "Decrypt Blowfish");

                            if (key == String.Empty)
                            {
                                throw new Exception("Key can't be empty!");
                            }
                            var bf = new BlowFish(key);
                            outFs.Write(bf.Decrypt_ECB(openBr.ReadAllBytes()));
                        }
                        break;

                    case Types.MTMobile:
                        using (var outFs = new BinaryWriterX(saveFile))
                        {
                            var key1 = InputBox.Show("Input 1st decryption key:", "Decrypt MTMobile");
                            var key2 = InputBox.Show("Input 2nd decryption key:", "Decrypt MTMobile");

                            if (key1 == String.Empty || key2 == String.Empty)
                            {
                                throw new Exception("Keys can't be empty!");
                            }
                            outFs.Write(MTFramework.Decrypt(openBr.BaseStream, key1, key2));
                        }
                        break;

                    case Types.Normal:
                        using (var outFs = new BinaryWriterX(saveFile))
                        {
                            var engine = new AesEngine();
                            openBr.BaseStream.CopyTo(outFs.BaseStream);
                            openBr.BaseStream.Position = 0;
                            outFs.BaseStream.Position  = 0;
                            engine.DecryptGameNCSD(openBr.BaseStream, outFs.BaseStream);
                        }
                        break;

                    case Types.CIA_shallow:
                        using (var outFs = new BinaryWriterX(saveFile))
                        {
                            var engine = new AesEngine();
                            openBr.BaseStream.CopyTo(outFs.BaseStream);
                            openBr.BaseStream.Position = 0;
                            outFs.BaseStream.Position  = 0;
                            engine.DecryptCIA(openBr.BaseStream, outFs.BaseStream, true);
                        }
                        break;

                    case Types.CIA_deep:
                        using (var outFs = new BinaryWriterX(saveFile))
                        {
                            var engine = new AesEngine();
                            openBr.BaseStream.CopyTo(outFs.BaseStream);
                            openBr.BaseStream.Position = 0;
                            outFs.BaseStream.Position  = 0;
                            engine.DecryptCIA(openBr.BaseStream, outFs.BaseStream, false);
                        }
                        break;

                    case Types.NCCH:
                        using (var outFs = new BinaryWriterX(saveFile))
                        {
                            var engine = new AesEngine();
                            openBr.BaseStream.CopyTo(outFs.BaseStream);
                            openBr.BaseStream.Position = 0;
                            outFs.BaseStream.Position  = 0;
                            engine.DecryptNCCH(openBr.BaseStream, outFs.BaseStream);
                        }
                        break;

                    /*case Types.BOSS:
                     *  outFs.Write(engine.DecryptBOSS(openBr.ReadBytes((int)openBr.BaseStream.Length)));
                     *  break;*/

                    case Types.NSW_XCI:
                        openBr.BaseStream.Position = 0;

                        Switch.DecryptXCI(openBr.BaseStream);

                        MessageBox.Show("XCI Header and all NCA's were decrypted successfully!", "Decryption Success", MessageBoxButtons.OK);
                        show = false;
                        break;

                    case Types.NSW_NCA:
                        openBr.BaseStream.Position = 0;

                        Switch.DecryptNCA(openBr.BaseStream, 0);

                        MessageBox.Show("NCA was decrypted successfully!", "Decryption Success", MessageBoxButtons.OK);
                        show = false;
                        break;
                    }
                }

                if (show)
                {
                    MessageBox.Show($"Successfully decrypted {Path.GetFileName(openFile.Name)}.", tsi?.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), tsi?.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
                File.Delete(saveFile.Name);
            }
        }
Example #3
0
        public static void Decrypt(object sender, EventArgs e)
        {
            var tsi  = sender as ToolStripMenuItem;
            var name = (tsi.Tag.ToString() == "normal") ? "3DS" : tsi.Tag.ToString();

            if (!Shared.PrepareFiles("Open an encrypted " + name + " file...", "Save your decrypted file...", ".dec", out FileStream openFile, out FileStream saveFile))
            {
                return;
            }

            try
            {
                using (var openBr = new BinaryReaderX(openFile))
                    using (var outFs = new BinaryWriterX(saveFile))
                    {
                        switch (tsi.Tag)
                        {
                        case Types.BlowFishCBC:
                            var key = InputBox.Show("Input decryption key:", "Decrypt Blowfish");

                            if (key == String.Empty)
                            {
                                throw new Exception("Key can't be empty!");
                            }
                            var bf = new BlowFish(key);
                            outFs.Write(bf.Decrypt_CBC(openBr.ReadAllBytes()));
                            break;

                        case Types.BlowFishECB:
                            key = InputBox.Show("Input decryption key:", "Decrypt Blowfish");

                            if (key == String.Empty)
                            {
                                throw new Exception("Key can't be empty!");
                            }
                            bf = new BlowFish(key);
                            outFs.Write(bf.Decrypt_ECB(openBr.ReadAllBytes()));
                            break;

                        case Types.MTMobile:
                            var key1 = InputBox.Show("Input 1st decryption key:", "Decrypt MTMobile");
                            var key2 = InputBox.Show("Input 2nd decryption key:", "Decrypt MTMobile");

                            if (key1 == String.Empty || key2 == String.Empty)
                            {
                                throw new Exception("Keys can't be empty!");
                            }
                            outFs.Write(MTFramework.Decrypt(openBr.BaseStream, key1, key2));
                            break;

                        case Types.Normal:
                            var engine = new AesEngine();
                            openBr.BaseStream.CopyTo(outFs.BaseStream);
                            openBr.BaseStream.Position = 0;
                            outFs.BaseStream.Position  = 0;
                            engine.DecryptGameNCSD(openBr.BaseStream, outFs.BaseStream);
                            break;

                        case Types.CIA:
                            engine = new AesEngine();
                            openBr.BaseStream.CopyTo(outFs.BaseStream);
                            openBr.BaseStream.Position = 0;
                            outFs.BaseStream.Position  = 0;
                            engine.DecryptCIA(openBr.BaseStream, outFs.BaseStream);
                            break;

                            /*case Types.BOSS:
                             *  outFs.Write(engine.DecryptBOSS(openBr.ReadBytes((int)openBr.BaseStream.Length)));
                             *  break;*/
                        }
                    }

                MessageBox.Show($"Successfully decrypted {Path.GetFileName(openFile.Name)}.", tsi?.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), tsi?.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
                File.Delete(saveFile.Name);
            }
        }