diff --git a/README.md b/README.md
index 0385313..886d4af 100644
--- a/README.md
+++ b/README.md
@@ -1,21 +1,25 @@
# ZUGABE
-This tool automates much of the installation of h-encore. It's still in very eraly development and currently unusable.
+**This is obsolete. Please use [finalhe by soarqin](https://github.com/soarqin/finalhe).**
-[](http://www.repostatus.org/#wip)
+This tool automates much of the installation of h-encore.
## 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 and it's built to run on Mac and Linux.
-When run on Windows, it will download and start [auto-h-encore](https://github.com/noahc3/auto-h-encore).
+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!**
## Usage
-...not yet
+Download from the releases section, extract it and run the executable.
## Building
-...not yet
+Build using Visual Studio 2017, this was tested. Other C# IDEs might work as well.
## Todo
-- everything
+- Mac/Linux compatibility
+- Fix bugs (you tell me!)
## Thanks
- thefl0w for h-encore and all their work in the vita scene
diff --git a/download-resources/Qcma.zip b/download-resources/Qcma.zip
new file mode 100644
index 0000000..3f963ed
Binary files /dev/null and b/download-resources/Qcma.zip differ
diff --git a/download-resources/create.bat b/download-resources/create.bat
new file mode 100644
index 0000000..e8ea66f
--- /dev/null
+++ b/download-resources/create.bat
@@ -0,0 +1,6 @@
+cd %~dp0
+
+..\psvimg-create -n app -K %1 app PCSG90096/app
+..\psvimg-create -n appmeta -K %1 appmeta PCSG90096/appmeta
+..\psvimg-create -n license -K %1 license PCSG90096/license
+..\psvimg-create -n savedata -K %1 savedata PCSG90096/savedata
\ No newline at end of file
diff --git a/download-resources/qcma.reg b/download-resources/qcma.reg
new file mode 100644
index 0000000..c0c07cd
Binary files /dev/null and b/download-resources/qcma.reg differ
diff --git a/h-encore-auto.sln b/h-encore-auto.sln
new file mode 100644
index 0000000..42ffdd6
--- /dev/null
+++ b/h-encore-auto.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.27703.2035
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "h-encore-auto", "h-encore-auto\h-encore-auto.csproj", "{9F8577B2-16A2-4147-B264-308B68679F78}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {9F8577B2-16A2-4147-B264-308B68679F78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9F8577B2-16A2-4147-B264-308B68679F78}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9F8577B2-16A2-4147-B264-308B68679F78}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9F8577B2-16A2-4147-B264-308B68679F78}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {EA1569D4-A0AC-4F0A-9E26-B96D084A329C}
+ EndGlobalSection
+EndGlobal
diff --git a/h-encore-auto/App.xaml b/h-encore-auto/App.xaml
new file mode 100644
index 0000000..2f27785
--- /dev/null
+++ b/h-encore-auto/App.xaml
@@ -0,0 +1,9 @@
+
+
+
+
+
diff --git a/h-encore-auto/App.xaml.cs b/h-encore-auto/App.xaml.cs
new file mode 100644
index 0000000..193e704
--- /dev/null
+++ b/h-encore-auto/App.xaml.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Data;
+using System.Linq;
+using System.Windows;
+
+namespace h_encore_auto
+{
+ ///
+ /// Interaction logic for App.xaml
+ ///
+ public partial class App : Application
+ {
+ }
+}
diff --git a/h-encore-auto/AutoMode.xaml b/h-encore-auto/AutoMode.xaml
new file mode 100644
index 0000000..54627cc
--- /dev/null
+++ b/h-encore-auto/AutoMode.xaml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/h-encore-auto/AutoMode.xaml.cs b/h-encore-auto/AutoMode.xaml.cs
new file mode 100644
index 0000000..e8d44e1
--- /dev/null
+++ b/h-encore-auto/AutoMode.xaml.cs
@@ -0,0 +1,244 @@
+using System;
+using System.Diagnostics;
+using System.IO;
+using System.Windows;
+using System.Windows.Input;
+using System.Threading;
+
+namespace h_encore_auto
+{
+ ///
+ /// Interaction logic for AutoMode.xaml
+ ///
+ public partial class AutoMode : Window
+ {
+ public AutoMode()
+ {
+ InitializeComponent();
+
+ if (Directory.Exists(Ref.tempDir))
+ Util.DeleteDirectory(Ref.tempDir);
+
+ InitTimer();
+ }
+
+ private void buttonStart_Click(object sender, RoutedEventArgs e)
+ {
+ Directory.CreateDirectory(Ref.tempDir);
+ buttonStart.IsEnabled = false;
+ buttonClose.IsEnabled = false;
+ barWorking.Visibility = Visibility.Visible;
+
+ new Thread(() =>
+ {
+ Thread.CurrentThread.IsBackground = true;
+
+ Process[] pname = Process.GetProcessesByName("qcma");
+ if (pname.Length != 0)
+ {
+ foreach (var proc in pname)
+ {
+ proc.Kill();
+ }
+ MessageBox.Show("QCMA was closed, since this application has to interact with it.");
+ }
+
+ Process process = new Process();
+ ProcessStartInfo startInfo = new ProcessStartInfo();
+ ProcessStartInfo startInfoOut = new ProcessStartInfo();
+
+ startInfo.WindowStyle = ProcessWindowStyle.Hidden;
+ startInfo.FileName = "cmd.exe";
+ startInfo.WorkingDirectory = Ref.tempDir;
+
+ startInfoOut.WindowStyle = ProcessWindowStyle.Hidden;
+ 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");
+
+ 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");
+
+ 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;
+ process.Start();
+ process.WaitForExit();
+
+ startInfo.Arguments = "/C " + Ref.path7z + " x " + Ref.pathPkg;
+ process.StartInfo = startInfo;
+ process.Start();
+ process.WaitForExit();
+
+ startInfo.Arguments = "/C " + Ref.path7z + " x " + Ref.pathEnc;
+ process.StartInfo = startInfo;
+ process.Start();
+ process.WaitForExit();
+
+ Util.dlFile(Ref.urlCreateBat, "h-encore\\create.bat");
+
+ startInfo.Arguments = "/C " + Ref.path7z + " x " + Ref.pathQcma;
+ process.StartInfo = startInfo;
+ process.Start();
+ process.WaitForExit();
+
+ startInfo.Arguments = "/C " + Ref.tempDir + "pkg2zip.exe -x " + Ref.pathEntry;
+ process.StartInfo = startInfo;
+ process.Start();
+ process.WaitForExit();
+
+ 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");
+
+ startInfoOut.RedirectStandardOutput = true;
+ startInfoOut.UseShellExecute = false;
+ startInfoOut.Arguments = @"/C reg query HKEY_CURRENT_USER\Software\codestation\qcma & echo 0";
+ process.StartInfo = startInfoOut;
+ process.Start();
+ string stdout = process.StandardOutput.ReadToEnd();
+ process.WaitForExit();
+
+ if (stdout == "0")
+ {
+ Ref.isQcmaConfigFound = false;
+
+ startInfo.Arguments = @"/C reg import " + Ref.pathImportReg;
+ process.StartInfo = startInfo;
+ process.Start();
+ process.WaitForExit();
+ }
+
+ else
+ {
+ Ref.isQcmaConfigFound = true;
+
+ startInfo.Arguments = @"/C reg export HKEY_CURRENT_USER\Software\codestation\qcma " + Ref.pathBackupReg;
+ process.StartInfo = startInfo;
+ process.Start();
+ process.WaitForExit();
+
+ startInfo.Arguments = @" /C reg import " + Ref.pathImportReg;
+ process.StartInfo = startInfo;
+ process.Start();
+ process.WaitForExit();
+ }
+
+ Ref.isRegModified = true;
+
+ startInfo.Arguments = @"/C " + Ref.pathQcmaExtracted + "qcma.exe";
+ process.StartInfo = startInfo;
+ process.Start();
+
+ stage = 1;
+
+ }).Start();
+ }
+
+ private void Grid_MouseDown(object sender, MouseButtonEventArgs e)
+ {
+ try
+ {
+ DragMove();
+ }
+ catch { }
+ }
+
+ private void buttonClose_Click(object sender, RoutedEventArgs e)
+ {
+ Util.Cleanup();
+ }
+
+ private int stage = 0;
+ private System.Windows.Forms.Timer timer1;
+ public void InitTimer()
+ {
+ timer1 = new System.Windows.Forms.Timer();
+ timer1.Tick += new EventHandler(timer1_Tick);
+ timer1.Interval = 1000; // in miliseconds
+ timer1.Start();
+ }
+
+ private void timer1_Tick(object sender, EventArgs e)
+ {
+ var guide = new VitaGuide();
+ if (stage == 1)
+ {
+ for (; ; )
+ {
+ stage = 0;
+ Ref.isSecondGuide = false;
+ guide.ShowDialog();
+ Ref.isSecondGuide = true;
+
+ if (Util.IsDirectoryEmpty(Ref.pathQcmaRes + "PSVita\\APP\\"))
+ {
+ MessageBox.Show("Required folder not found. \nMake sure you did everything correctly and follow the steps again.");
+ }
+ else
+ {
+ stage = 2;
+ break;
+ }
+ }
+ }
+ if (stage == 2)
+ {
+ stage = 0;
+ new Thread(() =>
+ {
+ Thread.CurrentThread.IsBackground = true;
+
+ Process process = new Process();
+ ProcessStartInfo startInfo = new ProcessStartInfo();
+ ProcessStartInfo startInfoOut = new ProcessStartInfo();
+
+ startInfo.WindowStyle = ProcessWindowStyle.Hidden;
+ startInfo.FileName = "cmd.exe";
+ startInfo.WorkingDirectory = Ref.tempDir + "h-encore";
+
+ Ref.shortAID = new DirectoryInfo(Directory.GetDirectories(Ref.pathQcmaRes + "PSVita\\APP\\")[0]).Name;
+
+ Ref.longAID = Util.GetEncKey(Ref.shortAID);
+
+ startInfo.Arguments = "/C create.bat " + Ref.longAID;
+ process.StartInfo = startInfo;
+ process.Start();
+ process.WaitForExit();
+
+ Util.CopyDir(Ref.tempDir + "h-encore\\PCSG90096\\", Ref.pathQcmaRes + "PSVita\\APP\\" + Ref.shortAID + "\\PCSG90096\\", true);
+
+ stage = 3;
+ }).Start();
+ }
+ if (stage == 3)
+ {
+ stage = 0;
+ guide.ShowDialog();
+
+ MessageBox.Show("If not already done, wait until your Vita has copied over the exploit, then press OK.");
+
+ Util.Cleanup();
+ }
+ }
+ }
+}
diff --git a/h-encore-auto/Properties/AssemblyInfo.cs b/h-encore-auto/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..bd76d93
--- /dev/null
+++ b/h-encore-auto/Properties/AssemblyInfo.cs
@@ -0,0 +1,55 @@
+using System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("h-encore-auto")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("h-encore-auto")]
+[assembly: AssemblyCopyright("Copyright © 2018")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+//In order to begin building localizable applications, set
+//CultureYouAreCodingWith in your .csproj file
+//inside a . For example, if you are using US english
+//in your source files, set the to en-US. Then uncomment
+//the NeutralResourceLanguage attribute below. Update the "en-US" in
+//the line below to match the UICulture setting in the project file.
+
+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
+
+
+[assembly: ThemeInfo(
+ ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
+ //(used if a resource is not found in the page,
+ // or application resource dictionaries)
+ ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
+ //(used if a resource is not found in the page,
+ // app, or any theme specific resource dictionaries)
+)]
+
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/h-encore-auto/Properties/Resources.Designer.cs b/h-encore-auto/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..2270b5b
--- /dev/null
+++ b/h-encore-auto/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace h_encore_auto.Properties {
+ using System;
+
+
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("h_encore_auto.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/h-encore-auto/Properties/Resources.resx b/h-encore-auto/Properties/Resources.resx
new file mode 100644
index 0000000..ffecec8
--- /dev/null
+++ b/h-encore-auto/Properties/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/h-encore-auto/Properties/Settings.Designer.cs b/h-encore-auto/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..3526cc4
--- /dev/null
+++ b/h-encore-auto/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace h_encore_auto.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.7.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/h-encore-auto/Properties/Settings.settings b/h-encore-auto/Properties/Settings.settings
new file mode 100644
index 0000000..8f2fd95
--- /dev/null
+++ b/h-encore-auto/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/h-encore-auto/Util.cs b/h-encore-auto/Util.cs
new file mode 100644
index 0000000..dcfdc52
--- /dev/null
+++ b/h-encore-auto/Util.cs
@@ -0,0 +1,154 @@
+using System;
+using System.Net;
+using System.Net.Http;
+using System.IO;
+using System.Windows.Markup;
+using System.Windows;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Globalization;
+
+namespace h_encore_auto
+{
+ public class Util
+ {
+ private static WebClient web = new WebClient();
+ private static HttpClient http = new HttpClient();
+
+ public static string GetEncKey(string aid)
+ //Thanks to noahc3 (https://github.com/noahc3/) for this.
+ {
+ try
+ {
+ string page = http.GetStringAsync(Ref.urlCma + aid).Result;
+ return page.Substring(page.Length - 65, 64);
+ }
+ catch (Exception)
+ {
+ MessageBox.Show("Failed to get the CMA encryption key. Make sure your internet is connected and retry.");
+ return "";
+ }
+ }
+
+ public static void DeleteDirectory(string path)
+ {
+ foreach (string directory in Directory.GetDirectories(path))
+ {
+ DeleteDirectory(directory);
+ }
+ try
+ {
+ Directory.Delete(path, true);
+ }
+ catch (IOException)
+ {
+ Directory.Delete(path, true);
+ }
+ catch (UnauthorizedAccessException)
+ {
+ Directory.Delete(path, true);
+ }
+ }
+
+ public static void dlFile(string url, string filename)
+ {
+ using (WebClient client = new WebClient())
+ {
+ ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
+ client.DownloadFile(url, Ref.tempDir + filename);
+ }
+ }
+ public static void Cleanup()
+ {
+ Process[] pname = Process.GetProcessesByName("qcma");
+ if (pname.Length != 0)
+ {
+ foreach (var proc in pname)
+ {
+ proc.Kill();
+ }
+ }
+
+ Process process = new Process();
+ ProcessStartInfo startInfo = new ProcessStartInfo();
+ ProcessStartInfo startInfoOut = new ProcessStartInfo();
+ startInfo.WindowStyle = ProcessWindowStyle.Hidden;
+ startInfo.FileName = "cmd.exe";
+ startInfo.WorkingDirectory = Ref.tempDir;
+
+ if (Ref.isRegModified == true)
+ {
+ startInfo.Arguments = @"/C reg delete HKEY_CURRENT_USER\Software\codestation\qcma /f";
+ process.StartInfo = startInfo;
+ process.Start();
+ process.WaitForExit();
+ }
+
+ if (Ref.isQcmaConfigFound == true)
+ {
+ startInfo.Arguments = @"/C reg import " + Ref.pathBackupReg;
+ process.StartInfo = startInfo;
+ process.Start();
+ process.WaitForExit();
+ }
+
+ if (Directory.Exists(Ref.tempDir))
+ {
+ DeleteDirectory(Ref.tempDir);
+ }
+
+ Environment.Exit(0);
+ }
+ public static bool IsDirectoryEmpty(string path)
+ {
+ IEnumerable items = Directory.EnumerateFileSystemEntries(path);
+ using (IEnumerator en = items.GetEnumerator())
+ {
+ return !en.MoveNext();
+ }
+ }
+
+ public static string GetLang()
+ {
+ CultureInfo ci = CultureInfo.InstalledUICulture;
+
+ return ci.TwoLetterISOLanguageName;
+ }
+
+ public static void CopyDir(string sourceDirName, string destDirName, bool copySubDirs)
+ {
+ // Get the subdirectories for the specified directory.
+ DirectoryInfo dir = new DirectoryInfo(sourceDirName);
+
+ if (!dir.Exists)
+ {
+ throw new DirectoryNotFoundException("Source directory does not exist or could not be found: " + sourceDirName);
+ }
+
+ DirectoryInfo[] dirs = dir.GetDirectories();
+ // If the destination directory doesn't exist, create it.
+ if (!Directory.Exists(destDirName))
+ {
+ Directory.CreateDirectory(destDirName);
+ }
+
+ // Get the files in the directory and copy them to the new location.
+ FileInfo[] files = dir.GetFiles();
+ foreach (FileInfo file in files)
+ {
+ string temppath = Path.Combine(destDirName, file.Name);
+ file.CopyTo(temppath, false);
+ }
+
+ // If copying subdirectories, copy them and their contents to new location.
+ if (copySubDirs)
+ {
+ foreach (DirectoryInfo subdir in dirs)
+ {
+ string temppath = Path.Combine(destDirName, subdir.Name);
+ CopyDir(subdir.FullName, temppath, copySubDirs);
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/h-encore-auto/VitaGuide.xaml b/h-encore-auto/VitaGuide.xaml
new file mode 100644
index 0000000..a2564d1
--- /dev/null
+++ b/h-encore-auto/VitaGuide.xaml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/h-encore-auto/VitaGuide.xaml.cs b/h-encore-auto/VitaGuide.xaml.cs
new file mode 100644
index 0000000..66184bd
--- /dev/null
+++ b/h-encore-auto/VitaGuide.xaml.cs
@@ -0,0 +1,65 @@
+using System;
+using System.Windows;
+using System.Windows.Media.Imaging;
+
+namespace h_encore_auto
+{
+ ///
+ /// Interaction logic for VitaGuide.xaml
+ ///
+ public partial class VitaGuide : Window
+ {
+ int currImg;
+
+ string[] currText = lang.GuideText(Util.GetLang());
+
+ public VitaGuide()
+ {
+ InitializeComponent();
+
+ if (Ref.isSecondGuide == true)
+ currImg = 15;
+ else
+ currImg = 1;
+
+ imgFrame.Source = new BitmapImage(new Uri("/img/" + currImg + ".png", UriKind.Relative));
+ textField.Text = currText[currImg - 1];
+ buttonDone.Visibility = Visibility.Hidden;
+ }
+
+ private void buttonFwd_Click(object sender, RoutedEventArgs e)
+ {
+ currImg++;
+ imgFrame.Source = new BitmapImage(new Uri("/img/" + currImg + ".png", UriKind.Relative));
+ textField.Text = currText[currImg - 1];
+ buttonBck.IsEnabled = true;
+
+ if (currImg == 14 || currImg == 26)
+ {
+ buttonFwd.IsEnabled = false;
+ buttonDone.Visibility = Visibility.Visible;
+ }
+ else
+ {
+ buttonFwd.IsEnabled = true;
+ }
+ }
+
+ private void buttonBck_Click(object sender, RoutedEventArgs e)
+ {
+ currImg--;
+ imgFrame.Source = new BitmapImage(new Uri("/img/" + currImg + ".png", UriKind.Relative));
+ buttonFwd.IsEnabled = true;
+ textField.Text = currText[currImg - 1];
+
+ if (currImg == 1 || currImg == 15)
+ {
+ buttonBck.IsEnabled = false;
+ }
+ else
+ {
+ buttonBck.IsEnabled = true;
+ }
+ }
+ }
+}
diff --git a/h-encore-auto/app.config b/h-encore-auto/app.config
new file mode 100644
index 0000000..9c72f14
--- /dev/null
+++ b/h-encore-auto/app.config
@@ -0,0 +1,3 @@
+
+
+
diff --git a/h-encore-auto/h-encore-auto.csproj b/h-encore-auto/h-encore-auto.csproj
new file mode 100644
index 0000000..4155c40
--- /dev/null
+++ b/h-encore-auto/h-encore-auto.csproj
@@ -0,0 +1,185 @@
+
+
+
+
+
+ Debug
+ AnyCPU
+ {9F8577B2-16A2-4147-B264-308B68679F78}
+ WinExe
+ h_encore_auto
+ ZUGABE
+ v4.5.2
+ 512
+ {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ 4
+
+
+
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ false
+ true
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+ false
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+ false
+
+
+ icon.ico
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 4.0
+
+
+
+
+
+
+
+ MSBuild:Compile
+ Designer
+
+
+ AutoMode.xaml
+
+
+
+
+
+ VitaGuide.xaml
+
+
+ Designer
+ MSBuild:Compile
+
+
+ App.xaml
+ Code
+
+
+ Designer
+ MSBuild:Compile
+
+
+
+
+ Code
+
+
+ True
+ True
+ Resources.resx
+
+
+ True
+ Settings.settings
+ True
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+
+
+ False
+ Microsoft .NET Framework 4.5.2 %28x86 and x64%29
+ true
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.
+
+
+
+
\ No newline at end of file
diff --git a/h-encore-auto/icon.ico b/h-encore-auto/icon.ico
new file mode 100644
index 0000000..b93cb05
Binary files /dev/null and b/h-encore-auto/icon.ico differ
diff --git a/h-encore-auto/img/1.png b/h-encore-auto/img/1.png
new file mode 100644
index 0000000..51dab39
Binary files /dev/null and b/h-encore-auto/img/1.png differ
diff --git a/h-encore-auto/img/10.png b/h-encore-auto/img/10.png
new file mode 100644
index 0000000..b25b3f9
Binary files /dev/null and b/h-encore-auto/img/10.png differ
diff --git a/h-encore-auto/img/11.png b/h-encore-auto/img/11.png
new file mode 100644
index 0000000..6a94d25
Binary files /dev/null and b/h-encore-auto/img/11.png differ
diff --git a/h-encore-auto/img/12.png b/h-encore-auto/img/12.png
new file mode 100644
index 0000000..65bd5f4
Binary files /dev/null and b/h-encore-auto/img/12.png differ
diff --git a/h-encore-auto/img/13.png b/h-encore-auto/img/13.png
new file mode 100644
index 0000000..c136ddd
Binary files /dev/null and b/h-encore-auto/img/13.png differ
diff --git a/h-encore-auto/img/14.png b/h-encore-auto/img/14.png
new file mode 100644
index 0000000..e3f7a35
Binary files /dev/null and b/h-encore-auto/img/14.png differ
diff --git a/h-encore-auto/img/15.png b/h-encore-auto/img/15.png
new file mode 100644
index 0000000..51dab39
Binary files /dev/null and b/h-encore-auto/img/15.png differ
diff --git a/h-encore-auto/img/16.png b/h-encore-auto/img/16.png
new file mode 100644
index 0000000..ec3357a
Binary files /dev/null and b/h-encore-auto/img/16.png differ
diff --git a/h-encore-auto/img/17.png b/h-encore-auto/img/17.png
new file mode 100644
index 0000000..62a374a
Binary files /dev/null and b/h-encore-auto/img/17.png differ
diff --git a/h-encore-auto/img/18.png b/h-encore-auto/img/18.png
new file mode 100644
index 0000000..c136ddd
Binary files /dev/null and b/h-encore-auto/img/18.png differ
diff --git a/h-encore-auto/img/19.png b/h-encore-auto/img/19.png
new file mode 100644
index 0000000..e3f7a35
Binary files /dev/null and b/h-encore-auto/img/19.png differ
diff --git a/h-encore-auto/img/2.png b/h-encore-auto/img/2.png
new file mode 100644
index 0000000..ec3357a
Binary files /dev/null and b/h-encore-auto/img/2.png differ
diff --git a/h-encore-auto/img/20.png b/h-encore-auto/img/20.png
new file mode 100644
index 0000000..7e57203
Binary files /dev/null and b/h-encore-auto/img/20.png differ
diff --git a/h-encore-auto/img/21.png b/h-encore-auto/img/21.png
new file mode 100644
index 0000000..e6371ad
Binary files /dev/null and b/h-encore-auto/img/21.png differ
diff --git a/h-encore-auto/img/22.png b/h-encore-auto/img/22.png
new file mode 100644
index 0000000..da8d046
Binary files /dev/null and b/h-encore-auto/img/22.png differ
diff --git a/h-encore-auto/img/23.png b/h-encore-auto/img/23.png
new file mode 100644
index 0000000..fd84a77
Binary files /dev/null and b/h-encore-auto/img/23.png differ
diff --git a/h-encore-auto/img/24.png b/h-encore-auto/img/24.png
new file mode 100644
index 0000000..d74c69c
Binary files /dev/null and b/h-encore-auto/img/24.png differ
diff --git a/h-encore-auto/img/25.png b/h-encore-auto/img/25.png
new file mode 100644
index 0000000..226d399
Binary files /dev/null and b/h-encore-auto/img/25.png differ
diff --git a/h-encore-auto/img/3.png b/h-encore-auto/img/3.png
new file mode 100644
index 0000000..62a374a
Binary files /dev/null and b/h-encore-auto/img/3.png differ
diff --git a/h-encore-auto/img/4.png b/h-encore-auto/img/4.png
new file mode 100644
index 0000000..2eb8f2e
Binary files /dev/null and b/h-encore-auto/img/4.png differ
diff --git a/h-encore-auto/img/5.png b/h-encore-auto/img/5.png
new file mode 100644
index 0000000..4047703
Binary files /dev/null and b/h-encore-auto/img/5.png differ
diff --git a/h-encore-auto/img/6.png b/h-encore-auto/img/6.png
new file mode 100644
index 0000000..a645cad
Binary files /dev/null and b/h-encore-auto/img/6.png differ
diff --git a/h-encore-auto/img/7.png b/h-encore-auto/img/7.png
new file mode 100644
index 0000000..d6f3f57
Binary files /dev/null and b/h-encore-auto/img/7.png differ
diff --git a/h-encore-auto/img/8.png b/h-encore-auto/img/8.png
new file mode 100644
index 0000000..84d1363
Binary files /dev/null and b/h-encore-auto/img/8.png differ
diff --git a/h-encore-auto/img/9.PNG b/h-encore-auto/img/9.PNG
new file mode 100644
index 0000000..a066530
Binary files /dev/null and b/h-encore-auto/img/9.PNG differ
diff --git a/h-encore-auto/img/ajax-loader.gif b/h-encore-auto/img/ajax-loader.gif
new file mode 100644
index 0000000..3288d10
Binary files /dev/null and b/h-encore-auto/img/ajax-loader.gif differ
diff --git a/h-encore-auto/img/icon.ico b/h-encore-auto/img/icon.ico
new file mode 100644
index 0000000..b93cb05
Binary files /dev/null and b/h-encore-auto/img/icon.ico differ
diff --git a/h-encore-auto/lang.cs b/h-encore-auto/lang.cs
new file mode 100644
index 0000000..58923be
--- /dev/null
+++ b/h-encore-auto/lang.cs
@@ -0,0 +1,42 @@
+namespace h_encore_auto
+{
+ class lang
+ {
+ public static string[] GuideText(string lang)
+ {
+ if (lang == "en")
+ return guideEN;
+ else
+ return guideEN;
+ }
+
+ private static readonly string[] guideEN= new string[] {
+ "1. On your Vita, open the Content Manager. Make sure your Vita and PC are in the same Network!",
+ "2. Select \"Copy Content\"",
+ "3. If it tries to connect, cancel it.",
+ "4. Select \"PC\"",
+ "5. Select \"Wi-Fi\"",
+ "6. Select \"Register Device\"",
+ "7. Your Computer should show up. Select it.",
+ "8. Enter the code shown or your computer.",
+ "8. Enter the code shown or your computer.",
+ "8. Enter the code shown or your computer.",
+ "9. It should tell you that the device was registered successfully.",
+ "10. After clicking next, please wait.",
+ "11. Select \"PC -> PS Vita System\"",
+ "12. Select \"Applications\"",
+ "1. On your Vita, open the Content Manager. Make sure your Vita and PC are in the same Network!",
+ "2. Select \"Copy Content\"",
+ "3. Wait for it to connect.",
+ "4. Select \"PC -> PS Vita System\"",
+ "5. Select \"Applications\"",
+ "6. Select \"PS Vita\"",
+ "7. Tick \"h-encore\" and click \"copy\". Wait for it to complete and close Content Manager.",
+ "8. Start the new \"h-encore\" bubble.",
+ "9. Select \"Install HENkaku\"",
+ "10. Select \"Download VitaShell\"",
+ "11. Finally, exit.",
+ "Done. Keep in mind that you have to launch h-encore every time you reboot the Vita. \nWhen launched, just press Exit again. This reapplies the exploit."
+ };
+ }
+}
diff --git a/h-encore-auto/packages.config b/h-encore-auto/packages.config
new file mode 100644
index 0000000..65fbff3
--- /dev/null
+++ b/h-encore-auto/packages.config
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/h-encore-auto/ref.cs b/h-encore-auto/ref.cs
new file mode 100644
index 0000000..f1fde76
--- /dev/null
+++ b/h-encore-auto/ref.cs
@@ -0,0 +1,44 @@
+using System;
+using System.IO;
+
+namespace h_encore_auto
+{
+ public class Ref
+ {
+ public static readonly string urlCma = "http://cma.henkaku.xyz/?aid=";
+ public static readonly string urlPsvimg = "https://github.com/yifanlu/psvimgtools/releases/download/v0.1/psvimgtools-0.1-win32.zip";
+ public static readonly string urlPkg = "https://github.com/mmozeiko/pkg2zip/releases/download/v1.8/pkg2zip_32bit.zip";
+ public static readonly string urlEnc = "https://github.com/TheOfficialFloW/h-encore/releases/download/v1.0/h-encore.zip";
+ public static readonly string urlEntry = "http://ares.dl.playstation.net/cdn/JP0741/PCSG90096_00/xGMrXOkORxWRyqzLMihZPqsXAbAXLzvAdJFqtPJLAZTgOcqJobxQAhLNbgiFydVlcmVOrpZKklOYxizQCRpiLfjeROuWivGXfwgkq.pkg";
+ public static readonly string url7zr = "https://www.7-zip.org/a/7zr.exe";
+ public static readonly string url7za = "https://www.7-zip.org/a/7z1805-extra.7z";
+ public static readonly string urlQcma = "https://raw.githubusercontent.com/fyr77/ZUGABE/master/download-resources/Qcma.zip";
+ public static readonly string urlReg = "https://raw.githubusercontent.com/fyr77/ZUGABE/master/download-resources/qcma.reg";
+ public static readonly string urlCreateBat = "https://raw.githubusercontent.com/fyr77/ZUGABE/master/download-resources/create.bat";
+
+ public static readonly string pathCurrPic = "img/1.png";
+
+ public static readonly string tempDir = Path.GetTempPath() + @"encore_temp\";
+
+ public static bool isSecondGuide = false;
+
+ public static bool isQcmaConfigFound = false;
+
+ public static readonly string ProgramFilesx86 = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86);
+ public static readonly string ProgramFiles = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
+ public static string longAID = null;
+ public static string shortAID = null;
+ public static readonly string path7z = tempDir + "7za.exe";
+ public static readonly string pathPsvimg = tempDir + "psvimgtools.zip";
+ public static readonly string pathPkg = tempDir + "pkg2zip.zip";
+ public static readonly string pathEnc = tempDir + "h-encore.zip";
+ public static readonly string pathEntry = tempDir + "entryPoint.pkg";
+ public static readonly string pathQcma = tempDir + "qcma.zip";
+ public static readonly string pathQcmaExtracted = tempDir + "Qcma\\";
+ 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 isRegModified = false;
+ }
+}