工具版本:IDEA

JDK版本:1.8

一、 pom.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>cn.kiion</groupId><artifactId>aspose-crack</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>com.aspose</groupId><artifactId>aspose-words</artifactId><version>18.6</version><classifier>jdk16</classifier></dependency><!-- https://mvnrepository.com/artifact/org.javassist/javassist --><dependency><groupId>org.javassist</groupId><artifactId>javassist</artifactId><version>3.26.0-GA</version></dependency></dependencies><repositories><repository><id>aliyun-repos</id><url>https://maven.aliyun.com/nexus/content/groups/public/</url><snapshots><enabled>false</enabled></snapshots></repository><repository><id>AsposeJavaAPI</id><name>Aspose Java API</name><url>http://repository.aspose.com/repo/</url></repository></repositories></project>

二、创建一个license.xml

放在项目根路径下

<License><Data><Products><Product>Aspose.Total for Java</Product><Product>Aspose.Words for Java</Product></Products><EditionType>Enterprise</EditionType><SubscriptionExpiry>20991231</SubscriptionExpiry><LicenseExpiry>20991231</LicenseExpiry><SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber></Data><Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature>
</License>

三、调试代码

package cn.kiion.aspose.util;import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;import com.aspose.words.Document;
import com.aspose.words.License;/*** @author ZCF*/
public class Word2PdfUtil {public static void main(String[] args) {wordConverterToPdf("C:\\Users\\zcf\\Desktop\\test.docx", "C:\\Users\\zcf\\Desktop\\test.pdf");}private static boolean getLicense() {boolean result = false;try {InputStream is = Word2PdfUtil.class.getClassLoader().getResourceAsStream("license.xml");License license = new License();license.setLicense(is);result = true;} catch (Exception e) {e.printStackTrace();}return result;}public static void wordConverterToPdf(String wordPath, String pdfPath) {// 验证License 若不验证则转化出的pdf文档会有水印产生if (!getLicense()) {return;}try {long old = System.currentTimeMillis();// 新建一个pdf文档File file = new File(pdfPath);FileOutputStream os = new FileOutputStream(file);// Address是将要被转化的word文档Document doc = new Document(wordPath);// 全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF, EPUB, XPS, SWF 相互转换doc.save(os, com.aspose.words.SaveFormat.PDF);long now = System.currentTimeMillis();os.close();//转化用时System.out.println("word turn to pdf token:" + ((now - old) / 1000.0) + "s");} catch (Exception e) {e.printStackTrace();}}}

四、调试过程

1. Debug 模式运行 Word2PdfUtil.main()

Debug 模式运行,会抛出异常,跟踪代码发现是 com.aspose.words.zzZLX 类的 zzZ 方法抛出的异常

2. 定位到抛出异常的方法

private static void zzZ(Node var0, Node var1) throws Exception

private static void zzZ(Node var0, Node var1) throws Exception {byte[] var2;if (var0 != null) {StringBuilder var3;zzZ(var3 = new StringBuilder(), var0);var2 = var3.toString().getBytes("UTF-16LE");} else {var2 = new byte[0];}byte[] var14;if (var1 != null) {var14 = zz35.decode(var1.getFirstChild().getNodeValue());} else {var14 = new byte[0];}Signature var4 = Signature.getInstance("SHA1withRSA");String var7 = "AQAB";String var6 = "0nRuwNEddXwLfXB7pw66G71MS93gW8mNzJ7vuh3Sf4VAEOBfpxtHLCotymv1PoeukxYe31K441Ivq0Pkvx1yZZG4O1KCv3Omdbs7uqzUB4xXHlOub4VsTODzDJ5MWHqlRCB1HHcGjlyT2sVGiovLt0Grvqw5+QXBuinoBY0suX0=";String var13 = "0nRuwNEddXwLfXB7pw66G71MS93gW8mNzJ7vuh3Sf4VAEOBfpxtHLCotymv1PoeukxYe31K441Ivq0Pkvx1yZZG4O1KCv3Omdbs7uqzUB4xXHlOub4VsTODzDJ5MWHqlRCB1HHcGjlyT2sVGiovLt0Grvqw5+QXBuinoBY0suX0=";byte[] var8 = zz35.decode("0nRuwNEddXwLfXB7pw66G71MS93gW8mNzJ7vuh3Sf4VAEOBfpxtHLCotymv1PoeukxYe31K441Ivq0Pkvx1yZZG4O1KCv3Omdbs7uqzUB4xXHlOub4VsTODzDJ5MWHqlRCB1HHcGjlyT2sVGiovLt0Grvqw5+QXBuinoBY0suX0=");byte[] var9 = zz35.decode(var7);var8 = zzZg(var8);var9 = zzZg(var9);BigInteger var10 = new BigInteger(1, var8);BigInteger var11 = new BigInteger(1, var9);RSAPublicKeySpec var12 = new RSAPublicKeySpec(var10, var11);PublicKey var5 = KeyFactory.getInstance("RSA").generatePublic(var12);var4.initVerify(var5);var4.update(var2);if (!var4.verify(var14)) {throw new IllegalStateException("The signature is invalid.");}
}

3.  解决方案:使用 javassist 工具将这个方法体删除即可

这个是验证签名的逻辑,删除掉这段校验的逻辑即可,使用下面的代码进行删除

package cn.kiion.aspose.crack.word;import javassist.*;import java.io.File;
import java.io.IOException;/**** @author ZCF*/
public class WordCrack186 {public static void main(String[] args) throws NotFoundException, CannotCompileException, IOException {crackMethod("C:\\Users\\zcf\\Desktop\\aspose-words-18.6-jdk16.jar");}public static void crackMethod(String jarFile) throws NotFoundException, CannotCompileException, IOException {// 获取 Jar 包ClassPool.getDefault().insertClassPath(jarFile);// 获取 com.aspose.words.zzZLX 类ClassPool pool = ClassPool.getDefault();CtClass c2 = ClassPool.getDefault().getCtClass("com.aspose.words.zzZLX");// 查找并获取 private static void zzZ(Node var0, Node var1) 方法CtMethod aMethod = c2.getDeclaredMethod("zzZ", new CtClass[]{pool.get("org.w3c.dom.Node"), pool.get("org.w3c.dom.Node")});// 重置方法体aMethod.setBody("return;");c2.writeFile();}}

4. 替换原 jar 包中的 com.aspose.words.zzZLX 类即可

使用 jar 命令进行替换Jar中对应的 .class。参考博客:替换jar包指定的文件_giianhui的专栏-CSDN博客_winrar替换jar中文件

jar uvf aspose-words-18.6-jdk16.jar com/aspose/words/zzZLX.class

5. 删除 Jar 中的指纹记录文件

7z d aspose-words-18.6-jdk16.jar META-INF/LE-9AD48.SF7z d aspose-words-18.6-jdk16.jar META-INF/LE-9AD48.RSA

aspose-words-18.6-jdk16.jar 去除签名方法解析相关推荐

