温馨提示经过测试spire.pdf8-9版本都可以按照这个步骤进行测试12版本已经不行了这个步骤不行了首先自己需要一个破解的spire但是找了半天根本找不到要么是没用的网站要么是要付费研究半天发现spire的破解其实非常容易我都怀疑官方是不是没有做混淆现在我演示一遍过程首先关于工具我们需要dnspyrider不是必须的rider需要授权但是如果你注册个新账号就可以试用30天已经足够了rider的调试非常厉害可以调试到dll库里面所以没有rider的可以根据我最终的结论直接用dnspy修改ilcode这篇文章首先破解spirepdf因为spire doc的破解完全是另一种方法所以可能会开另一篇文章讲spire doc的破解首先先去spire官方下载spire.pdf得到一个nuget包我们可以解压它得到dll这里我们先破解net6的因为net4的破解没差别只是名字变了接着在rider里引用dll创建一个20页的pdf因为官方的限制是水印加10页转换限制这段代码就是spire官方提供的spirepdf创建pdf教程链接在下面 spirepdf创建pdf 接着运行代码创建pdf和其他类型文件 查看三个文件发现都有水印并且其他文件最多9页接着开始破解首先在创建pdf文件对象创建处打上断点接着开始debug逐过程直接跳过pdf对象的创建查看pdf对象的数据定位到pdfnewdocument对象发现里面有个licenseprotector对象看这个名字其实就能猜出大概了这个类其实就是我们需要重点关注的对象类型是spr加上一个类似徽章的符号其实你会发现上面还有个internal license字段但是对他的修改很困难因为它对应的是个枚举在spire.pdf命名空间下且这四个枚举名字都一样我根本不知道怎么通过修改ilcode来绕过后来我换了个方法在后期检查license时直接修改switch的值因为switch的是枚举的int值但是似乎四个switch路径进入的方法都是一样的怎么改都没差别所以这个方法直接放弃知道了这个对象在哪之后我们就需要追踪它的创建过程拿到类名重新debug进入pdfdocument的构造函数逐过程几步后就会发现这行代码我们点进pdfnewdocument类直接搜索发现this.licenseprotector对象此时我们点进对象看起来是new了一个对象然后解析了internal license我们点进这类也就是spr\u2720打开ilviewer查看类其实这就是我们刚刚那个类命名空间在spire.pdf里面我们还会会发现有一个bool返回值的方法判断了四个enum然后返回这四个其实就是license然后return了一个bool那么很简单我们直接在这里截胡让他永远返回true复制类名打开dnspy打开spire pdf这个dll然后打开spire.pdf名称空间或者直接搜索记住修改搜索范围为所选文件然后搜索那个类名似乎搜索不到因为dnspy有些字符可以显示有些不行不行的会变成unicode的形式所以这个字符也许可以显示我们可以自己转换我直接贴在这spr✠这样能搜索到了dnspy这方面真奇怪因为方法很少所以我们可以直接找到那个方法有趣的是这个类最后有一堆byte其实就是警告信息长度应该是138回到正题在bool方法的返回语句上右键编辑il语句记住一定要在return行上不要放在上一行或者下一行不然你不知道会跳到哪去此时会跳到il编辑界面当初你右键的位置会高亮显示这两行就是返回语句我们把倒数第二行也就是0090修改为idc.i4.1具体怎么改呢你直接用鼠标点击ldloc.0然后选择我说的那个指令就行了修改完之后保存如果你没看见保存按钮那是因为你屏幕缩放太大了点击最上面窗口栏双击最大化就行保存就是直接确定我们可以看见代码已经变了直接返回true 接着左上角保存模块直接确定默认会保存到原文件其中不应该出现任何警告提示报错应该直接完成如果出现了你也许得重新来了保存完毕之后我们再测试一下我们的代码pdf文件没有水印了其他文件格式也没有10页限制了