Android修行手册 - 文档插件Aspose的jar包去除所有限制学习版

本文介绍了如何使用Aspose处理PDF、Word、Excel和PPT文档,包括免费版的限制和破解方法,提供了IntelliJIDEA中添加Aspose依赖的步骤,并分享了针对不同版本的AsposeJar包的破解代码示例。
摘要由CSDN通过智能技术生成
专栏分享

👉关于作者

众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣 !!!
专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎私我,交流群让学习不再孤单

在这里插入图片描述

👉实践过程

前段时间研究腾讯的TBS离线,虽然搞出来了,但是在学习过程中也发现了另一个文档内容,也就是Aspose。还不错,也挺全面,不仅支持的文档类型非常多,而且在各种设备上都有对应的sdk。
分为免费版和付费版,其实针对大部分情况免费版完全够用了,只是免费版有水印,也有长度数量限制。我们就学习下整个过程。
在这里插入图片描述

😜思路分析

思路?哈哈哈,不写了,相信很多人也不关心这个,只关心最终结果。我们直接看实际操作。
注:不保证所有版本通用。但思路是setLicense方法里的注册方法进行修改。

 com.aspose.pdf.License pdfLicense=new com.aspose.pdf.License();
 com.aspose.words.License wordsLicense=new com.aspose.words.License();
 com.aspose.slides.License slidesLicense = new com.aspose.slides.License();
 com.aspose.cells.License cellsLicense = new com.aspose.cells.License();
 //请点击这里的setLicense方法进入查看源码,不同版本对words 的破解方法名不一样,但道理差不多
 pdfLicense.setLicense("");
 wordsLicense.setLicense("");
 slidesLicense.setLicense("");
 cellsLicense.setLicense("");

😜动手操作

需要IntelliJ IDEA工具,然后创建一个新的java项目。
首先你需要拿到Aspose的jar包,一共四个,这四个包含pdf的,word的,excel的,ppt的。同时必须需要javassist的包。
方式一:你可以自行去官方下载: Aspose ,下载完放到本地lib下,然后利用本地记在的方式
在这里插入图片描述

<!--  aspose 文档操作工具包,项目本地lib目录引入  -->
<dependency><!--word-->
     <groupId>com.aspose</groupId>
     <artifactId>aspose-words</artifactId>
     <scope>system</scope>
     <systemPath>${basedir}/lib/aspose-words-21.1.0-jdk17.jar</systemPath>
 </dependency>
 <dependency><!--pdf-->
     <groupId>com.aspose</groupId>
     <artifactId>aspose-pdf</artifactId>
     <scope>system</scope>
     <systemPath>${basedir}/lib/aspose-pdf-21.8.jar</systemPath>
 </dependency>
 <dependency><!--excel-->
     <groupId>com.aspose</groupId>
     <artifactId>aspose-cells</artifactId>
     <scope>system</scope>
     <systemPath>${basedir}/lib/aspose-cells-21.8.jar</systemPath>
 </dependency>
 <dependency><!--pptx-->
     <groupId>com.aspose</groupId>
     <artifactId>aspose-slides</artifactId>
     <scope>system</scope>
     <systemPath>${basedir}/lib/aspose-slides-21.8-jdk16.jar</systemPath>
 </dependency>
 <dependency><!--aspose的jar破解工具-->
     <groupId>org.javassist</groupId>
     <artifactId>javassist</artifactId>
     <version>3.20.0-GA</version>
 </dependency>

方式二:或者利用IntelliJ IDEA动态依赖,依赖方式:
在pom.xml配置aspose的jar包仓库

<repositories>
        <repository>
            <id>AsposeJavaAPI</id>
            <name>Aspose Java API</name>
            <url>https://repository.aspose.com/repo/</url>
        </repository>
    </repositories>

然后分别加对应的依赖并刷新pom文件进行下载:

<dependency>
	<!--word-->
    <groupId>com.aspose</groupId>
    <artifactId>aspose-words</artifactId>
    <version>21.11</version>
	<classifier>jdk17</classifier>
</dependency>
 <dependency>
 	<!--pdf-->
    <groupId>com.aspose</groupId>
    <artifactId>aspose-pdf</artifactId>
    <version>21.8</version>
 </dependency>
 <dependency>
 	<!--excel-->
    <groupId>com.aspose</groupId>
    <artifactId>aspose-cells</artifactId>
    <version>21.8</version>
 </dependency>
 <dependency>
 	<!--pptx-->
    <groupId>com.aspose</groupId>
    <artifactId>aspose-slides</artifactId>
    <version>21.8</version>
	<classifier>jdk16</classifier>
 </dependency>
 <dependency>
 	<!--jar破解工具-->
    <groupId>org.javassist</groupId>
    <artifactId>javassist</artifactId>
    <version>3.20.0-GA</version>
 </dependency>
