diff --git a/README.md b/README.md index 886d4af..c12d7d5 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,14 @@ # ZUGABE - -**This is obsolete. Please use [finalhe by soarqin](https://github.com/soarqin/finalhe).** - This tool automates much of the installation of h-encore. +[![Project Status: Active – The project has reached a stable, usable state and is being actively developed.](http://www.repostatus.org/badges/latest/active.svg)](http://www.repostatus.org/#active) + ## About This tool automates the install process of thefl0w's h-encore exploit for PS Vita, at least everything that can be done on the PC. Since I can't code in C or C++, I was unable to use OpenCMA as a backend, so I used QCMA. It's automatically downloaded and does not require to be installed. Configuration of QCMA is done via registry edits. The application also detects existing QCMA installations and restores the original settings after the exploit was installed. -**Attention: This tool only supports connection of the PSVita using Wi-Fi, therefore it's currently only compatible with PSVita/PSTV on Firmware 3.68!** +**Attention: This tool only supports connection of the PSVita using Wi-Fi!** ## Usage Download from the releases section, extract it and run the executable. @@ -18,7 +17,8 @@ Download from the releases section, extract it and run the executable. Build using Visual Studio 2017, this was tested. Other C# IDEs might work as well. ## Todo -- Mac/Linux compatibility +- Translations +- Mac/Linux Compatibilty - Fix bugs (you tell me!) ## Thanks diff --git a/download-resources/qcma.reg b/download-resources/qcma.reg index c0c07cd..e38a074 100644 Binary files a/download-resources/qcma.reg and b/download-resources/qcma.reg differ diff --git a/h-encore-auto/AutoMode.xaml.cs b/h-encore-auto/AutoMode.xaml.cs index e8d44e1..bdd592a 100644 --- a/h-encore-auto/AutoMode.xaml.cs +++ b/h-encore-auto/AutoMode.xaml.cs @@ -16,8 +16,17 @@ namespace h_encore_auto { InitializeComponent(); - if (Directory.Exists(Ref.tempDir)) - Util.DeleteDirectory(Ref.tempDir); + if (File.Exists(Ref.tempDir + "keepfile")) + { + Ref.areFilesKept = true; + Util.keepFilesCleanup(); + } + else + { + Ref.areFilesKept = false; + if (Directory.Exists(Ref.tempDir)) + Util.DeleteDirectory(Ref.tempDir); + } InitTimer(); } @@ -55,30 +64,33 @@ namespace h_encore_auto startInfoOut.FileName = "cmd.exe"; startInfoOut.WorkingDirectory = Ref.tempDir; - // 7ZIP Download and extraction - Util.dlFile(Ref.url7zr, "7zr.exe"); - Util.dlFile(Ref.url7za, "7z-extra.7z"); + if (Ref.areFilesKept == false) + { + // 7ZIP Download and extraction + Util.dlFile(Ref.url7zr, "7zr.exe"); + Util.dlFile(Ref.url7za, "7z-extra.7z"); - startInfo.Arguments = "/C 7zr.exe x 7z-extra.7z"; - process.StartInfo = startInfo; - process.Start(); - process.WaitForExit(); + startInfo.Arguments = "/C 7zr.exe x 7z-extra.7z"; + process.StartInfo = startInfo; + process.Start(); + process.WaitForExit(); - //Rest of the tool downloads - Util.dlFile(Ref.urlPsvimg, "psvimgtools.zip"); - Util.dlFile(Ref.urlPkg, "pkg2zip.zip"); - Util.dlFile(Ref.urlEnc, "h-encore.zip"); - Util.dlFile(Ref.urlEntry, "entryPoint.pkg"); - Util.dlFile(Ref.urlQcma, "qcma.zip"); - Util.dlFile(Ref.urlReg, "qcma.reg"); + //Rest of the tool downloads + Util.dlFile(Ref.urlPsvimg, "psvimgtools.zip"); + Util.dlFile(Ref.urlPkg, "pkg2zip.zip"); + Util.dlFile(Ref.urlEnc, "h-encore.zip"); + Util.dlFile(Ref.urlEntry, "entryPoint.pkg"); + Util.dlFile(Ref.urlQcma, "qcma.zip"); + Util.dlFile(Ref.urlReg, "qcma.reg"); - string text = File.ReadAllText(Ref.pathImportReg); - text = text.Replace("REPLACE", Ref.pathQcmaRes); - File.WriteAllText(Ref.pathImportReg, text); - text = text.Replace("\\", "/"); - File.WriteAllText(Ref.pathImportReg, text); - text = text.Replace("HKEY_CURRENT_USER/Software/codestation/qcma", @"HKEY_CURRENT_USER\Software\codestation\qcma"); - File.WriteAllText(Ref.pathImportReg, text); + string text = File.ReadAllText(Ref.pathImportReg); + text = text.Replace("REPLACE", Ref.pathQcmaRes); + File.WriteAllText(Ref.pathImportReg, text); + text = text.Replace("\\", "/"); + File.WriteAllText(Ref.pathImportReg, text); + text = text.Replace("HKEY_CURRENT_USER/Software/codestation/qcma", @"HKEY_CURRENT_USER\Software\codestation\qcma"); + File.WriteAllText(Ref.pathImportReg, text); + } startInfo.Arguments = "/C " + Ref.path7z + " x " + Ref.pathPsvimg; process.StartInfo = startInfo; @@ -110,6 +122,20 @@ namespace h_encore_auto Util.CopyDir(Ref.tempDir + "app\\PCSG90096\\", Ref.tempDir + "h-encore\\app\\ux0_temp_game_PCSG90096_app_PCSG90096\\",true); File.Copy(Ref.tempDir + "app\\PCSG90096\\sce_sys\\package\\temp.bin", Ref.tempDir + @"h-encore\license\ux0_temp_game_PCSG90096_license_app_PCSG90096\6488b73b912a753a492e2714e9b38bc7.rif"); + try + { + string path = Ref.tempDir + "app\\PCSG90096\\resource\\"; + foreach (string k in Ref.trims) + { + Util.DeleteDirectory(path + k); + } + } + catch (Exception ex) + { + MessageBox.Show("Exception: " + ex.Message + "\nYou should tell the developer in a github issue. Include a screenshot if possible!"); + return; + } + startInfoOut.RedirectStandardOutput = true; startInfoOut.UseShellExecute = false; startInfoOut.Arguments = @"/C reg query HKEY_CURRENT_USER\Software\codestation\qcma & echo 0"; diff --git a/h-encore-auto/Util.cs b/h-encore-auto/Util.cs index dcfdc52..dab67d8 100644 --- a/h-encore-auto/Util.cs +++ b/h-encore-auto/Util.cs @@ -94,7 +94,12 @@ namespace h_encore_auto if (Directory.Exists(Ref.tempDir)) { - DeleteDirectory(Ref.tempDir); + if (MessageBox.Show("Do you want to keep the downloaded files for future use?\nPressing no will wipe any leftover files of this application off your computer.", "Keep Files?", MessageBoxButton.YesNo) == MessageBoxResult.Yes) + { + keepFilesCleanup(); + } + else + DeleteDirectory(Ref.tempDir); } Environment.Exit(0); @@ -150,5 +155,38 @@ namespace h_encore_auto } } } + public static void keepFilesCleanup() + { + if (!File.Exists(Ref.tempDir + "keepfile")) + { + File.Create(Ref.tempDir + "keepfile"); + } + + string backupTemp = Ref.tempDir + "keepfiles\\"; + Directory.CreateDirectory(backupTemp); + + foreach (string download in Ref.downloads) + { + File.Copy(Ref.tempDir + download, backupTemp + download); + } + + Util.DeleteDirectory(Ref.tempDir + "\\app"); + Util.DeleteDirectory(Ref.tempDir + "\\Far"); + Util.DeleteDirectory(Ref.tempDir + "\\h-encore"); + Util.DeleteDirectory(Ref.tempDir + "\\Qcma"); + Util.DeleteDirectory(Ref.tempDir + "\\QcmaRes"); + Util.DeleteDirectory(Ref.tempDir + "\\x64"); + + foreach (string file in Directory.GetFiles(Ref.tempDir)) + { + File.Delete(file); + } + + foreach (string download in Ref.downloads) + { + File.Copy(backupTemp + download, Ref.tempDir + download); + } + Util.DeleteDirectory(backupTemp); + } } } \ No newline at end of file diff --git a/h-encore-auto/VitaGuide.xaml.cs b/h-encore-auto/VitaGuide.xaml.cs index 66184bd..47f662f 100644 --- a/h-encore-auto/VitaGuide.xaml.cs +++ b/h-encore-auto/VitaGuide.xaml.cs @@ -50,7 +50,7 @@ namespace h_encore_auto currImg--; imgFrame.Source = new BitmapImage(new Uri("/img/" + currImg + ".png", UriKind.Relative)); buttonFwd.IsEnabled = true; - textField.Text = currText[currImg - 1]; + textField.Text = currText[currImg]; if (currImg == 1 || currImg == 15) { diff --git a/h-encore-auto/ref.cs b/h-encore-auto/ref.cs index f1fde76..1f55cae 100644 --- a/h-encore-auto/ref.cs +++ b/h-encore-auto/ref.cs @@ -20,6 +20,31 @@ namespace h_encore_auto public static readonly string tempDir = Path.GetTempPath() + @"encore_temp\"; + public static readonly string[] trims = new string[] { + "movie\\", + "image\\bg\\", + "image\\ev\\", + "image\\icon\\", + "image\\stitle\\", + "image\\tachie\\", + "sound\\bgm\\", + "sound\\se\\", + "sound\\sec\\", + "sound\\voice\\", + "text\\01\\" + }; + + public static readonly string[] downloads = new string[] { + "7zr.exe", + "7z-extra.7z", + "entryPoint.pkg", + "h-encore.zip", + "pkg2zip.zip", + "psvimgtools.zip", + "qcma.reg", + "qcma.zip" + }; + public static bool isSecondGuide = false; public static bool isQcmaConfigFound = false; @@ -38,6 +63,7 @@ namespace h_encore_auto public static readonly string pathBackupReg = tempDir + "backup.reg"; public static readonly string pathImportReg = tempDir + "qcma.reg"; public static readonly string pathQcmaRes = tempDir + "QcmaRes\\"; + public static bool areFilesKept = false; public static bool isRegModified = false; }