不开源项目aspose.words最新版23.10的一些科普

Aspose
placeholder image
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年内学习的话并不会过时。

1.Aspose.Words 22.12

/**
 * 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");
    }

}

2.Aspose.Words 23.4

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);
    }

}

3.Aspose.Words 23.10

略。

4.说明

(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)效果图参考如下:

运行效果预览-精简

 点赞


 发表评论

当前回复:作者

 评论列表


留言区