DVXP TEdit.NET 3.0 is an ASP.NET server grid control that is ideal for building data table viewing and editing web pages in minutes.
TEdit.NET has a large number of unique features over database programming with the standard data controls of ASP.NET
TEdit.NET 控件是一个典型的采用RSA加密算法处理License的控件,使用ildasm打开dll,解开资源文件我们就可以看到public key.xml文件,这就是RSA的公匙,很可惜,我们不太可能分析出私匙,所以只能从另外一个角度来破解了。
大致思路如下:
1、使用RSA算法生成自己的public/private key.
2、使用自己的public key代替资源文件中的public key
3、使用自己的private key生成license文件
这样就很简单了,根据需要我们生成如下key对。
Modulus:
yZ+YfjEffN+tHpP5qlpWTS7GxrGExkO6QpaW2h3GSPHtY54LCGx0IMLjJ4E0FY+jZ2+ARi4NDW4mfmir/ohfZj+UmYj9ncGeZoYeho8nRjaFFlR6NSLwlITL/mcJSVRxQqP1R5Z6sG0vBGJBwzXgpZu9YzhFNDV3+HOEKxRWt1E=
Exponent:
AQAB
D:
WCEAYLhMESMb4q+/g2y1KEt360WQybC064IzMeet0hidMNvV6rqtD9zfuVbKU1pTjFS6dvKOFf69qKdL9pfZSmszcg4XJ45eAaG51wf3LBsfqxKEuy3uiMJhSzE9THNS1tHhgOO/pTi/+Febub4WJlMXtGEKIYCqRUmM4iHiJbk=
DP:
OkHo5FVMfGC1az4AhHzAGWe7boAWTdv3EiQ8aqHETRcgCaTVWZleuqKJ+/9ZOqqIWeTqmNrbjYLAPqgwGICn1Q==
DQ:
GThvDxEVsDM+DNchxIf0jOhHJYb5KFsAhbUH+glXbCV+jqOUG2TZN743euCOhogdLFUtdXcHS+7pEM5gQMfNxQ==
P:
8KQ97jjfmG6FuihmA6J9gGaRgqePaH7WTvyGGNGcRDXHzDAhiSkFUx3Lok8EdBrEufYyoNvEXtjibk6GlADosw==
Q:
1n3ZlICF/T2Iil73Juz3ly612DSUAoe0A6OzsaR949vyDTn2Q+9o7l/IfbV/vLc8ixL+000IAUTu6kFH7an56w==
其实控件算法很简单,简单的将产品名称、订单号、客户名称、license数量组合进行签名算法,
生成一个xml文件就可以了,关于license文件的配置在web.config文件中,请参照文档。
下面附注册机参考算法源代码:
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Security.Cryptography;
using System.Text;
using System.Data;
/**
TEdit 注册机生成工具
privatekey.xml可以根据上面数据填写,或者参照加密算法中文章自行生成
*/
public class TEditKeyGenerator
{
public static void Main(String[] argv) {
String[] licenseinfo=new String[5];
licenseinfo[0]="TEdit.NET 3.0";
licenseinfo[1]="P20041117"; //订单号
licenseinfo[2]="midea0978"; //客户名称
licenseinfo[3]="100"; //license数量
licenseinfo[4]=""; //RSA签名数据
string[] textArray1 = new string[4] { licenseinfo[0], licenseinfo[1], licenseinfo[2], licenseinfo[3] } ;
string text6 = string.Join(",", textArray1);
byte[] buffer1 = ConvertHash(text6);
RSACryptoServiceProvider rsa=CreateRSAProvider("privatekey.xml");
RSAPKCS1SignatureFormatter format = new RSAPKCS1SignatureFormatter(rsa);
format.SetHashAlgorithm("SHA1");
byte[] sign=format.CreateSignature(buffer1);
//RSA签名数据
licenseinfo[4]=Convert.ToBase64String(sign);
//写license文件
DataSet LicenseDataSet = new DataSet("licDataSet");
DataTable myTable = new DataTable("TEditLicense");
DataColumn prod = new DataColumn("Product", Type.GetType("System.String"));
DataColumn order = new DataColumn("OrderNo", Type.GetType("System.String"));
DataColumn customer = new DataColumn("Customer", Type.GetType("System.String"));
DataColumn num = new DataColumn("NumberOfLicenses", Type.GetType("System.String"));
DataColumn code = new DataColumn("LicenseCode", Type.GetType("System.String"));
myTable.Columns.Add(prod);
myTable.Columns.Add(order);
myTable.Columns.Add(customer);
myTable.Columns.Add(num);
myTable.Columns.Add(code);
LicenseDataSet.Tables.Add(myTable);
DataRow newRow=myTable.NewRow();
newRow[0]=licenseinfo[0];
newRow[1]=licenseinfo[1];
newRow[2]=licenseinfo[2];
newRow[3]=licenseinfo[3];
newRow[4]=licenseinfo[4];
myTable.Rows.Add(newRow);
LicenseDataSet.WriteXml(@"c:\TeditLicense.xml");
}
/*
privateKeyFile.xml文件格式
<root>
<Modulus></Modulus>
<Exponent></Exponent>
<D></D>
<DP></DP>
<P></P>
<Q></Q>
<DQ></DQ>
<InverseQ></InverseQ>
</root>
*/
public static RSACryptoServiceProvider CreateRSAProvider(String privateKeyFile){
RSAParameters parameters1;
parameters1 = new RSAParameters();
StreamReader reader1 = new StreamReader(privateKeyFile);
XmlDocument document1 = new XmlDocument();
document1.LoadXml(reader1.ReadToEnd());
XmlElement element1 = (XmlElement) document1.SelectSingleNode("root");
parameters1.Modulus = ReadChild(element1, "Modulus");
parameters1.Exponent = ReadChild(element1, "Exponent");
parameters1.D = ReadChild(element1, "D");
parameters1.DP = ReadChild(element1, "DP");
parameters1.DQ = ReadChild(element1, "DQ");
parameters1.P = ReadChild(element1, "P");
parameters1.Q = ReadChild(element1, "Q");
parameters1.InverseQ = ReadChild(element1, "InverseQ");
CspParameters parameters2 = new CspParameters();
parameters2.Flags = CspProviderFlags.UseMachineKeyStore;
RSACryptoServiceProvider provider1 = new RSACryptoServiceProvider(parameters2);
provider1.ImportParameters(parameters1);
return provider1;
}
//计算hash值
public static byte[] ConvertHash(string plaintext)
{
HashAlgorithm algorithm1 = HashAlgorithm.Create("SHA1");
byte[] buffer1 = new UnicodeEncoding().GetBytes(plaintext);
return algorithm1.ComputeHash(buffer1);
}
private byte[] ReadChild(XmlElement parent, string name)
{
XmlElement element1 = (XmlElement) parent.SelectSingleNode(name);
return Convert.FromBase64String(element1.InnerText);
}
}
TEdit.NET has a large number of unique features over database programming with the standard data controls of ASP.NET
TEdit.NET 控件是一个典型的采用RSA加密算法处理License的控件,使用ildasm打开dll,解开资源文件我们就可以看到public key.xml文件,这就是RSA的公匙,很可惜,我们不太可能分析出私匙,所以只能从另外一个角度来破解了。
大致思路如下:
1、使用RSA算法生成自己的public/private key.
2、使用自己的public key代替资源文件中的public key
3、使用自己的private key生成license文件
这样就很简单了,根据需要我们生成如下key对。
Modulus:
yZ+YfjEffN+tHpP5qlpWTS7GxrGExkO6QpaW2h3GSPHtY54LCGx0IMLjJ4E0FY+jZ2+ARi4NDW4mfmir/ohfZj+UmYj9ncGeZoYeho8nRjaFFlR6NSLwlITL/mcJSVRxQqP1R5Z6sG0vBGJBwzXgpZu9YzhFNDV3+HOEKxRWt1E=
Exponent:
AQAB
D:
WCEAYLhMESMb4q+/g2y1KEt360WQybC064IzMeet0hidMNvV6rqtD9zfuVbKU1pTjFS6dvKOFf69qKdL9pfZSmszcg4XJ45eAaG51wf3LBsfqxKEuy3uiMJhSzE9THNS1tHhgOO/pTi/+Febub4WJlMXtGEKIYCqRUmM4iHiJbk=
DP:
OkHo5FVMfGC1az4AhHzAGWe7boAWTdv3EiQ8aqHETRcgCaTVWZleuqKJ+/9ZOqqIWeTqmNrbjYLAPqgwGICn1Q==
DQ:
GThvDxEVsDM+DNchxIf0jOhHJYb5KFsAhbUH+glXbCV+jqOUG2TZN743euCOhogdLFUtdXcHS+7pEM5gQMfNxQ==
P:
8KQ97jjfmG6FuihmA6J9gGaRgqePaH7WTvyGGNGcRDXHzDAhiSkFUx3Lok8EdBrEufYyoNvEXtjibk6GlADosw==
Q:
1n3ZlICF/T2Iil73Juz3ly612DSUAoe0A6OzsaR949vyDTn2Q+9o7l/IfbV/vLc8ixL+000IAUTu6kFH7an56w==
其实控件算法很简单,简单的将产品名称、订单号、客户名称、license数量组合进行签名算法,
生成一个xml文件就可以了,关于license文件的配置在web.config文件中,请参照文档。
下面附注册机参考算法源代码:
private byte[] ReadChild(XmlElement parent, string name)
{
XmlElement element1 = (XmlElement) parent.SelectSingleNode(name);
return Convert.FromBase64String(element1.InnerText);
}
浙公网安备 33010602011771号