localpsmplus/LocalPSM+/PSMKeyGen.cs

348 lines
11 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();
}
public String UnityURL = "https://nsx.sec.np.dl.playstation.net/nsx/sec/Xz78TMQ1Uf31VCYr/c/NSXVID/NSXVID-PSM.UNITY.WW-GLOBAL.xml";
public String PsmDevURL = "https://nsx.sec.np.dl.playstation.net/nsx/sec/Xz78TMQ1Uf31VCYr/c/NSXVID/NSXVID-PSS.VT.WW-GLOBAL.xml";
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)
{
WebClient wc = new WebClient();
if (Unity.Checked)
{
byte[] XML = wc.DownloadData(UnityURL);
File.WriteAllBytes(path, XML);
}
else
{
byte[] XML = wc.DownloadData(PsmDevURL);
File.WriteAllBytes(path, XML);
}
}
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;
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;
Unity.Enabled = true;
LicenseGen.Enabled = true;
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];
}
File.WriteAllBytes("_PSM_DEFAULT_.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("_PSM_DEFAULT_.krng");
moveToKeys("kdev.p12");
}
else
{
byte[] krng = Properties.Resources.psmdev;
for (int i = 0x454; i != 0x465; i++)
{
krng[i] = (byte)DevName.Text[i - 0x454];
}
File.WriteAllBytes("+asterisk+.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("+asterisk+.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("target_kdbg_list.dat", Properties.Resources.unity_target_kdbg_list);
File.WriteAllBytes("vseed.dat", Properties.Resources.unity_vseed);
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("target_kdbg_list.dat", Properties.Resources.psm_target_kdbg_list);
File.WriteAllBytes("vseed.dat", Properties.Resources.psm_vseed);
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;
Unity.Enabled = false;
LicenseGen.Enabled = false;
CreateCache();
CreateKeys();
GenKeys();
GenCache();
KeyGen.Enabled = true;
DevName.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;
}
int i = DevName.SelectionStart;
DevName.Text = new String(DevName.Text.Where(char.IsDigit).ToArray());
DevName.SelectionStart = i;
}
}
}