- 点击跳转=>Unity3D特效百例
- 点击跳转=>案例项目实战源码
- 点击跳转=>游戏脚本-辅助自动化
- 点击跳转=>Android控件全解手册
- 点击跳转=>Scratch编程案例
👉关于作者
众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣 !!!
专注于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/
📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。文章来源:https://www.toymoban.com/news/detail-542476.html
温馨提示:点击下方卡片获取更多意想不到的资源。文章来源地址https://www.toymoban.com/news/detail-542476.html
到了这里,关于Android修行手册 - 文档插件Aspose的jar包去除所有限制学习版的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!