Workflow.NET:
Workflow.NET.Security.Client.dll
Workflow.NET.Security.Client.SerialNumbers.VerifySerial(String) : Boolean
Workflow.NET.Security.Client.SerialNumbers.ef67a97d2333c1cd
(String, String&, String&, String&, String&, String&) : Boolean
you should let them do nothing and return "true";
======================================================
Macrobject.NObject
Macrobject.1.2() : Void ----->let it do nothing and return .
if you found the following code ,you will found above function. They are in one class
Macrobject.1.1() : Void
.method assembly hidebysig static void 1() cil managed { .maxstack 8 L_0000: br.s L_0016 L_0002: brtrue.s L_0009 L_0004: call void Macrobject.1::2() L_0009: ldsfld int32 Macrobject.1::1 L_000e: ldc.i4.1 L_000f: add L_0010: stsfld int32 Macrobject.1::1 L_0015: ret L_0016: ldsfld int32 Macrobject.1::1 L_001b: br.s L_0002 } |
===================================================
aspNetEmail:
aspNetEmail.xml.lic:
extract the string: 1.1evaluation license3aspnetemail2007-01-21
compute md5 value of it ,and save in <H2> section.
finally , create signature for this XML file.
code:
static string y111 =
"JvxRZV+Jhn2gYGqEW0RaMP+owHTZVbhongcA"+
"/YfyJFniTMWWz0PQV8L3dSWQovDfZF/f7xLTu5h"+
"g8QrFK87Jxq6JxYjzfPc5ZWW+FUAV5/kix6YE3snsZ"+
"hMwr9aXTJzTNJXXXb5N/vjsFHUWAqiSmJ5aXyQ"+
"sCrcp3vde1vCnbzUz/lmtryrEVjPwKLrAEkQQ7aAGo"+
"PojkwtdUZCv1HTiVQ1yAFzElzacxqZsp1OsJ6yXbO"+
"farkUkRMOjaH8vujH7+UbgO9ufB/CmPjQg+EfAsnS"+
"pqHeweNXGGTn7i6K+r51GImgw9gtG/AT6urMZbc"+
"Mu0olZK2ZroMDm+d+hNlNaGQ==";
static string y211 = "rPkH+GyK4Wa+d8YrIglwRtvF18Cz04RhN87WvjrgeFg=";
static string y311 = "eXGJMz5b9yu7mhURx7a7RA==";
static bool bool111 = false;
static string y411 = "7LyD7Zis7bSo";
static string y511 = "7pCl7qyZ74iU76Si";
private void buttonPath_Click(object sender, EventArgs e)
{
string text1 = AppDomain.CurrentDomain.BaseDirectory + "aspNetEmail.xml.lic";
//textBox1.Text = text1;
//MessageBox.Show(File.Exists(text1).ToString());
XmlDocument document1 = new XmlDocument();
document1.Load(text1);
SignedXml xml1 = new SignedXml(document1);
try
{
XmlNode node1 = document1.GetElementsByTagName("Signature",
"http://www.w3.org/2000/09/xmldsig#")[0];
xml1.LoadXml((XmlElement)node1);
}
catch
{
}
if (xml1.CheckSignature(RSA111()))
{
MessageBox.Show("OK");
}
else
{
MessageBox.Show("false");
}
textBox1.Text= ds111(dd311(text1));
ds211(text1);
}
private static RSACryptoServiceProvider RSA111() //create RSA Provider for Signature
{
string str311 = "AI" + "aspnetemail"+"3";
RSACryptoServiceProvider provider1 = null;
try
{
CspParameters parameters1 = new CspParameters();
parameters1.KeyContainerName = "AIaspnetemail3";
parameters1.Flags = CspProviderFlags.UseMachineKeyStore;
provider1 = new RSACryptoServiceProvider(parameters1);
}
catch
{
try
{
CspParameters parameters2 = new CspParameters();
parameters2.Flags = CspProviderFlags.UseMachineKeyStore;
provider1 = new RSACryptoServiceProvider(parameters2);
}
catch
{
try
{
provider1 = new RSACryptoServiceProvider();
}
catch
{
}
}
}
if (provider1 == null)
{
MessageBox.Show("");
}
return provider1;
}
private static string ds111(DataSet set1) //get the license string
{
string text1 = string.Empty;
if (set1.Tables["Customer"] != null)
{
text1 = set1.Tables["Customer"].Rows[0]["name"].ToString().Trim();
}
if (set1.Tables["product"] != null)
{
foreach (DataRow row1 in set1.Tables["product"].Rows)
{
text1 = text1 + row1["version"].ToString().Trim();
text1 = text1 + row1["name"].ToString().Trim();
text1 = text1 + row1["expires"].ToString().Trim();
}
}
return text1;
}
private static DataSet dd311(string text1) //read the xml to dataset
{
DataSet set1 = new DataSet();
//StringReader reader1 = new StringReader(text1);
set1.ReadXml(text1);
//reader1.Close();
return set1;
}
private static DataSet ds211(string text5) //check MD5 value,and judgement the lic was edited whether or not
{
DataSet set1 = dd311(text5);
DataTable table1 = set1.Tables["LicenseInformation"];
if ((table1 != null) && (table1.Rows.Count > 0))
{
DataRow row1 = table1.Rows[0];
string text1 = row1["Version"].ToString();
double num1 = double.Parse(text1);
if (num1 > 1)
{
string text2 = row1["H1"].ToString();
string text3 = row1["H2"].ToString();
text1 = text1 + ds111(set1);
HashAlgorithm algorithm1 = null;
if (text2 == "0")
{
algorithm1 = new MD5CryptoServiceProvider();
}
string text4 = str111(text1, algorithm1);
if (text4 != text3)
{
throw new Exception("Invalid license hash found.");
}
return set1;
}
return null;
}
return null;
}
private static string str111(string text2, HashAlgorithm algorithm1)
{
byte[] buffer1 = Convert.FromBase64String(y411);
byte[] buffer2 = Encoding.UTF8.GetBytes(text2);
byte[] buffer3 = Convert.FromBase64String(y511);
byte[] buffer4 = new byte[(buffer1.Length + buffer2.Length) + buffer3.Length];
buffer1.CopyTo(buffer4, 0);
buffer2.CopyTo(buffer4, buffer1.Length);
buffer3.CopyTo(buffer4, buffer1.Length + buffer2.Length);
byte[] buffer5 = algorithm1.ComputeHash(buffer4);
return Convert.ToBase64String(buffer5);
}
^-^ ,I think you can finish the leavings work.
any question ,please EMail me:liuxzh1026@126.com