aspose是一个比较稳定快速的office转pdf的插件,但是试用版会自动在pdf上加水印,下附去水印教程,急用的同学可以到文章底部下载:
实现过程
首先在官网下载最新版20.4版本https://repository.aspose.com/repo/com/aspose/aspose-words/
直接加入到项目中,找到License.class
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
public class test{
private zz2G zzYJD = zz2G.zzp3();
public License() { }
public void setLicense(String licenseName) throws Exception { if (licenseName == null) { throw new NullPointerException(this.zzYJD.zzZv(new byte[]{108, 105, 99, 101, 110, 115, 101, 78, 97, 109, 101})); } else { (new zzZJJ()).zzT(licenseName, zzZY7.zzkB()); } }
public void setLicense(InputStream stream) throws Exception { if (stream == null) { throw new NullPointerException(this.zzYJD.zzZv(new byte[]{115, 116, 114, 101, 97, 109})); } else { (new zzZJJ()).zzV(stream); } } }
|
发现这两个setLicense, 返回的是new zzZJJ().zzT和new zzZJJ().zzV
查看这两个函数发现zzT调用了zzV 所以重点就在zzV()函数里。
==================忘了=============
是的,一通debug发现加水印的地方的判断是zzZbN函数是否等于1,但是现在突然忘了在哪了,不过知道这个就行,直接把zzZbN()返回值改成1就行了。
所以直接javassist反编译(ps:这里zzZbM逻辑跟zzZbN逻辑一样,但是只改了zzZbN就可以去水印,目前还没发现是在哪里用到了这个函数)
1 2 3 4 5 6 7 8 9
|
public class test{ public static void main(String[] args) throws Exception { ClassPool.getDefault().insertClassPath("F:\\workSpace\\xxx\\WEB-INF\\lib\\aspose-words-20.4-jdk17.jar"); CtClass zzZJJClass = ClassPool.getDefault().getCtClass("com.aspose.words.zzZJJ"); CtMethod zzv = zzZJJClass.getDeclaredMethod("zzZbN"); zzv.setBody("{return 1;}"); zzZJJClass.writeFile("F:\\workSpace\\"); } }
|
生成的class文件替换到现在的jar包里,最后把jar包里的.rsa和.sf文件删除即可
===========================Aspose.Slides=================================
这个和words有些不同
同样进入License.class进入y6.class查找类似的方法
发现这个if函数很像,把返回值改成1试试,然而发现if函数是被重载的,
而javassist直接通过if查找会不知道找哪个方法,直接修改的话修改的是
上边的这个方法,想了半天想到了个简单的办法,查找if方法,把这个方法改成个临时名称,最后再修改回来如下
1 2 3 4 5 6 7 8 9 10
|
public class test { private static void crackPpt() throws NotFoundException, CannotCompileException, IOException { ClassPool.getDefault().insertClassPath("F:\\workSpace\\xxx\\WEB-INF\\lib\\aspose-slides-20.4-jdk16.jar"); CtClass ctClass = ClassPool.getDefault().getCtClass("com.aspose.slides.y6"); ctClass.getDeclaredMethod("if").setName("tempListIf"); ctClass.getDeclaredMethod("if").setBody("{return 1;}"); ctClass.getDeclaredMethod("tempListIf").setName("if"); ctClass.writeFile("C:\\Users\\ThinkPad\\Desktop\\"); } }
|
同理拿生成出来的class覆盖jar包里的class,并删除.rsa和.sf文件 发现水印已经去掉啦
========================Aspose.Cells=========================
同理找License,发现zkg.class->zasj.class
1 2 3 4 5 6 7 8 9 10
|
public class test { private static void crackCells() throws NotFoundException, CannotCompileException, IOException {
ClassPool.getDefault().insertClassPath("F:\\workSpace\\xxx\\WEB-INF\\lib\\aspose-cells-20.4.jar"); CtClass zzZJJClass = ClassPool.getDefault().getCtClass("com.aspose.cells.zasj"); CtMethod zzv = zzZJJClass.getDeclaredMethod("a"); zzv.setBody("{return 1;}"); zzZJJClass.writeFile("C:\\xxx\\xxx"); } }
|
========================Aspose.pdf========================
待更
下载地址