localpsmplus/LocalPSM+/PSMKeyGen.cs

417 lines
14 KiB
C#

using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Media;
using System.Net;
using System.Text.RegularExpressions;
using System.Windows.Forms;
namespace LocalPSM_
{
public partial class PSMKeyGen : Form
{
public PSMKeyGen()
{
InitializeComponent();
}
private void PSMKeyGen_Load(object sender, EventArgs e)
{
Stream BGM = Properties.Resources.BGM;
SoundPlayer snd = new SoundPlayer(BGM);
snd.PlayLooping();
}
private void Unpack()
{
File.WriteAllBytes("cygwin1.dll", Properties.Resources.cygwin1);
File.WriteAllBytes("cygz.dll", Properties.Resources.cygz);
File.WriteAllBytes("cygcrypto-1.0.0.dll", Properties.Resources.cygcrypto_1_0_0);
File.WriteAllBytes("kconsole_sign.exe", Properties.Resources.kconsole_sign);
File.WriteAllBytes("revoke_sign.exe", Properties.Resources.revoke_sign);
File.WriteAllBytes("reverse.exe", Properties.Resources.reverse);
}
private void DownloadXML(string path)
{
if (Unity.Checked)
{
File.WriteAllText(path, Properties.Resources.NSXVID_PSM_UNITY_WW_GLOBAL);
}
else
{
File.WriteAllText(path, Properties.Resources.NSXVID_PSS_VT_WW_GLOBAL);
}
}
private void SignXML(string path)
{
Process proc = new Process();
proc.StartInfo.FileName = "revoke_sign.exe";
proc.StartInfo.Arguments = path + " " + "psmdrmboot.dat";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.StartInfo.CreateNoWindow = true;
proc.Start();
proc.WaitForExit();
moveToCache("psmdrmboot.dat");
}
private void CreateKConsole(string path)
{
if(Unity.Checked)
{
File.WriteAllBytes(path, Properties.Resources.unity_kconsole_dat);
}
else
{
File.WriteAllBytes(path, Properties.Resources.psm_kconsole_dat);
}
}
private void SignKConsole(string path)
{
Process proc = new Process();
proc.StartInfo.FileName = "kconsole_sign.exe";
proc.StartInfo.Arguments = path + " " + "protected_kconsole_cache.dat";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.StartInfo.CreateNoWindow = true;
proc.Start();
proc.WaitForExit();
moveToCache("protected_kconsole_cache.dat");
}
private void Cleanup()
{
File.Delete("reverse.exe");
File.Delete("revoke_sign.exe");
File.Delete("kconsole_sign.exe");
File.Delete("cygz.dll");
File.Delete("cygwin1.dll");
File.Delete("cygcrypto-1.0.0.dll");
}
private void CreateCache()
{
if(Unity.Checked)
{
if (!Directory.Exists("cache/PCSI0009/_System/"))
{
Directory.CreateDirectory("cache/PCSI00009/_System/");
}
}
else
{
if (!Directory.Exists("cache/PCSI00007/_System/"))
{
Directory.CreateDirectory("cache/PCSI00007/_System/");
}
}
}
private void moveToCache(string file)
{
if (Unity.Checked)
{
if (File.Exists("cache/PCSI00009/_System/" + file))
{
File.Delete("cache/PCSI00009/_System/" + file);
}
File.Move(file, "cache/PCSI00009/_System/" + file);
}
else
{
if (File.Exists("cache/PCSI00007/_System/" + file))
{
File.Delete("cache/PCSI00007/_System/" + file);
}
File.Move(file, "cache/PCSI00007/_System/" + file);
}
}
private void LicenseGen_Click(object sender, EventArgs e)
{
KeyGen.Enabled = false;
DevName.Enabled = false;
ProjectName.Enabled = false;
Unity.Enabled = false;
LicenseGen.Enabled = false;
CreateCache();
Unpack();
DownloadXML("temp.xml");
SignXML("temp.xml");
CreateKConsole("kconsole.dat");
SignKConsole("kconsole.dat");
File.Delete("temp.xml");
File.Delete("kconsole.dat");
Cleanup();
KeyGen.Enabled = true;
DevName.Enabled = true;
ProjectName.Enabled = true;
Unity.Enabled = true;
LicenseGen.Enabled = true;
DevName_TextChanged(null, null);
MessageBox.Show("Refreshed License Created!", "Done", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
private void CreateKeys()
{
if (Unity.Checked)
{
if (!Directory.Exists("keys/unity/"+DevName.Text))
{
Directory.CreateDirectory("keys/unity/" + DevName.Text);
}
}
else
{
if (!Directory.Exists("keys/psm/" + DevName.Text))
{
Directory.CreateDirectory("keys/psm/" + DevName.Text);
}
}
}
private void moveToKeys(string file)
{
if (Unity.Checked)
{
if (File.Exists("keys/unity/" + DevName.Text + "/" + file))
{
File.Delete("keys/unity/" + DevName.Text + "/" + file);
}
File.Move(file, "keys/unity/" + DevName.Text + "/" + file);
}
else
{
if (File.Exists("keys/psm/" + DevName.Text + "/" + file))
{
File.Delete("keys/psm/" + DevName.Text + "/" + file);
}
File.Move(file, "keys/psm/" + DevName.Text + "/" + file);
}
}
private void GenKeys()
{
if(Unity.Checked)
{
byte[] krng = Properties.Resources.UnityDev;
for (int i = 0x454; i != 0x465; i++)
{
krng[i] = (byte)DevName.Text[i - 0x454];
}
for (int i = 0x70; i != 0x90; i++)
{
if (ProjectName.Text.Length > i - 0x70)
krng[i] = (byte)ProjectName.Text[i - 0x70];
else
krng[i] = 0x00;
}
string keyRngName = ProjectName.Text;
if (keyRngName == "*")
keyRngName = "+asterisk+";
for (int i = 0x8; i != 0x28; i++)
{
if (keyRngName.Length > i - 0x8)
krng[i] = (byte)keyRngName[i - 0x8];
else
krng[i] = 0x00;
}
File.WriteAllBytes(keyRngName + ".krng", krng);
File.WriteAllBytes("kdev.p12", Properties.Resources.UnityDev_private);
byte[] Seed = Properties.Resources.UnityDev_seed;
for (int i = 0x0C; i != 0x1D; i++)
{
Seed[i] = (byte)DevName.Text[i - 0x0C];
}
for (int i = 0x2C; i != 0x3D; i++)
{
Seed[i] = (byte)DevName.Text[i - 0x2C];
}
File.WriteAllBytes(DevName.Text + ".seed", Seed);
moveToKeys(DevName.Text + ".seed");
moveToKeys(keyRngName + ".krng");
moveToKeys("kdev.p12");
}
else
{
byte[] krng = Properties.Resources.psmdev;
for (int i = 0x454; i != 0x465; i++)
{
krng[i] = (byte)DevName.Text[i - 0x454];
}
for (int i = 0x70; i != 0x90; i++)
{
if (ProjectName.Text.Length > i - 0x70)
krng[i] = (byte)ProjectName.Text[i - 0x70];
else
krng[i] = 0x00;
}
string keyRngName = ProjectName.Text;
if (keyRngName == "*")
keyRngName = "+asterisk+";
for (int i = 0x8; i != 0x28; i++)
{
if (keyRngName.Length > i - 0x8)
krng[i] = (byte)keyRngName[i - 0x8];
else
krng[i] = 0x00;
}
File.WriteAllBytes(Path.ChangeExtension(keyRngName,"krng"), krng);
File.WriteAllBytes("kdev.p12", Properties.Resources.psmdev_private);
byte[] Seed = Properties.Resources.psmdev_seed;
for (int i = 0x0C; i != 0x1D; i++)
{
Seed[i] = (byte)DevName.Text[i - 0x0C];
}
for (int i = 0x2C; i != 0x3D; i++)
{
Seed[i] = (byte)DevName.Text[i - 0x2C];
}
File.WriteAllBytes(DevName.Text + ".seed", Seed);
moveToKeys(DevName.Text + ".seed");
moveToKeys(keyRngName + ".krng");
moveToKeys("kdev.p12");
}
}
private void GenCache()
{
if(Unity.Checked)
{
File.WriteAllBytes("Code", Properties.Resources.unity_Code);
File.WriteAllBytes("protected_kconsole_cache.dat", Properties.Resources.unity_protected_kconsole_cache);
File.WriteAllBytes("vseed.dat", Properties.Resources.unity_vseed);
byte[] Kdbg = Properties.Resources.unity_target_kdbg_list;
for (int i = 0x38; i != 0x58; i++)
{
if (ProjectName.Text.Length > i - 0x38)
Kdbg[i] = (byte)ProjectName.Text[i - 0x38];
else
Kdbg[i] = 0x00;
}
File.WriteAllBytes("target_kdbg_list.dat", Kdbg);
moveToCache("Code");
moveToCache("protected_kconsole_cache.dat");
moveToCache("target_kdbg_list.dat");
moveToCache("vseed.dat");
}
else
{
File.WriteAllBytes("activever.dat", Properties.Resources.psm_activever);
File.WriteAllBytes("Code", Properties.Resources.psm_Code);
File.WriteAllBytes("protected_kconsole_cache.dat", Properties.Resources.psm_protected_kconsole_cache);
File.WriteAllBytes("vseed.dat", Properties.Resources.psm_vseed);
byte[] Kdbg = Properties.Resources.psm_target_kdbg_list;
for (int i = 0x38; i != 0x58; i++)
{
if (ProjectName.Text.Length > i - 0x38)
Kdbg[i] = (byte)ProjectName.Text[i - 0x38];
else
Kdbg[i] = 0x00;
}
File.WriteAllBytes("target_kdbg_list.dat", Kdbg);
moveToCache("activever.dat");
moveToCache("Code");
moveToCache("protected_kconsole_cache.dat");
moveToCache("target_kdbg_list.dat");
moveToCache("vseed.dat");
}
}
private void KeyGen_Click(object sender, EventArgs e)
{
KeyGen.Enabled = false;
DevName.Enabled = false;
ProjectName.Enabled = false;
Unity.Enabled = false;
LicenseGen.Enabled = false;
CreateCache();
CreateKeys();
GenKeys();
GenCache();
KeyGen.Enabled = true;
DevName.Enabled = true;
ProjectName.Enabled = true;
Unity.Enabled = true;
LicenseGen.Enabled = true;
MessageBox.Show("Keypair & License for "+DevName.Text+" Created!", "Done", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
private void DevName_TextChanged(object sender, EventArgs e)
{
if(DevName.TextLength == 17)
{
KeyGen.Enabled = true;
}
else
{
KeyGen.Enabled = false;
}
}
private void Unity_CheckedChanged(object sender, EventArgs e)
{
if(Unity.Checked)
{
if(ProjectName.Text == "*")
ProjectName.Text = "_PSM_DEFAULT_";
}
else
{
if (ProjectName.Text == "_PSM_DEFAULT_")
ProjectName.Text = "*";
}
}
}
}