温馨提示:经过测试spire.pdf8-9版本都可以按照这个步骤进行,测试12版本已经不行了这个步骤不行了
首先自己需要一个破解的spire,但是找了半天根本找不到,要么是没用的网站,要么是要付费,研究半天发现spire的破解其实非常容易,我都怀疑官方是不是没有做混淆,现在我演示一遍过程
首先关于工具,我们需要dnspy,rider(不是必须的)
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页限制了