Spire.Xls 7.8.43 破解备忘录

试用版的spire.xls在生成excel时,会在文件中加入一个名叫Evaluation Warning的Sheet,显示试用信息以及版权信息购买方式等,
Spire.Xls 7.8.43 破解备忘录_第1张图片
 
明显生成这样的excel是不能用于生产环境的,
如果要去掉这个sheet,需要找到关键代码,使用ILSpy或者Reflector打开dll文件(Reflactor会报错,还是ILSpy靠谱), 明显代码是被混淆了的,基本上可以判断混淆的字符串是用到一个解密方法来解密成原字符串的:
 
        internal  static  string  b(  string  A_0,  int  A_1)
        {
             char [] array = A_0.ToCharArray();
             int  num = 1400442094 + A_1;
             int  arg_47_0;
             int  arg_14_0;
             if  ((arg_14_0 = (arg_47_0 = 0)) < 1)
            {
                 goto  IL_47;
            }
        IL_14:
             int  num2;
             int  expr_14 = num2 = arg_14_0;
             char [] arg_44_0 = array;
             int  arg_44_1 = num2;
             char  expr_1B = array[num2];
             byte  b = ( byte  )(( int )(expr_1B &  'ÿ' ) ^ num++);
             byte  b2 = ( byte  )(( int )(expr_1B >> 8) ^ num++);
             byte  arg_3C_0 = b2;
            b2 = b;
            b = arg_3C_0;
            arg_44_0[arg_44_1] = (  char )(( int  )b2 << 8 | ( int )b);
            arg_47_0 = expr_14 + 1;
        IL_47:
             if  ((arg_14_0 = arg_47_0) >= array.Length)
            {
                 return  string  .Intern( new  string (array));
            }
             goto  IL_14;
        }
第一个参数是加密后的字符串,第二个参数是一个数字,具体不知道代表什么,在调用的时候按照代码里面的值拷贝过来就行了。
想了一会没想到突破口,最后想到了,利用反推办法 ,既然在写文件的时候会多插入一个sheet,而且还会写入字符串到单元格,也就是会调用
Worksheet.Range[x,y]="版权信息";
类似的代码,分析一下Worksheet的Range属性
Spire.Xls 7.8.43 破解备忘录_第2张图片
 
这个 Workbook.0的方法很可疑,进去看看
Spire.Xls 7.8.43 破解备忘录_第3张图片
 
解密一下
Spire.Xls 7.8.43 破解备忘录_第4张图片
可以确定这个方法就是用来插入版权信息sheet的,把这个方法体的内容清空应该就可以了,利用Reflexil修改IL
Spire.Xls 7.8.43 破解备忘录_第5张图片
 
最后用Reflexil 保存dll,并去掉程序集的强命名(Strong Name)
这样还没完,把这个修改后的dll重新引用后,发现还是不能正常工作,一度怀疑去掉强命名以后,dll内部会做签名的自检查验证,这么高级的验证不知道怎么做,也很想知道,找到答案后其实很简单:
原因是Spire.XLS.dll还会实例化Spire.Pdf.dll中的 被标记为 internal的类,Spire.XLS默认情况是不能调用Spire.Pdf程序集里的标记为 internal的类,但是在
以后可以借鉴一下,让别人就算把签名去掉也没法用你写的dll,但是如果在Spire.Pdf 程序集描述中加上[assembly:  InternalsVisibleTo就允许访问了
[ assemblyInternalsVisibleTo( "Spire.XLS, PublicKey=002400000480000094000000060200000024000052534131000400000100010095B1C6F75D4349575193724350FFE019FE6135C34E66BCD90B591FE2ABEE1AD5347CEDE09F870A5E8BE4E78972CE20A719CE85714C093C623685DDD0FC88C3B65B6C35E3316F161B356F921B26D9441FD5EC0436E839C721F7456BBA01523B565AFFD8FED8114551765F0F01C287B8B32BC81042D0508449F369B1254D8463CD")]
          修改为 [ assemblyInternalsVisibleTo( "Spire.XLS")]  再把Spire.Pdf 程序集的强命名去掉,保存
 
最后Spire.XLS.dll ,Spire.Pdf.dll ,Spire.License.dll 这3个dll一起就使用
 

你可能感兴趣的:(Spire.Xls 7.8.43 破解备忘录)