技术教程破解资源

通过反射注入去除Spire.Office的PDF水印

整理:jimmy2024/11/18浏览2
简介上一篇帖子通过dnSpy逆向爆破了Spire.Xls的水印然后有大佬@cdj68765 提供了更加简单粗暴的思路和方法,就是通过反射直接赋值激活信息。我根据大佬提供的代码片段和思路写了一个简单的拓展类,每次New Workbook或者New Document的时候直接调用即可注入激活信息。使用最新的

上一篇帖子通过dnSpy逆向爆破了Spire.Xls的水印
然后有大佬@cdj68765 提供了更加简单粗暴的思路和方法,就是通过反射直接赋值激活信息。
我根据大佬提供的代码片段和思路写了一个简单的拓展类,每次New Workbook或者New Document的时候直接调用即可注入激活信息。
使用最新的Nuget包:Spire.Office 7.9.0
目前已知的激活信息有2个分别是:
[C#] 纯文本查看 复制代码
Spire.SpreadsheetSpire.DocViewer.Wpf 

如果有大佬能提供更多的激活字符串通过反射注入去除Spire.Office的PDF水印
下面是调用和拓展方法
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;        }    }