当前位置: 首页 > news >正文

手动修改spire.pdf

温馨提示:经过测试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页限制了

http://www.cnnetsun.cn/news/3371573.html

相关文章:

  • AiZynthFinder未来展望:AI在合成化学中的发展趋势
  • Gramine社区贡献指南:如何参与开源库操作系统项目开发
  • 终极窗口尺寸控制工具:WindowResizer让你完全掌控任意应用程序窗口
  • 微信聊天记录永久保存与分析完整指南:让珍贵对话永不丢失
  • 从原理到应用:一文读懂汽车电机的分类与选型
  • 艾尔登法环存档编辑器:从游戏挫折到自由掌控的智能解决方案
  • 精通Mac Mouse Fix:让普通鼠标在macOS上超越触控板的实战指南
  • 算法.动态规划.最少钱币数问题(Java,递归)
  • 2021 年开源 SLAM 算法集锦
  • 计算机毕业设计之基于SpringBoot框架的天气预报系统的设计与实现
  • list stream sort Comparator.nullsLast 避免空指针的正确用法
  • 数据库设计范式
  • 炉石传说终极自动化脚本:如何让日常任务效率提升73%
  • Fast-GitHub:网络边界革命,重塑中国开发者的GitHub体验
  • 从“AI辅助”到“AI共生”:一位特级教师用ChatGPT重构整学期大纲的真实日志(含每日Prompt迭代记录+学生反馈原始数据)
  • 如何在openEuler开源之夏项目中配置NFS存储与Kubernetes持久化存储
  • ct-oval 代码架构解析:深入理解安全漏洞扫描工具的模块化设计
  • 终极IPXWrapper指南:让Windows 10/11完美运行经典游戏联机
  • 5个核心功能:StreamFX完整指南 - 为OBS Studio打造专业级视觉效果
  • 工程结算技巧,吃透了够你用到老
  • OSS Browser:阿里云对象存储的桌面级管理革命
  • Flink CDC架构深度解析:构建企业级实时数据集成的最佳实践
  • 开发者必看:Earthdata Search本地部署与开发环境搭建指南
  • OnscripterYuri入门教程:如何快速在浏览器中运行视觉小说游戏
  • 纯NumPy手写计算图:从零构建可调试神经网络
  • ct-oval 社区贡献指南:如何参与项目开发和改进
  • python中的数据类型篇_1
  • 3分钟永久激活Windows和Office:KMS智能激活工具完全指南
  • Windows 7虚拟机安装VMware Tools受阻?深入解析VMCI驱动与SHA-2签名冲突的根源与解决之道
  • Keras-MMoE源码解读:深入理解MMoE层的实现细节和数学原理