diff --git a/Keygen.cs b/Keygen.cs index 35e9ef7..96bac58 100644 --- a/Keygen.cs +++ b/Keygen.cs @@ -9,10 +9,10 @@ namespace FrappeMocha public enum LicenseTypes { - License3270 = 0x8c, - License5250 = 0x80, - License3812 = 0xa0, - LicenseTelnet = 0x9b, + LicenseWindows3270 = 0x8c, + LicenseWindows5250 = 0x80, + LicenseWindows3812 = 0xa0, + LicenseWindowsTelnet = 0x9b, LicenseJava3270 = 0x1e, LicenseJava5250 = 0x1e, LicenseJavaTelnet = 0x1b, @@ -21,6 +21,9 @@ namespace FrappeMocha LicenseMac3812 = 0x22, LicenseMacTelnet = 0x5e, LicenseMacKeyboard = 0xa5, + LicenseChrome3270 = 0xb3, + LicenseChrome5250 = 0xb2, + LicenseChromeTelnet = 0xb4, } public Keygen() @@ -33,10 +36,10 @@ namespace FrappeMocha { switch (license) { - case LicenseTypes.License3270: - case LicenseTypes.License3812: - case LicenseTypes.License5250: - case LicenseTypes.LicenseTelnet: + case LicenseTypes.LicenseWindows3270: + case LicenseTypes.LicenseWindows3812: + case LicenseTypes.LicenseWindows5250: + case LicenseTypes.LicenseWindowsTelnet: return GenLicenseWindows(type, param_company, license); case LicenseTypes.LicenseJavaTelnet: @@ -52,6 +55,11 @@ namespace FrappeMocha case LicenseTypes.LicenseMacTelnet: case LicenseTypes.LicenseMacKeyboard: return GenLicenseMacNum(type, param_company, license); + + case LicenseTypes.LicenseChrome3270: + case LicenseTypes.LicenseChrome5250: + case LicenseTypes.LicenseChromeTelnet: + return GenLicenseJavascript(type, param_company, license); } return ""; } @@ -66,22 +74,22 @@ namespace FrappeMocha byte[] byteArray = this.StrToByteArray(param_company); for (int index = 0; index < byteArray.Length; ++index) { - if ((int)byteArray[index] >= 65 && (int)byteArray[index] <= 90) - byteArray[index] += (byte)32; // this is basically str.toLower() + if ((int) byteArray[index] >= 65 && (int) byteArray[index] <= 90) + byteArray[index] += (byte) 32; // this is basically str.toLower() } for (int index = 0; index < byteArray.Length; ++index) { - if ((int)byteArray[index] >= 65) // 'A' - num1 += (uint)byteArray[index] + (uint)license; + if ((int) byteArray[index] >= 65) // 'A' + num1 += (uint) byteArray[index] + (uint) license; } - uint num2 = num1 * (uint)param_lickey[0]; - uint num3 = (uint)((int)num2 * ((int)num2 & (int)byte.MaxValue) & (int)ushort.MaxValue); + uint num2 = num1 * (uint) param_lickey[0]; + uint num3 = (uint) ((int) num2 * ((int) num2 & (int) byte.MaxValue) & (int) ushort.MaxValue); if (num3 < 100U) num3 = 2728U; - param_lickey = (param_lickey[0].ToString() + (object)num3) + '-' + - (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; + param_lickey = (param_lickey[0].ToString() + (object) num3) + '-' + + (Int32) (DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; return param_lickey; @@ -93,7 +101,7 @@ namespace FrappeMocha */ public string GenLicenseJava(int itype, string param_company, LicenseTypes license) { - char type = (char)(itype + (int)'A'); + char type = (char) (itype + (int) 'A'); string param_lickey = type.ToString() + '@'; byte[] byteArray = this.StrToByteArray(param_company); uint num1 = 0; @@ -101,11 +109,11 @@ namespace FrappeMocha for (int b = 0; b < byteArray.Length; b++) { if (param_company.ToCharArray()[b] > ' ') - num1 += param_company.ToCharArray()[b] + (uint)license; + num1 += param_company.ToCharArray()[b] + (uint) license; } - uint num2 = num1 * (uint)param_lickey[0]; - uint num3 = (uint)((int)num2 * ((int)num2 & (int)byte.MaxValue) & (int)ushort.MaxValue); + uint num2 = num1 * (uint) param_lickey[0]; + uint num3 = (uint) ((int) num2 * ((int) num2 & (int) byte.MaxValue) & (int) ushort.MaxValue); param_lickey += (object) num3; return param_lickey; } @@ -119,7 +127,7 @@ namespace FrappeMocha public string GenLicenseMacAlpha(int itype, string param_company, LicenseTypes license) { // must start with an 'a' or 'b; - char type = (char)(itype + (int)'a'); + char type = (char) (itype + (int) 'a'); string param_lickey = type.ToString(); byte[] byteArray = this.StrToByteArray(param_company); short num1 = 0; @@ -127,11 +135,11 @@ namespace FrappeMocha for (int b = 0; b < byteArray.Length; b++) { if (param_company.ToCharArray()[b] >= 0x21) - num1 += (short)(param_company.ToCharArray()[b] + license); + num1 += (short) (param_company.ToCharArray()[b] + license); } - ushort num2 = (ushort)(num1 * (short)param_lickey[0]); - param_lickey += (ushort)((num2 & byte.MaxValue) * num2); + ushort num2 = (ushort) (num1 * (short) param_lickey[0]); + param_lickey += (ushort) ((num2 & byte.MaxValue) * num2); return param_lickey; } @@ -144,13 +152,13 @@ namespace FrappeMocha */ public string GenLicenseMacNum(int itype, string param_company, LicenseTypes license) { - char type = (char)(itype + (int)'0'); + char type = (char) (itype + (int) '0'); string param_lickey = type.ToString(); uint num1 = 0; byte[] byteArray = this.StrToByteArray(param_company); for (int index = 0; index < byteArray.Length; ++index) { - if (license == LicenseTypes.LicenseMacKeyboard && (byte)(byteArray[index] + 0xbf) < 0x1a) + if (license == LicenseTypes.LicenseMacKeyboard && (byte) (byteArray[index] + 0xbf) < 0x1a) { byteArray[index] += 32; } @@ -162,16 +170,16 @@ namespace FrappeMocha for (int index = 0; index < byteArray.Length; ++index) { - if ((int)byteArray[index] >= 0x41) // 'A' - num1 += (uint)byteArray[index] + (uint)license; + if ((int) byteArray[index] >= 0x41) // 'A' + num1 += (uint) byteArray[index] + (uint) license; } - uint num2 = (uint)(num1 * (int)param_lickey[0]); - num2 = (uint)(num2 * (num2 & byte.MaxValue) & ushort.MaxValue); + uint num2 = (uint) (num1 * (int) param_lickey[0]); + num2 = (uint) (num2 * (num2 & byte.MaxValue) & ushort.MaxValue); ulong num3 = 0xaa8; if (99 < num2) { - num3 = (ulong)num2; + num3 = (ulong) num2; } param_lickey = param_lickey[0].ToString() + (object) num3; @@ -180,15 +188,50 @@ namespace FrappeMocha return param_lickey; } + /** + * This one was fun as well + * Found out that the license must end with "45" in order to validate + */ + public string GenLicenseJavascript(int itype, string param_company, LicenseTypes license) + { + char type = (char) (itype + (int) '0'); + string param_lickey = type.ToString(); + ulong sum = 0; + byte[] byteArray = this.StrToByteArray(param_company); + for (int index = 0; index < byteArray.Length; ++index) + { + if ((ulong) byteArray[index] >= 65 && (ulong) byteArray[index] <= 90) + byteArray[index] += 32; // this is basically str.toLower() + } + + for (int index = 0; index < byteArray.Length; ++index) + { + if ((ulong) byteArray[index] >= 65 && (ulong) byteArray[index] <= 122) + { + sum += byteArray[index] + (uint) license; + } + } + sum = sum * param_lickey[0]; + sum = sum * (sum & byte.MaxValue) & ushort.MaxValue; + if (sum < 100U) + sum = 2728U; + + param_lickey = (param_lickey[0].ToString() + (object) sum) + '-' + + (Int32) (DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds + + "45"; // a little salt, as a treat + + return param_lickey; + } + public bool CheckLicense(string param_lickey, string param_company, LicenseTypes license) { switch (license) { - case LicenseTypes.License3270: - case LicenseTypes.License3812: - case LicenseTypes.License5250: - case LicenseTypes.LicenseTelnet: + case LicenseTypes.LicenseWindows3270: + case LicenseTypes.LicenseWindows3812: + case LicenseTypes.LicenseWindows5250: + case LicenseTypes.LicenseWindowsTelnet: return CheckLicenseWindows(param_lickey, param_company, license); case LicenseTypes.LicenseJavaTelnet: @@ -202,10 +245,49 @@ namespace FrappeMocha case LicenseTypes.LicenseMacTelnet: case LicenseTypes.LicenseMacKeyboard: return CheckLicenseMac(param_lickey, param_company, license); + + case LicenseTypes.LicenseChrome3270: + case LicenseTypes.LicenseChrome5250: + case LicenseTypes.LicenseChromeTelnet: + return CheckLicenseJavaScript(param_lickey, param_company, license); } return false; } + /** + * All Javascript licenses need to end with "45" in order to validate + */ + public bool CheckLicenseJavaScript(string param_lickey, string param_company, LicenseTypes license) + { + ulong sum = 0; + byte[] byteArray = this.StrToByteArray(param_company); + for (int index = 0; index < byteArray.Length; ++index) + { + if ((ulong) byteArray[index] >= 65 && (ulong) byteArray[index] <= 90) + byteArray[index] += 32; // this is basically str.toLower() + } + + for (int index = 0; index < byteArray.Length; ++index) + { + if ((ulong) byteArray[index] >= 65 && (ulong) byteArray[index] <= 122) + { + sum += byteArray[index] + (uint) license; + } + } + sum = sum * param_lickey[0]; + sum = sum * (sum & byte.MaxValue) & ushort.MaxValue; + if (sum < 100U) + sum = 2728U; + + if (!param_lickey.StartsWith(param_lickey[0].ToString() + (object) sum) || !param_lickey.EndsWith("45")) + { + return false; + } + + return true; + } + + /** * @todo: write some sanity checks */ @@ -214,6 +296,7 @@ namespace FrappeMocha return true; } + /** * @todo: write some sanity checks */ @@ -233,20 +316,20 @@ namespace FrappeMocha for (int index = 0; index < byteArray.Length; ++index) { // >= 'A' && <= 'Z' - if ((int)byteArray[index] >= 65 && (int)byteArray[index] <= 90) - byteArray[index] += (byte)32; + if ((int) byteArray[index] >= 65 && (int) byteArray[index] <= 90) + byteArray[index] += (byte) 32; } for (int index = 0; index < byteArray.Length; ++index) { - if ((int)byteArray[index] >= 65) // 'A' - num1 += (uint)byteArray[index] + (uint)license; + if ((int) byteArray[index] >= 65) // 'A' + num1 += (uint) byteArray[index] + (uint) license; } - uint num2 = num1 * (uint)param_lickey[0]; - uint num3 = (uint)((int)num2 * ((int)num2 & (int)byte.MaxValue) & (int)ushort.MaxValue); + uint num2 = num1 * (uint) param_lickey[0]; + uint num3 = (uint) ((int) num2 * ((int) num2 & (int) byte.MaxValue) & (int) ushort.MaxValue); if (num3 < 100U) num3 = 2728U; - if (param_lickey.StartsWith((param_lickey[0].ToString() ?? "") + (object)num3)) + if (param_lickey.StartsWith((param_lickey[0].ToString() ?? "") + (object) num3)) { //this.aa = param_lickey.Substring(0, 1); return true; @@ -269,7 +352,7 @@ namespace FrappeMocha } catch (Exception ex2) { - return new byte[1] { (byte)63 }; + return new byte[1] {(byte) 63}; } } } @@ -292,6 +375,5 @@ namespace FrappeMocha } } } - } } \ No newline at end of file diff --git a/MainForm.Designer.cs b/MainForm.Designer.cs index d116466..74261c4 100644 --- a/MainForm.Designer.cs +++ b/MainForm.Designer.cs @@ -133,7 +133,10 @@ "TN5250 for Mac OS X", "TN3812 for Mac OS X", "Telnet for Mac OS X", - "Keyboard for Mac OS X"}); + "Keyboard for Mac OS X", + "TN3270 for Google Chrome", + "TN5250 for Google Chrome", + "Telnet for Google Chrome"}); this.productSelect.Location = new System.Drawing.Point(12, 25); this.productSelect.Name = "productSelect"; this.productSelect.Size = new System.Drawing.Size(146, 21); @@ -156,12 +159,15 @@ this.Controls.Add(this.label1); this.Controls.Add(this.companytext); this.Controls.Add(this.TypeDropDown); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.KeyPreview = true; this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "MainForm"; this.Text = "FrappeMocha"; + this.Shown += new System.EventHandler(this.MainForm_Shown); + this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.MainForm_KeyPress); this.ResumeLayout(false); this.PerformLayout(); diff --git a/MainForm.cs b/MainForm.cs index 0415887..8c5b0d7 100644 --- a/MainForm.cs +++ b/MainForm.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.ComponentModel; using System.Data; +using System.Diagnostics; using System.Drawing; using System.Text; using System.Windows.Forms; @@ -11,6 +12,7 @@ namespace FrappeMocha public partial class MainForm : Form { protected Keygen frappeKeygen; + private char[] ficus = new char[6]; private object[] windowsLicenseTypeItems = new object[2]; private object[] macLicenseTypeItems = new object[1]; private object[] javaLicenseTypeItems = new object[5]; @@ -61,19 +63,19 @@ namespace FrappeMocha switch (productSelect.SelectedIndex) { case 0: - this.keygen(Keygen.LicenseTypes.License3270); + this.keygen(Keygen.LicenseTypes.LicenseWindows3270); break; case 1: - this.keygen(Keygen.LicenseTypes.License5250); + this.keygen(Keygen.LicenseTypes.LicenseWindows5250); break; case 2: - this.keygen(Keygen.LicenseTypes.License3812); + this.keygen(Keygen.LicenseTypes.LicenseWindows3812); break; case 3: - this.keygen(Keygen.LicenseTypes.LicenseTelnet); + this.keygen(Keygen.LicenseTypes.LicenseWindowsTelnet); break; case 4: @@ -107,6 +109,18 @@ namespace FrappeMocha case 11: this.keygen(Keygen.LicenseTypes.LicenseMacKeyboard); break; + + case 12: + this.keygen(Keygen.LicenseTypes.LicenseChrome3270); + break; + + case 13: + this.keygen(Keygen.LicenseTypes.LicenseChrome5250); + break; + + case 14: + this.keygen(Keygen.LicenseTypes.LicenseChromeTelnet); + break; } } @@ -127,6 +141,8 @@ namespace FrappeMocha { companyusernamelabel.Text = "Name"; } + + AcceptButton.PerformClick(); } private void keygen(Keygen.LicenseTypes license) @@ -174,6 +190,7 @@ namespace FrappeMocha case 3: case 7: // mac type 1 case 8: // mac type 1 + case 12: if (windowsLicenseTypeItems[0] != null) { TypeDropDown.Items.Clear(); @@ -195,11 +212,39 @@ namespace FrappeMocha break; } TypeDropDown.SelectedIndex = 0; + AcceptButton.PerformClick(); } private void licensebox_Click(object sender, EventArgs e) { licensebox.SelectAll(); } + + private void MainForm_Shown(object sender, EventArgs e) + { + AcceptButton.PerformClick(); + } + + private void MainForm_KeyPress(object sender, KeyPressEventArgs e) + { + Array.Copy(this.ficus, 1, this.ficus, 0, this.ficus.Length -1); + this.ficus[ficus.Length -1] = e.KeyChar; + if (new string (ficus) == "spicey") + { + switch (MessageBox.Show("Would you like a little salt, as a treat?", "Orly?", MessageBoxButtons.YesNoCancel, + MessageBoxIcon.Question)) + { + case DialogResult.Yes: + Process.Start("https://i.imgur.com/EJ31bmk.jpg"); + break; + case DialogResult.No: + Process.Start( + "https://pics.me.me/white-people-cant-handle-spicy-food-um-try-again-sweetie-6626438.png"); + break; + case DialogResult.Cancel: + break; + } + } + } } -} +} \ No newline at end of file