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);
      }

}