RCxe|UTMtZyJIn3R
zK1{*dA(JC9O*f@OMMAe8*LNSjL71uPx`?kz7_1a4iy;ZXe_08h^k1-R*aFQbMU(fP
zPT+}Lth^Yn6#TqOr~&h)CdMcoFlSx=Sszc7ZVF9C>_K9WfQPYBP$zuJhKd&Ez2mT<>GE
zS7~jJ#@biI6+w&~TetifX+8UoZz{?Dqp@*!wW_K!9FutNmG(@^+f1B~{5rXU_+~Dw
z9uCjhMSgK)U@BIe!54jI?=!oBh{VC=NmHrr6e
zP;*)rF&4MQ&ayq_q>GSb;i&qM;BSr@HVki}JyN~-voYLfg=S>W=OR&AV&TSas8!+Y
z-z^>cnIejBA7#gUio<`N^%hY>6tgGWX1iB@DQUjyVVa*T~ujK{jpcZ&5N>i`9tH!7cl~@vR4ESZbnX0
zew&NX=835u88IKrOLbR*8WT~U6Nz&7b5@Q)UOeMV|$;$fhKjP1=_S0$OtlTPySWL#i`tR$*!N`@l;%M{Y;((b@i7E#dR6
zAVPb4pntCC5nSoll)O`XfQxr@174(9b?#<%-$3OFM>~sAr~K=FF&E)_mJOmRNOLfa
zneJ-b=seXul6Cdz!|V19oT!zxrU~digS|W7MSC7-In}g_S-t43tN0?(1>OUkf@&&2
zFv+NN|COokGY)7BgYnM8o+&minnN
zVGTs*uF+f--Kj3+4)F_GN%@{qS+8IVN`D=qqYfq&SG+l*zA)Ls5)^w`n+FwPa7(BU
zddE6N@8_5kLGD467Fi{0tOQ3RBI+iR&|5ru($7JWIyEPk1RHfZ0@^9mk6Cjua5%Oo
ziESHP)*x#QjSN;m75$S@-KWZRDhUrxh_7+{NdFdl9h!&XDQcM!hq&Jmg~J+{Pr9e-
z@_AJ9%7bQdJ*8yPu(54&ZUuGWYYZaYdul(GT(@uCXjO=VtImLI7qm2s53+hv`l;N>
z!SSrQ
zY;D8U9HF>KIUk{wS+g)IACaWl<2K>5ARuc9TU-Bo6k=~2d!{e#mdq2)qP~kbi_Uf7
z0pg|}{v2ttafI=R;;sbovz7E0TuinjBOlF7FOk!bT?xgxy94UZ-O(V{e$Ggd(VM&W
z{_^SIlhUPyavE9dhzh5l5Nq|fn0tCw1i*_{!F1_1Wud3UzC}bvfOH)DU_KoNxB(Lb
zbNw58T*5&*8wnVkl0OoRfdj%YN)iE3fC$$PBf#3V%eg4{HUcC-p_X&GunrecQ~REi
z=R|vBvCBDyJ)GATxVU_mC2%6cLqosIcoASZPMc$a6O+ezaizjM5|Fsy!S_Vs+5wNO
zfhBN;djoI?9+`jxz#QgH;NB1(b5afW7z~_5z$4DaNz31uwm_7hah5%J6ylO0t}pO{t^Sd$m)daPyA6&9Ic@mSr<@$eGaS4BxetGCi{X-Q
z4nkZiI12orU+6#e%-_S~aNM!vlRxA9)iZzfi^h`9U;T~x7mxo{FB_i6AAg)a(Dqn$
ztqvxDOhPg6zBCUiMHjtQMGcL@Q*hLy9u$Hu+Ul^OvIZJOqq|a$x{|0Aye>KrPeWt$
z1o#E`bzEsQJlTyDh=LFlnl9SUm!d_(5%FYKnljk~=S!tg-Ra6WDp|{wMpj{LMWe{B
z6c2Yijc)z3JqU(E{Q+ij6i=ah&;$R(Nkxsri{eU#1oj8+_Vy-u;9TjDv5Kp=H(GTW
zf$r-^qnl9NsehBtHuRDnv`xd~{CuI!?|E3_i}&$^Jn=^l`g$-tNO%IC_BT TitleScreen.Height)
+ {
+ g.DrawImage(TitleScreen, 3, 9, 122, 92);
+ }
+ else if (TitleScreen.Width < TitleScreen.Height)
+ {
+ g.FillRectangle(new SolidBrush(Color.Black), 3, 9, 122, 92);
+ g.DrawImage(TitleScreen, 30, 9, 69, 92);
+ }
+ else
+ {
+ g.FillRectangle(new SolidBrush(Color.FromArgb(37, 37, 37)), 3, 9, 122, 92);
+ g.FillRectangle(new SolidBrush(Color.Black), 5, 11, 118, 88);
+ //g.InterpolationMode = InterpolationMode.NearestNeighbor;
+ g.DrawImage(TitleScreen, new Rectangle(32, 23, 64, 64));
+ //g.InterpolationMode = InterpolationMode.Default;
+ }
+ }
+ else
+ {
+ g.FillRectangle(new SolidBrush(Color.FromArgb(37, 37, 37)), 3, 9, 122, 92);
+ g.FillRectangle(new SolidBrush(Color.Black), 5, 11, 118, 88);
+ }
+
+ if (Frame == null)
+ {
+ vc.AddString("Virtual Console.", font.FontFamily,
+ (int)(FontStyle.Bold | FontStyle.Italic),
+ g.DpiY * 9.2F / 72.0F, rectangleVC, format);
+ g.DrawPath(pen, vc);
+ g.FillPath(brush, vc);
+ }
+ else
+ g.DrawImage(Frame, new Rectangle(0, 0, 128, 128));
+
+ return img;
+ }
+ }
+}
diff --git a/Log.cs b/Log.cs
new file mode 100644
index 0000000..ce59ee1
--- /dev/null
+++ b/Log.cs
@@ -0,0 +1,125 @@
+using System;
+using System.Diagnostics;
+using System.IO;
+
+namespace Cll
+{
+ public static class Log
+ {
+ public enum TabMode
+ {
+ None,
+ OnlyFirst,
+ ExceptFirst,
+ All
+ }
+
+ private static string _filename;
+ public static string Filename { get { return _filename != null ? _filename : ""; } }
+ public static void SaveIn(String filename, bool clear = true)
+ {
+ if (filename != null && filename.Length > 0)
+ {
+ _filename = filename;
+ if (clear)
+ File.Delete(filename);
+ }
+ else
+ _filename = null;
+ }
+
+ public static void Write(string value)
+ {
+ Debug.Write(value);
+ Console.Write(value);
+ if (_filename != null)
+ File.AppendAllText(_filename, value);
+ }
+
+ public static void WriteLine(string value)
+ {
+ Debug.WriteLine(value);
+ Console.WriteLine(value);
+ if (_filename != null)
+ File.AppendAllText(_filename, value + "\r\n");
+ }
+
+ public static void WriteLine(string value, int width, int tab, TabMode mode)
+ {
+ int tabLength = GetTabLength(value);
+ string t = tab > 0 ? new string(' ', tab) : value.Substring(0, tabLength);
+ string s = value.Substring(tabLength, value.Length - tabLength);
+ string[] words = s.Split(new char[] { ' ' });
+
+ if (words.Length == 1)
+ WriteLine((mode == TabMode.All || mode == TabMode.OnlyFirst ? t : "") + s);
+
+ else if (words.Length > 1)
+ {
+ int charCount = words[0].Length;
+ int start = 0;
+ int i = 1;
+ for (; i < words.Length; i++)
+ {
+ if ((mode == TabMode.All || mode == TabMode.OnlyFirst ? t.Length : 0) +
+ charCount + words[i].Length + 1 < width)
+ charCount += words[i].Length + 1;
+ else
+ {
+ WriteLine((mode == TabMode.All || mode == TabMode.OnlyFirst ? t : "") +
+ s.Substring(start, charCount));
+ start += charCount + 1;
+ charCount = words[i].Length;
+ break;
+ }
+
+ if (i + 1 == words.Length)
+ WriteLine((mode == TabMode.All || mode == TabMode.OnlyFirst ? t : "") +
+ s.Substring(start, charCount));
+ }
+ i++;
+ for (; i < words.Length; i++)
+ {
+ if ((mode == TabMode.All || mode == TabMode.ExceptFirst ? t.Length : 0) +
+ charCount + words[i].Length + 1 < width)
+ charCount += words[i].Length + 1;
+ else
+ {
+ WriteLine((mode == TabMode.All || mode == TabMode.ExceptFirst ? t : "") +
+ s.Substring(start, charCount));
+ start += charCount + 1;
+ charCount = words[i].Length;
+ }
+
+ if (i + 1 == words.Length)
+ WriteLine((mode == TabMode.All || mode == TabMode.ExceptFirst ? t : "") +
+ s.Substring(start, charCount));
+ }
+ }
+ else
+ WriteLine(mode == TabMode.All || mode == TabMode.OnlyFirst ? t : "");
+ }
+
+ public static void WriteText(string text, int width, int tab, TabMode mode)
+ {
+ text = text.Replace("\r", "");
+ string[] lines = text.Split(new char[] { '\n' });
+
+ foreach (string line in lines)
+ WriteLine(line, width, tab, mode);
+ }
+
+ private static int GetTabLength(string line)
+ {
+ int i;
+
+ for (i = 0; i < line.Length; i++)
+ {
+ if (!char.IsWhiteSpace(line[i]))
+ break;
+ }
+
+ return i;
+ }
+ }
+}
diff --git a/NusContent.cs b/NusContent.cs
new file mode 100644
index 0000000..af7db5c
--- /dev/null
+++ b/NusContent.cs
@@ -0,0 +1,365 @@
+using System;
+using System.Diagnostics;
+using System.Drawing;
+using System.IO;
+using System.Text;
+using System.Xml;
+using Microsoft.Win32;
+
+namespace _64Inject
+{
+ public static class NusContent
+ {
+ public const uint CommonKeyHashCRC32 = 0xB92B703D;
+
+ public static string GetJavaVersion()
+ {
+ try
+ {
+ ProcessStartInfo startInfo = new ProcessStartInfo("java", "-version");
+ startInfo.RedirectStandardOutput = true;
+ startInfo.RedirectStandardError = true;
+ startInfo.UseShellExecute = false;
+ startInfo.CreateNoWindow = true;
+ Process java = Process.Start(startInfo);
+ java.Start();
+ java.WaitForExit();
+ string version = java.StandardError.ReadLine();
+ java.Dispose();
+ //version = version.Split(' ')[2].Replace("\"", "");
+ return version;
+ }
+ catch
+ {
+ return null;
+ }
+
+ /*object vesion = null;
+ RegistryKey javaRE = Registry.LocalMachine.OpenSubKey("SOFTWARE\\JavaSoft\\Java Runtime Environment");
+
+ if (javaRE != null)
+ version = javaRE.GetValue("CurrentVersion");
+
+ if (version != null)
+ return version.ToString();
+ else
+ return null;*/
+ }
+
+ public struct JNUSToolConfig
+ {
+ public const string UpdateServer = "http://ccs.cdn.wup.shop.nintendo.net/ccs/download";
+ public const string TAGAYA1 = "https://tagaya.wup.shop.nintendo.net/tagaya/versionlist/EUR/EU/latest_version";
+ public const string TAGAYA2 = "https://tagaya-wup.cdn.nintendo.net/tagaya/versionlist/EUR/EU/list/%d.versionlist";
+ }
+
+ public static string Check(string path)
+ {
+ if (File.Exists(path + "\\code\\app.xml") &&
+ Directory.Exists(path + "\\content") &&
+ File.Exists(path + "\\meta\\meta.xml"))
+ {
+ XmlDocument xmlMeta = new XmlDocument();
+ xmlMeta.Load(path + "\\meta\\meta.xml");
+ XmlNode meta_title_id = xmlMeta.SelectSingleNode("menu/title_id");
+ return meta_title_id.InnerText;
+ }
+ return null;
+ }
+
+ public static string CheckEncrypted(string path)
+ {
+ if (File.Exists(path + "\\title.tmd") &&
+ File.Exists(path + "\\title.tik") &&
+ File.Exists(path + "\\title.cert"))
+ {
+ byte[] id = new byte[8];
+ FileStream fs = File.OpenRead(path + "\\title.tmd");
+ fs.Position = 0x18C;
+ fs.Read(id, 0, 8);
+ fs.Close();
+ return BitConverter.ToString(id).Replace("-", "");
+ }
+ return null;
+ }
+
+ public static void CheckBatchFiles()
+ {
+ if (!Directory.Exists("resources"))
+ Directory.CreateDirectory("resources");
+
+ if (!File.Exists("resources\\pack.bat"))
+ {
+ StreamWriter sw = File.CreateText("resources\\pack.bat");
+ sw.WriteLine("@echo off");
+ sw.WriteLine("cd resources\\nuspacker");
+ sw.Write("java -jar NUSPacker.jar -in %1 -out %2");
+ sw.Close();
+ }
+
+ if (!File.Exists("resources\\unpack.bat"))
+ {
+ StreamWriter sw = File.CreateText("resources\\unpack.bat");
+ sw.WriteLine("@echo off");
+ sw.WriteLine("cd resources\\jnustool");
+ sw.Write("java -jar JNUSTool.jar %1 -file %2");
+ sw.Close();
+ }
+ }
+
+ private static bool IsValidCommonKey(string key)
+ {
+ byte[] array = Encoding.ASCII.GetBytes(key.ToUpper());
+ uint hash = Cll.Security.ComputeCRC32(array, 0, array.Length);
+ if (hash == CommonKeyHashCRC32)
+ return true;
+ return false;
+ }
+
+ public static bool LoadKey(string key)
+ {
+ if (NusContent.IsValidCommonKey(key))
+ {
+ try
+ {
+ if (!Directory.Exists("resources\\nuspacker"))
+ Directory.CreateDirectory("resources\\nuspacker");
+ if (!Directory.Exists("resources\\jnustool"))
+ Directory.CreateDirectory("resources\\jnustool");
+
+ StreamWriter sw = File.CreateText("resources\\nuspacker\\encryptKeyWith");
+ sw.WriteLine(key.ToUpper());
+ sw.Close();
+ sw = File.CreateText("resources\\jnustool\\config");
+ sw.WriteLine(NusContent.JNUSToolConfig.UpdateServer);
+ sw.WriteLine(key.ToUpper());
+ sw.WriteLine("updatetitles.csv");
+ sw.WriteLine(NusContent.JNUSToolConfig.TAGAYA1);
+ sw.Write(NusContent.JNUSToolConfig.TAGAYA2);
+ sw.Close();
+ return true;
+ }
+ catch
+ {
+ return false;
+ }
+ }
+ return false;
+ }
+
+ public static bool CheckCommonKeyFiles()
+ {
+ StreamReader sr;
+ StreamWriter sw;
+ string jnustoolKey = "";
+ string nuspackerKey = "";
+ bool jnustoolKeyValid = false;
+ bool nuspackerKeyValid = false;
+
+ if (File.Exists("resources\\jnustool\\config"))
+ {
+ sr = File.OpenText("resources\\jnustool\\config");
+ sr.ReadLine();
+ jnustoolKey = sr.ReadLine();
+ sr.Close();
+ jnustoolKeyValid = IsValidCommonKey(jnustoolKey);
+ }
+
+ if (File.Exists("resources\\nuspacker\\encryptKeyWith"))
+ {
+ sr = File.OpenText("resources\\nuspacker\\encryptKeyWith");
+ nuspackerKey = sr.ReadLine();
+ sr.Close();
+ nuspackerKeyValid = IsValidCommonKey(nuspackerKey);
+ }
+
+ if (jnustoolKeyValid && nuspackerKeyValid)
+ return true;
+ else if (jnustoolKeyValid && !nuspackerKeyValid)
+ {
+ try
+ {
+ sw = File.CreateText("resources\\nuspacker\\encryptKeyWith");
+ sw.WriteLine(jnustoolKey);
+ sw.Close();
+ return true;
+ }
+ catch
+ {
+ return false;
+ }
+ }
+ else if (!jnustoolKeyValid && nuspackerKeyValid)
+ {
+ try
+ {
+ sw = File.CreateText("resources\\jnustool\\config");
+ sw.WriteLine(JNUSToolConfig.UpdateServer);
+ sw.WriteLine(nuspackerKey);
+ sw.WriteLine("updatetitles.csv");
+ sw.WriteLine(JNUSToolConfig.TAGAYA1);
+ sw.Write(JNUSToolConfig.TAGAYA2);
+ sw.Close();
+ return true;
+ }
+ catch
+ {
+ return false;
+ }
+ }
+ else
+ return false;
+ }
+
+ public static bool Encrypt(string inputPath, string outputPath)
+ {
+ string titleId = Check(inputPath);
+ if (titleId != null &&
+ CheckCommonKeyFiles() &&
+ GetJavaVersion() != null &&
+ File.Exists("resources\\nuspacker\\NUSPacker.jar"))
+ {
+ NusContent.CheckBatchFiles();
+ Process encrypt = Process.Start("resources\\pack.bat", "\"" + inputPath + "\" \"" + outputPath + "\"");
+ encrypt.WaitForExit();
+ encrypt.Dispose();
+ return true;
+ }
+ return false;
+ }
+
+ public static bool Decrypt(string inputPath, string outputPath)
+ {
+ string titleId = CheckEncrypted(inputPath);
+ if (titleId != null &&
+ CheckCommonKeyFiles() &&
+ GetJavaVersion() != null &&
+ File.Exists("resources\\jnustool\\JNUSTool.jar"))
+ {
+ string name = JNUSToolWrapper(inputPath, 0, Int32.MaxValue, titleId, ".*");
+ if (name != null)
+ {
+ Useful.DirectoryCopy(name, outputPath, true);
+ Directory.Delete(name, true);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public static string JNUSToolWrapper(string inputPath, int minFileLength, int maxFileLength, string titleId, string filter)
+ {
+ if (inputPath == null)
+ throw new Exception("JNUSToolWrapper: Input path is null.");
+ if (minFileLength < 0)
+ throw new Exception("JNUSToolWrapper: Min file length < zero.");
+ if (minFileLength > maxFileLength)
+ throw new Exception("JNUSToolWrapper: Min file length > Max file length.");
+ if (titleId == null)
+ throw new Exception("JNUSToolWrapper: Title Id is null.");
+
+ try
+ {
+ string[] directories = Directory.GetDirectories("resources\\jnustool");
+ foreach (string dir in directories)
+ Directory.Delete(dir, true);
+
+ Directory.CreateDirectory("resources\\jnustool\\tmp_" + titleId);
+
+ string[] file = Directory.GetFiles(inputPath);
+ FileInfo[] fileInfo = new FileInfo[file.Length];
+
+ for (int i = 0; i < file.Length; i++)
+ {
+ fileInfo[i] = new FileInfo(file[i]);
+ if (fileInfo[i].Length >= minFileLength && fileInfo[i].Length <= maxFileLength)
+ File.Copy(inputPath + "\\" + fileInfo[i].Name, "resources\\jnustool\\tmp_" + titleId + "\\" + fileInfo[i].Name, true);
+ }
+
+ NusContent.CheckBatchFiles();
+ Process decrypt = Process.Start("resources\\unpack.bat", titleId + " " + filter);
+ decrypt.WaitForExit();
+ decrypt.Dispose();
+
+ Directory.Delete("resources\\jnustool\\tmp_" + titleId, true);
+ string[] result = Directory.GetDirectories("resources\\jnustool");
+
+ if (result.Length == 1)
+ return result[0];
+ }
+ catch
+ {
+ Cll.Log.WriteLine("JNUSToolWrapper: Failed.");
+ }
+ return null;
+ }
+
+ public static bool ConvertToTGA(Bitmap image, string outputFileName)
+ {
+ if (image.Width > 0xFFFF || image.Height > 0xFFFF)
+ return false;
+
+ byte[] header = {
+ 0x00, 0x00, 0x02, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ (byte)(image.Width & 0xFF),
+ (byte)((image.Width >> 8) & 0xFF),
+ (byte)(image.Height & 0xFF),
+ (byte)((image.Height >> 8) & 0xFF),
+ 0x00, 0x00 };
+
+ byte[] footer = {
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x54, 0x52, 0x55, 0x45,
+ 0x56, 0x49, 0x53, 0x49,
+ 0x4F, 0x4E, 0x2D, 0x58,
+ 0x46, 0x49, 0x4C, 0x45,
+ 0x2E, 0x00 };
+
+ int bytesPerPixel = 0;
+ if (image.PixelFormat == System.Drawing.Imaging.PixelFormat.Format32bppArgb)
+ {
+ header[0x10] = 0x20;
+ header[0x11] = 0x08;
+ bytesPerPixel = 4;
+ }
+ else if (image.PixelFormat == System.Drawing.Imaging.PixelFormat.Format24bppRgb)
+ {
+ header[0x10] = 0x18;
+ bytesPerPixel = 3;
+ }
+ else
+ return false;
+
+ Bitmap bmp = new Bitmap(image.Width, image.Height, image.PixelFormat);
+ Graphics g = Graphics.FromImage(bmp);
+ g.DrawImage(image, new Rectangle(0, 0, bmp.Width, bmp.Height));
+ g.Dispose();
+
+ bmp.RotateFlip(RotateFlipType.RotateNoneFlipY);
+ Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
+ System.Drawing.Imaging.BitmapData data =
+ bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, bmp.PixelFormat);
+ int length = data.Width * data.Height * bytesPerPixel;
+ byte[] bmpBytes = new byte[length];
+ for (int y = 0; y < data.Height; ++y)
+ {
+ IntPtr ptr = (IntPtr)((long)data.Scan0 + y * data.Stride);
+ System.Runtime.InteropServices.Marshal.Copy(
+ ptr, bmpBytes, y * data.Width * bytesPerPixel, data.Width * bytesPerPixel);
+ }
+ bmp.UnlockBits(data);
+ bmp.Dispose();
+
+ FileStream fs = File.Open(outputFileName, FileMode.Create);
+ fs.Write(header, 0, header.Length);
+ fs.Write(bmpBytes, 0, bmpBytes.Length);
+ fs.Write(footer, 0, footer.Length);
+ fs.Close();
+
+ return true;
+ }
+ }
+}
diff --git a/Program.cs b/Program.cs
new file mode 100644
index 0000000..ba616fd
--- /dev/null
+++ b/Program.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Windows.Forms;
+
+namespace _64Inject
+{
+ class Program
+ {
+ [System.Runtime.InteropServices.DllImport("kernel32.dll")]
+ static extern bool FreeConsole();
+
+ ///
+ /// Main entry point for the application.
+ ///
+ [STAThread]
+ static void Main(string[] args)
+ {
+ if (args.Length == 0)
+ {
+ FreeConsole();
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new _64InjectGUI());
+ }
+ else
+ {
+ _64InjectCMD cmd = new _64InjectCMD();
+ cmd.Run(args);
+ }
+ }
+ }
+}
diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..7b14d72
--- /dev/null
+++ b/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// La información general sobre un ensamblado se controla mediante el siguiente
+// conjunto de atributos. Cambie estos atributos para modificar la información
+// asociada con un ensamblado.
+[assembly: AssemblyTitle("64Inject debug")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("64Inject")]
+[assembly: AssemblyCopyright("Copyright © 2019")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Si establece ComVisible como false, los tipos de este ensamblado no estarán visibles
+// para los componentes COM. Si necesita obtener acceso a un tipo de este ensamblado desde
+// COM, establezca el atributo ComVisible como true en este tipo.
+[assembly: ComVisible(false)]
+
+// El siguiente GUID sirve como identificador de typelib si este proyecto se expone a COM
+[assembly: Guid("a61f45e8-f166-49d6-be58-62d11c332451")]
+
+// La información de versión de un ensamblado consta de los cuatro valores siguientes:
+//
+// Versión principal
+// Versión secundaria
+// Número de versión de compilación
+// Revisión
+//
+// Puede especificar todos los valores o establecer como predeterminados los números de versión de compilación y de revisión
+// mediante el asterisco ('*'), como se muestra a continuación:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.4.82.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..4d74362
--- /dev/null
+++ b/Properties/Resources.Designer.cs
@@ -0,0 +1,102 @@
+//------------------------------------------------------------------------------
+//
+// Este código fue generado por una herramienta.
+// Versión de runtime:4.0.30319.42000
+//
+// Los cambios en este archivo podrían causar un comportamiento incorrecto y se perderán si
+// se vuelve a generar el código.
+//
+//------------------------------------------------------------------------------
+
+namespace _64Inject.Properties {
+ using System;
+
+
+ ///
+ /// Clase de recurso fuertemente tipado, para buscar cadenas traducidas, etc.
+ ///
+ // StronglyTypedResourceBuilder generó automáticamente esta clase
+ // a través de una herramienta como ResGen o Visual Studio.
+ // Para agregar o quitar un miembro, edite el archivo .ResX y, a continuación, vuelva a ejecutar ResGen
+ // con la opción /str o recompile su proyecto de VS.
+ [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() {
+ }
+
+ ///
+ /// Devuelve la instancia de ResourceManager almacenada en caché utilizada por esta clase.
+ ///
+ [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("_64Inject.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Reemplaza la propiedad CurrentUICulture del subproceso actual para todas las
+ /// búsquedas de recursos mediante esta clase de recurso fuertemente tipado.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+
+ ///
+ /// Busca un recurso adaptado de tipo System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap checkmark_16 {
+ get {
+ object obj = ResourceManager.GetObject("checkmark-16", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+
+ ///
+ /// Busca una cadena traducida similar a Use: 64inject [-base folder_path]
+ /// [-name short_name] [-longname name_line_1 name_line_2]
+ /// [no-darkfilter] [widescreen] [-zoom value]
+ /// [-in folder_path] [-rom file_path] [-ini file_path]
+ /// [-icon file_path] [-tv file_path] [-drc file_path]
+ /// [-out folder_path] [not-encrypt]
+ /// Or: 64inject help
+ /// Or: 64inject load-key common_key
+ /// Or: 64inject load-base folder_path
+ /// Or: 64inject create-image [-frame file_path] [-title file_path]
+ /// [resto de la cadena truncado]";.
+ ///
+ internal static string Help {
+ get {
+ return ResourceManager.GetString("Help", resourceCulture);
+ }
+ }
+
+ ///
+ /// Busca un recurso adaptado de tipo System.Drawing.Bitmap.
+ ///
+ internal static System.Drawing.Bitmap x_mark_16 {
+ get {
+ object obj = ResourceManager.GetObject("x-mark-16", resourceCulture);
+ return ((System.Drawing.Bitmap)(obj));
+ }
+ }
+ }
+}
diff --git a/Properties/Resources.resx b/Properties/Resources.resx
new file mode 100644
index 0000000..7d85a84
--- /dev/null
+++ b/Properties/Resources.resx
@@ -0,0 +1,220 @@
+
+
+
+
+