Aspose最版本aspose-words:jdk17:24.6 版本,代码分析心得

aspose 为收费软件,以下仅仅用于学习技术,请勿做任何商业用途,如果需要请到官网购买正版!

POM配置如下:


   <dependency>
            <groupId>com.aspose</groupId>
            <artifactId>aspose-words</artifactId>
            <version>24.6</version>
            <classifier>jdk17</classifier>
        </dependency>
        <dependency>
            <groupId>com.aspose</groupId>
            <artifactId>aspose-words</artifactId>
            <version>24.6</version>
            <classifier>javadoc</classifier>
        </dependency>



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

代码逆向分析:
License类:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.aspose.words;

import com.aspose.words.internal.zzWvg;
import com.aspose.words.internal.zzYea;
import java.io.InputStream;

public class License {
    public License() {
        zzYea.zzWkC();
    }

    public void setLicense(String licenseName) throws Exception {
        if (licenseName == null) {
            throw new NullPointerException(zzYea.zzWkC().zzWd(new byte[]{105, 108, 101, 99, 115, 110, 78, 101, 109, 97, 101}));
        } else {
            (new zzWst()).zz5D(licenseName, zzWvg.zzYB8());
        }
    }

    public void setLicense(InputStream stream) throws Exception {
        if (stream == null) {
            throw new NullPointerException(zzYea.zzWkC().zzWd(new byte[]{116, 115, 101, 114, 109, 97}));
        } else {
            new zzWst();
            zzWst.zz6t(stream);
        }
    }
}


zzWst类 zz6t方法:

    static void zz6t(InputStream var0) throws Exception {
        if (var0 == null) {
            throw new NullPointerException(zzYea.zzWkC().zzWd(new byte[]{116, 115, 101, 114, 109, 97}));
        } else {
            zzVTV var1 = zzXcX(var0);
            zzmP(var1);
            if (var1.zzYZ0()) {
                throw new IllegalStateException(zzW9L.zzXa(zzZUL.zzYnA(zzXsx.zzYhr()), new Object[]{var1.zzXRc().zzXa(zzYea.zzWkC().zzWd(new byte[]{100, 100, 77, 32, 77, 77, 121, 32, 121, 121, 121}), zzWhn.zzsw()), zzVTV.zzKA().zzXa(zzYea.zzWkC().zzWd(new byte[]{100, 100, 77, 32, 77, 77, 121, 32, 121, 121, 121}), zzWhn.zzsw())}));
            } else if (var1.zzZJk()) {
                throw new IllegalStateException(zzZUL.zzYnA(zzXsx.zzWau()));
            } else {
              /* 把注册成功的解析完成的注册信息放到数组中
           这里很关键,最终我们要构造一个 zzVTV 对象放到 zzZXG数组中去
        */
                synchronized(zzZcF) {
                    if (zzZXG.indexOf(var1) == -1) {
                        zzZXG.add(var1);
                    }

                }
            }
        }
    }

//  zzXcX方法 ,主要看 几个会抛异常的方法   var7.zzXJl()  和  (!zzWJL(var7.getData(), var7.zzYUB(), var7.zzYA1())
    private static zzVTV zzXcX(InputStream var0) throws Exception {
        DocumentBuilderFactory var1 = zzVZj.zzXmW();
        DocumentBuilder var2 = var1.newDocumentBuilder();
        Document var3 = var2.parse(var0);
        Element var4 = var3.getDocumentElement();
        Element var5 = zzVT3(var4, zzYea.zzWkC().zzWd(new byte[]{97, 68, 97, 116}));
        Element var6 = zzVT3(var4, zzYea.zzWkC().zzWd(new byte[]{105, 83, 110, 103, 116, 97, 114, 117, 101}));
        if (var5 != null && var6 != null) {
            zzVTV var7 = zzmP(var5, var6);
            if (var7.zzXJl() == 0) {
                throw new IllegalStateException(zzZUL.zzYnA(zzXsx.zzW0O()));
            } else if (!zzWJL(var7.getData(), var7.zzYUB(), var7.zzYA1())) {
                throw new IllegalStateException(zzZUL.zzYnA(zzXsx.zzZzh()));
            } else {
                return var7;
            }
        } else {
            throw new IllegalStateException(zzZUL.zzYnA(zzXsx.zzZHM()));
        }
    }

破解Java方法(只需要在程序启动的时候调用这个方法一次即可):

/**
	 * aspose-words:jdk17:24.6 版本
	 */
	public static void registerWord246() {
		// 构造一个注册信息
		try {
			Class<?> zzXgCClass = Class.forName("com.aspose.words.zzVTV");
			Constructor<?> constructors = zzXgCClass.getDeclaredConstructors()[0];
			constructors.setAccessible(true);
			Object instance = constructors.newInstance(null, null);
			// zzZoV = 1
			Field zzXFN = zzXgCClass.getDeclaredField("zzXAm");
			zzXFN.setAccessible(true);
			zzXFN.set(instance, 1);


			Field zzYXJ = zzXgCClass.getDeclaredField("zzYXJ");
			zzYXJ.setAccessible(true);
			zzYXJ.set(instance, 1);


			// zzW8s = 0
			// zzX6D = "8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7" // SerialNumber
			// zzw9 SubscriptionExpiry
			// zzZq3 LicenseExpiry
			// zzW5k <Data> ...
			// zzYON 签名 Signature
			// zzXjC zzZoT 对象 空
			Class<?> zzWXGClass = Class.forName("com.aspose.words.zzWst");
			constructors.setAccessible(true);
			Object zzWXGInstance = constructors.newInstance(null, null);

			Field zzZzA = zzWXGClass.getDeclaredField("zzZXG");
			zzZzA.setAccessible(true);
			ArrayList<Object> zzwPValue = new ArrayList<>();
			zzwPValue.add(instance);
			zzZzA.set(null, zzwPValue);


			// 生成文档会掉这个来判断 zzVSF
			Class<?> zzXQoClass = Class.forName("com.aspose.words.zzYfR");
			Field zzHA = zzXQoClass.getDeclaredField("zzX8G");
			zzHA.setAccessible(true);
			zzHA.set(null, 128);
			Field zzWod = zzXQoClass.getDeclaredField("zz3R");
			zzWod.setAccessible(true);
			zzWod.set(null, false);


		} catch (Exception e) {
			e.printStackTrace();
		}

	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值