不开源项目aspose.words最新版23.10的一些科普
Aspose
admin 发布于:2023-11-05 16:13:55
阅读:loading
前面在摸索了Aspose.Cells for Java 23.10(时下最新版)的激(pò)活(jīē)整体上摸索了一些时间和实践了一些示例,最终也只花费了近4个小时就完活了,所以我错误的认为Aspose.Words for Java 23.10(时下最新版)的激(pò)活(jīē)也不会太复杂,于是我按照之前的经验进行各种分析、各种实践,终于终于还是没有能正常的激活,但我的性格还是比较倔强的,仍然是坚持不懈的各种尝试,只为单纯的学习进步,商业软件请勿直接使用于生产环境(购买商业授权)。
在整个过程中也有看到有别的博客文章对于低版本的破解实践,太早太老的版本我就没有仔细看和借鉴了,因为我个人要么不实践要么就找相对较为新颖一些的版本,当然最新版是最好的,所以我一共实践的版本是Aspose.Words for Java 22.12、23.4、23.10 这三个版本,它们的Release版本发布时间分别是:2022年12月9日、2023年4月7日、2023年10月19日,整体上来说版本都还是比较新的,在今后的5年内学习的话并不会过时。
/**
* AsposeWords_22_12
*
* @author chendd
* @date 2023/10/29 1:08
*/
public class AsposeWords_22_12 {
public static void main(String[] args) throws Exception {
ClassPool pool = ClassPool.getDefault();
String jar = System.getProperty("user.dir") + "/aspose.words/lib/aspose-words-22.12-jdk17.jar";
pool.insertClassPath(jar);
// 类文件1,从com.aspose.words.License类文件找到。
CtClass clazz = ClassPool.getDefault().getCtClass("com.aspose.words.zzYvW");
clazz.getDeclaredMethod("zzY34").setBody("{return com.aspose.words.zzZ8h.zzW8b;}");
clazz.getDeclaredMethod("zzjS").setBody("{this.zzWbe = com.aspose.words.zzZ8h.zzW8b; zzZAO = this; }");
CtMethod[] methodA = clazz.getDeclaredMethods();
for (CtMethod ctMethod : methodA) {
CtClass[] ps = ctMethod.getParameterTypes();
if (ps.length == 1 && ctMethod.getName().equals("zzjS") && ps[0].getName().equals("java.io.InputStream")) {
ctMethod.setBody("{this.zzWbe = com.aspose.words.zzZ8h.zzW8b; zzZAO = this; }");
}
}
//clazz.getDeclaredConstructors()[0].setBody("{System.out.println(\"do nothing at zzYvW.\");}");
clazz.getDeclaredConstructors()[0].setBody("{}");
clazz.writeFile("aspose-words-22.12");
// 类文件2,从类com.aspose.words.zzYvW的方法zzY34()进。大概是第171行。
CtClass clazz2 = ClassPool.getDefault().getCtClass("com.aspose.words.zzWS8");
clazz2.getDeclaredMethod("zzQG").setBody("{}");
clazz2.getDeclaredMethod("zzH0").setBody("{return com.aspose.words.zzY7H.zzZPG;}");
//clazz2.getDeclaredConstructors()[0].setBody("{System.out.println(\"do nothing at zzWS8.\");}");
clazz2.writeFile("aspose-words-22.12");
// 类文件3(关键点:删除水印)从类com.aspose.words.zzWS8W的方法zzW5m()进,大概是665行。
CtClass clazz3 = ClassPool.getDefault().getCtClass("com.aspose.words.zzYJa");
clazz3.getDeclaredMethod("zzXuq").setBody("{zzYOl = 29273535023874148L;}");
clazz3.writeFile("aspose-words-22.12");
}
}
package cn.chendd;
import com.aspose.words.BuildVersionInfo;
import com.aspose.words.Document;
import com.aspose.words.License;
import com.aspose.words.SaveFormat;
import java.io.ByteArrayInputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.util.ArrayList;
/**
* 23.4的版本反射破解调用
*
* @author chendd
* @date 2023/11/3 17:06
*/
public class AsposeWords_23_4_Reflect {
public static void main(String[] args) throws Exception {
String html =
"<html>" +
"<head>" +
"<title>https://www.chendd.cn</title>" +
"</head>" +
"<body>" +
"<table>" +
"<tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td></tr>" +
"<tr><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td></tr>" +
"</table>" +
"</bod>" +
"</html>";
String version = BuildVersionInfo.getVersion();
System.out.println("aspose.words version:" + version);
registerWord();
Document doc = new Document(new ByteArrayInputStream(html.getBytes()));
doc.save("aspose.words_output.doc", SaveFormat.DOC);
doc.save("aspose.words_output.docx", SaveFormat.DOCX);
doc.save("aspose.words_output.pdf", SaveFormat.PDF);
doc.save("aspose.words_output.png", SaveFormat.PNG);
System.out.println("aspose.words convert is success");
}
/**
* aspose-words:jdk17:23.4 版本
*/
public static void registerWord() throws Exception {
// 构造一个注册信息
Class<?> zzXgCClass = Class.forName("com.aspose.words.zzXgC");
Constructor<?> constructors = zzXgCClass.getDeclaredConstructors()[0];
constructors.setAccessible(true);
Object instance = constructors.newInstance("zzW5k", "zzYON");
// zzXFN = 1
Field zzXFN = zzXgCClass.getDeclaredField("zzXFN");
zzXFN.setAccessible(true);
zzXFN.set(instance, 1);
// zzW8s = 0
// zzX6D = "8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7" // SerialNumber
// zzw9 SubscriptionExpiry
// zzZq3 LicenseExpiry
// zzW5k <Data> ...
// zzYON 签名 Signature
// zzXjC zzZoT 对象 空
// 把注册信息放到 zzYVA这个类中来
Class<?> zzYVAClass = Class.forName("com.aspose.words.zzYVA");
Field zzwP = zzYVAClass.getDeclaredField("zzwP");
zzwP.setAccessible(true);
ArrayList<Object> zzwPValue = new ArrayList<>();
zzwPValue.add(instance);
zzwP.set(null, zzwPValue);
// 生成文档会掉这个来判断 zzXQo
Class<?> zzXQoClass = Class.forName("com.aspose.words.zzXQo");
Field zzHA = zzXQoClass.getDeclaredField("zzHA");
zzHA.setAccessible(true);
zzHA.set(null, 128);
Field zzWod = zzXQoClass.getDeclaredField("zzWod");
zzWod.setAccessible(true);
zzWod.set(null, false);
}
}
略。
(1)Aspose.Words 22.12和23.4的版本都是从网上文章参考的结果;
(2)Aspose.Words 23.4版本使用的是改写jar包中的代码的方式进行实现的,后者是纯纯的反射调用实现,两种方式都可以;
(3)Aspose.Words 23.10版本笔者也尝试使用改写jar包中的代码的方式并未成功,参考23.4版本的代码反射实现也没有成功,在花了一个小时后只对第一次调用是成功的,对于后续的多次调用就失败了,而且还需要手工调用License.class中的相关方法,而这里的用反射的方法也不需要注册License;
(4)Aspose.Words 22.12的使用需要使用修改后的jar,而Aspose.Words 23.4版本只使用反射就可以,无需更改原jar,所以应当不算是破解吧;
(5)Aspose.Words 23.10版本笔者在尝试后最终也考虑使用反射的方式调用,毕竟不需要改动原始的jar文件,而且也不需要手工注册License,对于最新版本的激活主要还是前面23.4版本的激活大佬太威武,同时也得益于我在前面的瞎捣鼓,各种尝试分析的过程对于它相关的代码也能有一些熟悉和掌握,最终没有费太大的力气搞定的;
(6)若果说未使用授权的方式调用后又是怎样的结果的,结构就是生成的文档带背景图的水印、带页眉和页脚部分的文字;
(7)本篇文章主要是简单科普一下`aspose.words`组件最新版的介绍,相关内容请勿用于商业用途,如有带来任何问题,均与本篇文章作者无关(请勿用于商业用途、请勿用于商业用途、请勿用于商业用途);
(8)欢迎在本站留言交流,最后附上Aspose.Words 23.10版本代码示例,根据html代码转换文档的示例(转换为doc、docx、pdf、png)效果图参考如下:
点赞