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); } }
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); } }
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); } }