  1. 安卓系列全机型刷写原生 去除wifi打叉 去除感叹号方法解析

    很多友友不喜欢官方自带的系统.爱刷写第三方官改或者原生系统.其中原生系统的优点在于系统资源占用少.操作流畅.后台运行程序可控等等为很多玩机用户刷写体验.原生谷歌的系统对于国内用户来说一般注意的就是两个 ...

  2. Aspose破解版去除签名问题

    Aspose直接使用破解版会提示签名问题,各种百度和谷歌都找不到解决办法.最后随便试了下竟然成了. 第一步:使用正版编译 第二步:使用破解版Aspose.Words.dll替换正版DLL(全部替换也可 ...

  3. java jar包签名

    JAR文件可以用 jarsigner工具或者直接通过 java.securityAPI 签名.签名后的JAR 本身的文件 文件与原来JAR本身的 文件完全相同,只是更新了它的 manifest文件,并 ...

  4. JNLP(jar包签名)

    2019独角兽企业重金招聘Python工程师标准>>> JNLP(Java Network Launching Protocol )是java提供的一种可以通过浏览器直接执行java ...

  5. 无法对jar进行签名,Android jar signer问题

    如果需要最终发行你的android程序,必需为apk文件签名.这里apk和jar的签名方式都是一样的,使用sun jdk的jarsigner工具来完成,但是执行时会提示jarsigner: 无法对 j ...

  6. java jnlp 签名_JNLP(jar包签名)

    JNLP(Java Network Launching Protocol )是java提供的一种可以通过浏览器直接执行java应用程序的途径,它使你可以直接通过一个网页上的url连接打开一个java应 ...

  7. pdfbox 去除签名 保留签名图片

    需求描述 最近来了一个需求,客户要在 10 份 PDF 上使用电子签名,签完了以后还要合并再进行一次总的签名 众所周知,电子签名当文档本身内容发生变化后,它的 hash 值就变了,和电子签名存储的 h ...

  8. 通过resign.jar重签名apk后出现raw目录下文件未找到的解决方法

    问题: 通过resign.jar重签名的apk后,安装运行后直接出现闪退的情况,查看log的原因是提示android.content.res.Resources$NotFoundException: ...

  9. 使用keytool和jarsigner对jar包签名

    1.执行以下命令,生成文件名为 test.ks 的 keystore,并生成 alias 为 testkey 的 key pair keytool -keystore test.ks -genkey ...

最新文章

  1. MIGO相关bapi:BAPI_GOODSMVT_CREATE 移动类型314 E
  2. 国家的重视让少儿编程越来越火爆!
  3. python人工智能——机器学习——模型选择与调优
  4. java servlet .net_JAVA学习之 Model2中的Servlet与.NET一般处理程序傻傻分不清楚
  5. windows上使用的免费连接linux终端xshell6,xftp6下载
  6. Android Alarm自上而下 调试浅析
  7. 云原生时代来袭 下一代云数据库技术将走向何方?
  8. VC++2012编程演练数据结构《35》多路平衡归并
  9. oracle表ddl,七、Oracle中DDL改变表结构操作
  10. 8 定制10MINs 3
  11. IntelliJ IDEA 初始化项目时No Java SDK Found
  12. Guava学习笔记(四):复写的Object常用方法
  13. c++编译器和连接器介绍
  14. 2018年,免费、无水印录屏软件有哪些?
  15. Android闪闪发光字体
  16. 21.手绘Spring IOC运行时序图
  17. CCF关于NOIP2018获奖证书发放的公告
  18. Zuul动态路由及动态Filter实现
  19. 如何在双十一给自己送个“陪聊女友”——基于飞桨Plato搭建多轮对话模型
  20. 西门子精智屏下载触摸屏程序时提示缺少面板映像怎样解决?

热门文章

  1. 2019年云南将持续严打严管旅游市场秩序
  2. 深度神经网络面临的问题
  3. windows无法打开添加打印机_打印机无法打印是怎么回事 打印机无法打印的解决方法 - 台式电脑...
  4. 【微服务器集群】做毕设收尾阶段,如何创建微服务器集群来跑自己的项目?
  5. PMP项目管理项目中的文件
  6. 史帝奇文旅轨道影院案例——“三亚”穿越天涯海角美人鱼岛
  7. 利用SerialPort类实现收发短信(C# 2.0)
  8. 剪枝与重参第二课:修剪方法和稀疏训练
  9. 华安证券股票测试最准的软件,华安证券(600909)个股分析_牛叉诊股_同花顺财经...
  10. c语言考试填空题不删横线,2015年计算机二级考试《C语言》提高练习题(11)