还记得以前看过2.0版本的,由于没有安装VS,不得要领,最终得出的注册码不正确,今天有空回来来看看,发现也就差那么一点点了。
运行试用版,会出现一个序列号,类似于DSP.02.05.01-01-0000000123456789,从这里开始,很快就可以定位到了LicenseProvider,对比其中的几个方法,发现
private void a(byte[] A_0, byte[] A_1, int A_2, ref short A_3)
方法是用来校验数据的,“0000000123456789”这一段是随机生成的机器码,经过算法分析最后可以产生一段16位的代码就是激活的序列号了,其中private void a(string A_0, ref string A_1, int A_2)方法很可疑,研究发现就是需要的代码,写一段短小的程序调用就得到了结果。
由于是private的,所以用ildasm导出将该方法public之后,重新组装就成了需要的代码,例如
using System;
using xxx.xxx.xxx;
public class FPWinTool
{
public static void Main(String[] argv)
{
xxxxLicenseProvider lc=new xxxxLicenseProvider();
short num4=0;
string txt=null;
String data="DSP.02.05.01-01-0000000123456789";
ck.a(data,ref txt,num4);
Console.WriteLine("SN="+txt);
}
}
估计web版本的实现基本相似,有兴趣的可以研究看看。