public static void ProcessPk11(Context ctx) { using (var file = new LocalStorage(ctx.Options.InFile, FileAccess.Read)) { var package1 = new Package1(ctx.Keyset, file); string outDir = ctx.Options.OutDir; if (outDir != null) { Directory.CreateDirectory(outDir); package1.Pk11.OpenWarmboot().WriteAllBytes(Path.Combine(outDir, "Warmboot.bin"), ctx.Logger); package1.Pk11.OpenNxBootloader().WriteAllBytes(Path.Combine(outDir, "NX_Bootloader.bin"), ctx.Logger); package1.Pk11.OpenSecureMonitor().WriteAllBytes(Path.Combine(outDir, "Secure_Monitor.bin"), ctx.Logger); package1.OpenDecryptedPackage().WriteAllBytes(Path.Combine(outDir, "Decrypted.bin"), ctx.Logger); } } }
private void btn_next_Click(object sender, RoutedEventArgs e) { NavigationWindow root = FindRoot(); // Reset SDService so that it's ready for later SDService.ResetHandlers(); SDService.Stop(); root.Navigate(new DerivingPage((page) => { // setup key derivation task and execute it asynchronously on the next page Array.Copy(SBK, HACGUIKeyset.Keyset.SecureBootKey, 0x10); Array.Copy(TSECKeys[0], HACGUIKeyset.Keyset.TsecKey, 0x10); FileStream boot0 = HACGUIKeyset.TempBOOT0FileInfo.OpenRead(); boot0.Seek(0x180000, SeekOrigin.Begin); // Seek to keyblob area for (int i = 0; i < 32; i++) { boot0.Read(HACGUIKeyset.Keyset.EncryptedKeyblobs[i], 0, 0xB0); boot0.Seek(0x150, SeekOrigin.Current); // skip empty region } boot0.Seek(0x100000, SeekOrigin.Begin); List <HashSearchEntry> searches = new List <HashSearchEntry> { new HashSearchEntry(NintendoKeys.MasterKeySourceHash, 0x10), new HashSearchEntry(NintendoKeys.KeyblobMacKeySourceHash, 0x10) }; Dictionary <byte[], byte[]> hashes = boot0.FindKeyViaHash(searches, new SHA256Managed(), 0x10, 0x40000); Array.Copy(hashes[NintendoKeys.MasterKeySourceHash], HACGUIKeyset.Keyset.MasterKeySource, 0x10); Array.Copy(hashes[NintendoKeys.KeyblobMacKeySourceHash], HACGUIKeyset.Keyset.KeyblobMacKeySource, 0x10); HACGUIKeyset.Keyset.DeriveKeys(); // Copy package1 into seperate file boot0.Seek(0x100000, SeekOrigin.Begin); FileStream pkg1stream = HACGUIKeyset.TempPkg1FileInfo.Create(); boot0.CopyToNew(pkg1stream, 0x40000); boot0.Close(); pkg1stream.Seek(0, SeekOrigin.Begin); // reset position HACGUIKeyset.RootTempPkg1FolderInfo.Create(); Package1 pkg1 = new Package1(HACGUIKeyset.Keyset, pkg1stream); // Extracting package1 contents FileStream NXBootloaderStream = HACGUIKeyset.TempNXBootloaderFileInfo.Create(); FileStream SecureMonitorStream = HACGUIKeyset.TempSecureMonitorFileInfo.Create(); FileStream WarmbootStream = HACGUIKeyset.TempWarmbootFileInfo.Create(); pkg1.Pk11.OpenNxBootloader().CopyToNew(NXBootloaderStream); pkg1.Pk11.OpenSecureMonitor().CopyToNew(SecureMonitorStream); pkg1.Pk11.OpenWarmboot().CopyToNew(WarmbootStream); searches = new List <HashSearchEntry> { new HashSearchEntry(NintendoKeys.Pkg2KeySourceHash, 0x10), new HashSearchEntry(NintendoKeys.TitleKekSourceHash, 0x10), new HashSearchEntry(NintendoKeys.AesKekGenerationSourceHash, 0x10) }; SecureMonitorStream.Seek(0, SeekOrigin.Begin); hashes = SecureMonitorStream.FindKeyViaHash(searches, new SHA256Managed(), 0x10); Array.Copy(hashes[NintendoKeys.Pkg2KeySourceHash], HACGUIKeyset.Keyset.Package2KeySource, 0x10); Array.Copy(hashes[NintendoKeys.TitleKekSourceHash], HACGUIKeyset.Keyset.TitlekekSource, 0x10); Array.Copy(hashes[NintendoKeys.AesKekGenerationSourceHash], HACGUIKeyset.Keyset.AesKekGenerationSource, 0x10); HACGUIKeyset.Keyset.DeriveKeys(); // derive the additional keys obtained from package1 // close shit NXBootloaderStream.Close(); SecureMonitorStream.Close(); WarmbootStream.Close(); pkg1stream.Close(); PageExtension next = null; // move to next page (after the task is complete) page.Dispatcher.BeginInvoke(new Action(() => // move to UI thread { next = new PickNANDPage(); page.FindRoot().Navigate(next); })).Wait(); // must wait, otherwise a race condition may occur return(next); // return the page we are navigating to })); }
private static IEnumerator AddItem(GameScript script, Package package) { bool flag = false; bool flag2 = false; bool localItem = package.localItem; Item[] inventory = Patch_GameScript_AddItem.inventory.GetValue(script) as Item[]; if (package.item.q == 0) { package.item.q = 1; } ItemType type = ItemRegistry.GetTypeByID(package.item.id); if ((type & ItemType.NONSTACKING) == ItemType.STACKING) { for (int i = 0; i < 36; i++) { if (GadgetCoreAPI.CanItemsStack(inventory[i], package.item) && inventory[i].q < 9999) { inventory[i].q += package.item.q; if (inventory[i].q > 9999) { Item item = new Item(package.item.id, inventory[i].q - 9999, 0, 0, 0, new int[3], new int[3]); item.SetAllExtraData(package.item.GetAllExtraData()); inventory[i].q = 9999; Package package2 = new Package(item, package.obj, localItem); script.AddItem(package2); } RefreshSlot.Invoke(script, new object[] { i }); flag2 = true; flag = true; break; } } } if (!flag) { for (int i = (type & ItemType.EQUIP_MASK) == ItemType.DROID ? 6 : 0; i < 36; i++) { if (inventory[i].id == 0) { inventory[i] = package.item; RefreshSlot.Invoke(script, new object[] { i }); flag2 = true; break; } } } if (flag2) { script.GetComponent <AudioSource>().PlayOneShot((AudioClip)Resources.Load("Au/pickup"), Menuu.soundLevel / 10f); Vector3 position = MenuScript.player.transform.position; GameObject gameObject = (GameObject)Object.Instantiate(Resources.Load("txtGet"), new Vector3(position.x, position.y + 1f, -3.2f), Quaternion.identity); Package1 value = new Package1(GetItemName.Invoke(script, new object[] { package.item.id }) as string, package.item.q); gameObject.SendMessage("Init", value); } if (localItem) { package.obj.SendMessage("FinalReply", flag2); } else if (Network.isServer) { package.obj.SendMessage("FinalReply", flag2); } else { package.obj.GetComponent <NetworkView>().RPC("FinalReply", RPCMode.Server, new object[] { flag2 }); } return(null); }
public Facade() { package1 = new Package1(); package2 = new Package2(); }