2 Commits
3 changed files with 366 additions and 122 deletions

No files matched your search

+267 -108
View File
@@ -9,15 +9,21 @@ namespace FrappeMocha
public enum LicenseTypes
{
License3270 = 140,
License5250 = 128,
License3812 = 160,
LicenseTelnet = 155,
LicenseJava3270 = 30,
LicenseJava5250 = 30,
LicenseWindows3270 = 0x8c,
LicenseWindows5250 = 0x80,
LicenseWindows3812 = 0xa0,
LicenseWindowsTelnet = 0x9b,
LicenseJava3270 = 0x1e,
LicenseJava5250 = 0x1e,
LicenseJavaTelnet = 0x1b,
LicenseMac3270 = 0x5d,
LicenseMac5250 = 0x16,
LicenseMac3812 = 0x22,
LicenseMacTelnet = 0x5e,
LicenseMacKeyboard = 0xa5,
LicenseChrome3270 = 0xb3,
LicenseChrome5250 = 0xb2,
LicenseChromeTelnet = 0xb4,
}
public Keygen()
@@ -25,33 +31,275 @@ namespace FrappeMocha
this.param_encoding = 0;
}
public string GenLicense(int type, string param_company, LicenseTypes license)
{
switch (license)
{
case LicenseTypes.LicenseWindows3270:
case LicenseTypes.LicenseWindows3812:
case LicenseTypes.LicenseWindows5250:
case LicenseTypes.LicenseWindowsTelnet:
return GenLicenseWindows(type, param_company, license);
case LicenseTypes.LicenseJavaTelnet:
case LicenseTypes.LicenseJava3270:
// case LicenseTypes.LicenseJava5250:
return GenLicenseJava(type, param_company, license);
case LicenseTypes.LicenseMac3270:
case LicenseTypes.LicenseMac5250:
return GenLicenseMacAlpha(type, param_company, license);
case LicenseTypes.LicenseMac3812:
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 "";
}
/**
* By far the easiest implemntation, everything was already in .NET :P
*/
public string GenLicenseWindows(int type, string param_company, LicenseTypes license)
{
string param_lickey = type.ToString();
uint num1 = 0;
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()
}
for (int index = 0; index < byteArray.Length; ++index)
{
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);
if (num3 < 100U)
num3 = 2728U;
param_lickey = (param_lickey[0].ToString() + (object) num3) + '-' +
(Int32) (DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
return param_lickey;
}
/**
* Pretty stright forward implementation as well
* .NET is just a copy of Java afterall
*/
public string GenLicenseJava(int itype, string param_company, LicenseTypes license)
{
char type = (char) (itype + (int) 'A');
string param_lickey = type.ToString() + '@';
byte[] byteArray = this.StrToByteArray(param_company);
uint num1 = 0;
for (int b = 0; b < byteArray.Length; b++)
{
if (param_company.ToCharArray()[b] > ' ')
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);
param_lickey += (object) num3;
return param_lickey;
}
/**
* Now the fun stuff..
*
* Beware! the Mac versions rely on datatype truncation
* It's a real pain in the ass to make sure the datatypes are all accurate
*/
public string GenLicenseMacAlpha(int itype, string param_company, LicenseTypes license)
{
// must start with an 'a' or 'b;
char type = (char) (itype + (int) 'a');
string param_lickey = type.ToString();
byte[] byteArray = this.StrToByteArray(param_company);
short num1 = 0;
for (int b = 0; b < byteArray.Length; b++)
{
if (param_company.ToCharArray()[b] >= 0x21)
num1 += (short) (param_company.ToCharArray()[b] + license);
}
ushort num2 = (ushort) (num1 * (short) param_lickey[0]);
param_lickey += (ushort) ((num2 & byte.MaxValue) * num2);
return param_lickey;
}
/**
* Beware! the Mac versions rely on datatype truncation
* It's a real pain in the ass to make sure the datatypes are all accurate
*
* There's a special case for the MacKeyboard as it deviates from the rest of the algoritm
* The (byte) cast is extmely important
*/
public string GenLicenseMacNum(int itype, string param_company, LicenseTypes license)
{
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)
{
byteArray[index] += 32;
}
else if (license != LicenseTypes.LicenseMacKeyboard && byteArray[index] + 0xbf < 0x1a)
{
byteArray[index] += 32;
}
}
for (int index = 0; index < byteArray.Length; ++index)
{
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);
ulong num3 = 0xaa8;
if (99 < num2)
{
num3 = (ulong) num2;
}
param_lickey = param_lickey[0].ToString() + (object) num3;
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:
case LicenseTypes.LicenseJava3270:
// case LicenseTypes.LicenseJava5250:
// case LicenseTypes.LicenseJava5250:
return CheckLicenseJava(param_lickey, param_company, license);
case LicenseTypes.LicenseMac3270:
case LicenseTypes.LicenseMac5250:
case LicenseTypes.LicenseMac3812:
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
*/
public bool CheckLicenseJava(string param_lickey, string param_company, LicenseTypes license)
{
return true;
}
/**
* @todo: write some sanity checks
*/
public bool CheckLicenseMac(string param_lickey, string param_company, LicenseTypes license)
{
return true;
@@ -68,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;
@@ -90,94 +338,6 @@ namespace FrappeMocha
return false;
}
public string GenLicense(int type, string param_company, LicenseTypes license)
{
switch (license)
{
case LicenseTypes.License3270:
case LicenseTypes.License3812:
case LicenseTypes.License5250:
case LicenseTypes.LicenseTelnet:
return GenLicenseWindows(type, param_company, license);
case LicenseTypes.LicenseJavaTelnet:
case LicenseTypes.LicenseJava3270:
// case LicenseTypes.LicenseJava5250:
return GenLicenseJava(type, param_company, license);
case LicenseTypes.LicenseMac3270:
case LicenseTypes.LicenseMac5250:
return GenLicenseMac(type, param_company, license);
}
return "";
}
public string GenLicenseWindows(int type, string param_company, LicenseTypes license)
{
string param_lickey = type.ToString();
uint num1 = 0;
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()
}
for (int index = 0; index < byteArray.Length; ++index)
{
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);
if (num3 < 100U)
num3 = 2728U;
param_lickey = ((param_lickey[0].ToString() ?? "") + (object)num3) + '-' +
(Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
return param_lickey;
}
public string GenLicenseJava(int itype, string param_company, LicenseTypes license)
{
char type = (char)(itype + (int)'A');
string param_lickey = type.ToString() + '@';
byte[] byteArray = this.StrToByteArray(param_company);
uint num1 = 0;
for (int b = 0; b < byteArray.Length; b++)
{
if (param_company.ToCharArray()[b] > ' ')
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);
param_lickey += (object) num3;
return param_lickey;
}
public string GenLicenseMac(int itype, string param_company, LicenseTypes license)
{
char type = (char)(itype + (int)'a');
string param_lickey = type.ToString() + '@';
byte[] byteArray = this.StrToByteArray(param_company);
uint num1 = 0;
for (int b = 0; b < byteArray.Length; b++)
{
if (param_company.ToCharArray()[b] > ' ')
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);
param_lickey += (object)num3;
return param_lickey;
}
public byte[] StrToByteArray(string str)
{
try
@@ -192,7 +352,7 @@ namespace FrappeMocha
}
catch (Exception ex2)
{
return new byte[1] { (byte)63 };
return new byte[1] {(byte) 63};
}
}
}
@@ -215,6 +375,5 @@ namespace FrappeMocha
}
}
}
}
}
+13 -3
View File
@@ -56,7 +56,7 @@
// companytext
//
this.companytext.Location = new System.Drawing.Point(12, 105);
this.companytext.MaxLength = 512;
this.companytext.MaxLength = 80;
this.companytext.Name = "companytext";
this.companytext.Size = new System.Drawing.Size(146, 20);
this.companytext.TabIndex = 1;
@@ -96,6 +96,7 @@
this.licensebox.ReadOnly = true;
this.licensebox.Size = new System.Drawing.Size(146, 20);
this.licensebox.TabIndex = 5;
this.licensebox.Click += new System.EventHandler(this.licensebox_Click);
//
// submit
//
@@ -129,7 +130,13 @@
"TN5250 for Java",
"Telnet for Java",
"TN3270 for Mac OS X",
"TN5250 for Mac OS X"});
"TN5250 for Mac OS X",
"TN3812 for Mac OS X",
"Telnet 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);
@@ -152,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();
+86 -11
View File
@@ -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,8 +12,9 @@ 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[2];
private object[] macLicenseTypeItems = new object[1];
private object[] javaLicenseTypeItems = new object[5];
public MainForm()
@@ -49,9 +51,9 @@ namespace FrappeMocha
private void initMacLicenseTypeItems()
{
TypeDropDown.Items.Clear();
for (int i = 0; i < 2; i++)
for (int i = 0; i < 1; i++)
{
TypeDropDown.Items.Add((char)('a' + i));
TypeDropDown.Items.Add((char) ('0' + i));
}
TypeDropDown.Items.CopyTo(this.macLicenseTypeItems, 0);
}
@@ -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:
@@ -95,6 +97,30 @@ namespace FrappeMocha
case 8:
this.keygen(Keygen.LicenseTypes.LicenseMac5250);
break;
case 9:
this.keygen(Keygen.LicenseTypes.LicenseMac3812);
break;
case 10:
this.keygen(Keygen.LicenseTypes.LicenseMacTelnet);
break;
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;
}
}
@@ -115,6 +141,8 @@ namespace FrappeMocha
{
companyusernamelabel.Text = "Name";
}
AcceptButton.PerformClick();
}
private void keygen(Keygen.LicenseTypes license)
@@ -129,6 +157,16 @@ namespace FrappeMocha
return;
}
if (companytext.Text.Length > 80)
{
MessageBox.Show(
(TypeDropDown.SelectedIndex == 0
? "Company Name"
: "User Name") + " must not be greater than eighty characters", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
string genlicense = frappeKeygen.GenLicense(TypeDropDown.SelectedIndex, companytext.Text, license);
if (!frappeKeygen.CheckLicense(genlicense, companytext.Text, license))
{
@@ -150,7 +188,10 @@ namespace FrappeMocha
case 1:
case 2:
case 3:
if (this.windowsLicenseTypeItems[0] != null)
case 7: // mac type 1
case 8: // mac type 1
case 12:
if (windowsLicenseTypeItems[0] != null)
{
TypeDropDown.Items.Clear();
TypeDropDown.Items.AddRange(this.windowsLicenseTypeItems);
@@ -163,13 +204,47 @@ namespace FrappeMocha
TypeDropDown.Items.AddRange(this.javaLicenseTypeItems);
break;
case 7:
case 8:
case 9: // mac type 2
case 10:
case 11:
TypeDropDown.Items.Clear();
TypeDropDown.Items.AddRange(this.macLicenseTypeItems);
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;
}
}
}
}
}
}