上一篇帖子通过dnSpy逆向爆破了Spire.Xls的水印
然后有大佬@cdj68765 提供了更加简单粗暴的思路和方法,就是通过反射直接赋值激活信息。
我根据大佬提供的代码片段和思路写了一个简单的拓展类,每次New Workbook或者New Document的时候直接调用即可注入激活信息。
使用最新的Nuget包:Spire.Office 7.9.0
目前已知的激活信息有2个分别是:
[C#] 纯文本查看 复制代码
Spire.SpreadsheetSpire.DocViewer.Wpf
如果有大佬能提供更多的激活字符串
下面是调用和拓展方法
Excel
[C#] 纯文本查看 复制代码
Workbook wb = new Workbook();wb.Crack();//或者Workbook wb = InjectLicense(new Workbook());
Word
[C#] 纯文本查看 复制代码
Document dc = new Document();dc.Crack();//或者Document dc = InjectLicense(new Document());
[C#] 纯文本查看 复制代码
public static class SpireOfficeHelpers { /// <summary> /// 注入激活信息 /// </summary> /// <param name="workbook"></param> public static void Crack(this Workbook workbook) { InjectLicense(workbook); } /// <summary> /// 注入激活信息 /// </summary> /// <param name="document"></param> public static void Crack(this Document document) { InjectLicense(document); } /// <summary> /// 注入激活信息,并返回该类型 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="t"></param> /// <returns></returns> public static T InjectLicense<T>(T t) where T : class { var InternalLicense = t.GetType().GetProperty("InternalLicense", BindingFlags.NonPublic | BindingFlags.Instance); var TypeLic = InternalLicense.PropertyType.Assembly.CreateInstance(InternalLicense.PropertyType.GetTypeInfo().FullName); foreach (var item in TypeLic.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance)) { if (item.FieldType.IsArray) { item.SetValue(TypeLic, new string[] { "Spire.Spreadsheet", "Spire.DocViewer.Wpf" }); } else if (item.FieldType.IsEnum) { item.SetValue(TypeLic, 3); } } InternalLicense.SetValue(t, TypeLic); return t; } }