java aspose-words 21.5 转pdf水印消除(不替换jar,反射思路)

声明,本文章不提供任何破解工具,只是探讨消除水印的思路,以及给后续做类似加密的朋友提供一些增加破解难度的建议。

  • 搜索License类(个人觉得如果要做授权,不提供License,让用户授权文件放在指定位置,程序自动搜索授权文件实现授权,能够一定程度上增加破解难度):

  • 发现License类调用的zzZDR类完成了初始化,找到该类:

  • 发现只有zzZ3w和zzZ3v可以被外部调用,加上断点(可以把真实调用的方法改成private,然后通过Class.getName反射调用private的方法,可以稍微增加下破解难度):

  • 断点进入后,无授权文件的情况下返回的是zzZDQ.zzYAC的值,通过idea提供的工具修改返回值为zzZDQ.zzYAB,发现转换的pdf已经没有水印了。那么只需要让两个方法均返回zzZDQ.zzYAB即可完成水印的消除了。
  • 打开zzZDQ类,发现只是两个常量:

  • 结论:我们只需要在第一次转换pdf前,通过反射将zzZDQ.zzYAC的值修改掉,这样水印即可消除。
    public static void xmlToPdf(File xmlFile, File pdfFile) throws Exception {
        Document document=new Document(xmlFile.getAbsolutePath());
        document.save(pdfFile.getAbsolutePath());
    }

    public static void main(String[] args) throws Exception {
        Class<?> aClass = Class.forName("com.aspose.words.zzZDQ");
        Field zzYAC = aClass.getDeclaredField("zzYAC");
        zzYAC.setAccessible(true);

        Field modifiersField = Field.class.getDeclaredField("modifiers");
        modifiersField.setAccessible(true);
        modifiersField.setInt(zzYAC, zzYAC.getModifiers() & ~Modifier.FINAL);
        zzYAC.set(null,new byte[]{76, 73, 67, 69, 78, 83, 69, 68});
        File xmlFile=new File("D:\\tmp\\wd.xml");
        File pdfFile=new File("D:\\tmp\\wd.pdf");
        XmlToPdfUtils.xmlToPdf(xmlFile,pdfFile);
    }

再次强调:此消除水印的方式仅用于学习和探讨,生产使用的时候还是要购买授权,支持正版,同时使用这种方法可能会有其他意想不到的问题出现。

评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值