slides-21.8-版本学习
//传递的是你的jar本地绝对路径,如“D:\\”
private static void modifyPptJar(String jarName) {
    try {
        //这一步是完整的jar包路径,选择自己解压的jar目录
        ClassPool.getDefault().insertClassPath(jarName);
        CtClass zzZJJClass = ClassPool.getDefault().getCtClass("com.aspose.slides.internal.of.public");
        CtMethod[] methodA = zzZJJClass.getDeclaredMethods();
        for (CtMethod ctMethod : methodA) {
            CtClass[] ps = ctMethod.getParameterTypes();
            if (ps.length == 3 && ctMethod.getName().equals("do")) {
                System.out.println("ps[0].getName==" + ps[0].getName());
                ctMethod.setBody("{}");
            }
        }
        //这一步就是将破译完的代码放在桌面上
        zzZJJClass.writeFile(Desktop);
    } catch (Exception e) {
        System.out.println("错误==" + e);
    }
}
words-21.11版本学习
//传递的是你的jar本地绝对路径,如“D:\\”
private static void crackAsposeWordsJar(String jarName){
        try {
            //这一步是完整的jar包路径,选择自己解压的jar目录
            ClassPool.getDefault().insertClassPath(jarName);
            //获取指定的class文件对象
            CtClass zzZJJClass = 				ClassPool.getDefault().getCtClass("com.aspose.words.zzXDb");
            //从class对象中解析获取指定的方法
            CtMethod[] methodA = zzZJJClass.getDeclaredMethods("zzY0J");
            //遍历重载的方法
            for (CtMethod ctMethod : methodA) {
                CtClass[] ps = ctMethod.getParameterTypes();
                if (ctMethod.getName().equals("zzY0J")) {
                    System.out.println("ps[0].getName==" + ps[0].getName());
                    //替换指定方法的方法体
                    ctMethod.setBody("{this.zzZ3l = new java.util.Date(Long.MAX_VALUE);this.zzWSL = com.aspose.words.zzYeQ.zzXgr;zzWiV = this;}");
                }
            }
            //这一步就是将破译完的代码放在桌面上
            zzZJJClass.writeFile(Desktop);
            //获取指定的class文件对象
            CtClass zzZJJClassB = ClassPool.getDefault().getCtClass("com.aspose.words.zzYKk");
            //从class对象中解析获取指定的方法
            CtMethod methodB = zzZJJClassB.getDeclaredMethod("zzWy3");
            //替换指定方法的方法体
            methodB.setBody("{return 256;}");
            //这一步就是将破译完的代码放在桌面上
            zzZJJClassB.writeFile(Desktop);
        } catch (Exception e) {
            System.out.println("错误==" + e);
        }
    }
cells-21.8版本学习
//传递的是你的jar本地绝对路径,如“D:\\”
public static void crackAsposeCells(String JarPath) throws NotFoundException,CannotCompileException, IOException {
    // 这个是得到反编译的池
    ClassPool pool = ClassPool.getDefault();
    // 取得需要反编译的jar文件,设定路径
    pool.insertClassPath(JarPath);
    CtClass ctClass = pool.get("com.aspose.cells.License");
    CtMethod method_isLicenseSet = ctClass.getDeclaredMethod("isLicenseSet");
    method_isLicenseSet.setBody("return true;");
    CtMethod method_setLicense = ctClass.getDeclaredMethod("setLicense");
    method_setLicense.setBody("{    a = new com.aspose.cells.License();\n" +
            "    com.aspose.cells.zbkl.a();}");
    CtMethod methodL = ctClass.getDeclaredMethod("l");
    methodL.setBody("return new java.util.Date(Long.MAX_VALUE);");

    ctClass.writeFile(Desktop);
}
pdf-21.8版本学习
//传递的是你的jar本地绝对路径,如“D:\\”
private static void crackAsposePdfJar(String jarName) {
    try {
        ClassPool.getDefault().insertClassPath(jarName);
        CtClass ctClass = ClassPool.getDefault().getCtClass("com.aspose.pdf.ADocument");
        CtMethod[] declaredMethods = ctClass.getDeclaredMethods();
        int num = 0;
        for (int i = 0; i < declaredMethods.length; i++) {
            if (num == 2) {
                break;
            }
            CtMethod method = declaredMethods[i];
            CtClass[] ps = method.getParameterTypes();
            if (ps.length == 2
                    && method.getName().equals("lI")
                    && ps[0].getName().equals("com.aspose.pdf.ADocument")
                    && ps[1].getName().equals("int")) {
                //源码ADocument类的这个方法限制页数:
                // static boolean lI(ADocument var0, int var1) {
                //        return !lb() && !lj() && !var0.lt() && var1 > 4;
                //    }
                // 最多只能转换4页,处理返回false,无限制页数
                System.out.println(method.getReturnType());
                System.out.println(ps[1].getName());
                method.setBody("{return false;}");
                num = 1;
            }
            if (ps.length == 0 && method.getName().equals("lt")) {
                // 水印处理
                method.setBody("{return true;}");
                num = 2;
            }
        }
        //修改完,把类的输出到指定目录(桌面下)
		ctClass.writeFile(Desktop);
    } catch (NotFoundException e) {
        e.printStackTrace();
    } catch (CannotCompileException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

}

上面执行完毕之后,会对应的生成新的jar文件,然后利用压缩包打开这个jar文件,找到这俩文件

META-INF/37E3C32D.SF
META-INF/37E3C32D.RSA

如果有则删除,如果没有不用管。接着创建个license.xml的文件放到resources目录下

<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>
FileInputStream fis = new FileInputStream("你存放的license.xml路径");
License license=new License();
license.setLicense(fis);

至此去除了水印和页数限制。

👉其他

📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。

温馨提示点击下方卡片获取更多意想不到的资源。
空名先生

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芝麻粒儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值