417 lines
14 KiB
C#
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 = "*";
|
|
}
|
|
}
|
|
}
|
|
}
|