aspose for java_正确使用 Aspose.Diagram for Java

最近在鼓捣java 如何生成visio图表,苦于没有API,找到了aspose这个神器,下载试用版本之后,发现最多只能生成10个元素,而且有水印。下面尝试如何去掉水印与元素限制。

本文章所涉及的软件均可从网上获取,但是只能用于学习之用,不能用于商业目的,正版的话请前往 aspose下载。

首先本次需要用到的软件:

JByteMod-Beta-1.8.2.zip

aspose-diagram-20.1-jdk16.jar

jboss-javassist-javassist.zip

第一步:使用JByteMod打开aspose-diagram-20.1-jdk16.jar,找到反编译之后找到License类,找到关键的设置License方法,如下:

public void setLicense(final InputStream inputStream) throwsException {

Document parse= null;if (inputStream != null) {try{

parse=DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(inputStream);

}catch(Exception ex) {throw new DiagramException("Error when parse license stream.");

}

}this.a(parse);

}

可以看到这是从某个配置文件里面输入一些关键的鉴权信息,那么配置文件里面应该有些什么东西呢,接着看:

void a(final Element element) throwsException {try{int n = 0;final Node item = element.getElementsByTagName("Data").item(0);final Node item2 = element.getElementsByTagName("Signature").item(0);if (item != null && item2 != null) {final Node a = afl.a(item.getChildNodes(), "Products");final NodeList list = (a != null) ? a.getChildNodes() : null;if (list != null) {this.b = newString[list.getLength()];for (int i = 0; i < list.getLength(); ++i) {this.b[i] =a(a(list.item(i).getLastChild()));if (this.b[i].startsWith("Conholdate.")) {

n= 1;

}

}

}

a(item, item2, n);final Node a2 = afl.a(item.getChildNodes(), "EditionType");if (a2 != null) {this.c =e(a(a2.getLastChild()));

}final Node a3 = afl.a(item.getChildNodes(), "SerialNumber");if (a3 != null) {this.d =a(a3.getLastChild());

}else{this.d = "";

}final Node a4 = afl.a(item.getChildNodes(), "SubscriptionExpiry");if (a4 != null) {this.e =b(a4.getLastChild());

}final Node a5 = afl.a(item.getChildNodes(), "LicenseExpiry");if (a5 != null) {this.f =b(a5.getLastChild());

}final Node a6 = afl.a(item.getChildNodes(), "OemPublicKeyToken");if (this.g != null) {this.g =a(a6.getLastChild());

}else{this.g = "";

}

}

}catch(DiagramException ex) {throwex;

}catch(Exception ex2) {throw new DiagramException("The license is invalid. ");

}

}

通过上面的节点解析代码看的不是很全,再继续看:

private static void a(final Node node, final Node node2, final int n) throwsException {final String s = (node != null) ? afl.a(node) : "";

String replaceAll;if (s.equals("")) {

replaceAll= "";

}else{

replaceAll= s.replaceAll("&", "&");

}try{final KeyFactory instance = KeyFactory.getInstance("RSA");

String i=License.i;if (n == 1) {

i= "qKFqqhFovZvEYCHeD3N8Oy+AuxrOA8cVvIl4u4qIBMQlzejGyXkiTUjoryuzlhlS2bG80FGmFsH+wUKbYiEkW/4zseZCV/Ej/usbu6yHACQKO/SCy3pYw68Pcv901pvywUnoaYCI2ccCG29+XM+FwpFQuiPb2H7YbI/++SQs6Hk=";

}final PublicKey generatePublic = instance.generatePublic(new RSAPublicKeySpec(new BigInteger(1, bf.a(i, "UTF-8")), new BigInteger(1, bf.a("AQAB", "UTF-8"))));final byte[] bytes = replaceAll.getBytes("UTF-16LE");final byte[] a = bf.a((node2 != null) ? node2.getLastChild().getNodeValue() : "", "UTF-8");final Signature instance2 = Signature.getInstance("SHA1withRSA");

instance2.initVerify(generatePublic);

instance2.update(bytes);if (!instance2.verify(a)) {final PublicKey generatePublic2 = instance.generatePublic(new RSAPublicKeySpec(new BigInteger(1, bf.a("3ki45T6C4lt12J5MbKfrADBCZcE8OTefdngc9IDKg+lzCGYLuxJFDt16awhJFnA23sX+kQ4/eZQ5pNAYjc+ZJ0+pWwvQR4h8GJ3eWvecdFs7KSWwNmFXZCSN+sbrxwEjzzns1kIHuLNf5r+Zaggns+8rqXR19RSJBOcuFqVipIHv56lF53Hc+hx+y9URIaadO1W8dkTqgwExyfjnbDOaCBEH0CqUL1YIICS/wIUTEKhM0ZlwEcIcHl8XTHLVx96DMX4bbVajj78L4KzevQc442DX28KGDJTveEB1pSKWsr0d4FTx7wKS36RBnWv5lwsRErtTZb5ciVIG1iIJrp87VQ==", "UTF-8")), new BigInteger(1, bf.a("AQAB", "UTF-8"))));final Signature instance3 = Signature.getInstance("SHA256withRSA");

instance3.initVerify(generatePublic2);

instance3.update(bytes);if (!instance3.verify(a)) {throw new DiagramException("The signature is invalid.");

}

}

}catch(Exception ex) {throw new DiagramException("License signature reading error or signature is invalid.");

}

}

结合两段代码,重点在于结构体,配置文件的大致格式,解析的配置文件如下,这里我们新建一个license.xml,复制以下内容。

Aspose.Diagram for Java

Enterprise

20991231

20991231

---

---

同时,查看解析的代码,它是采用的RSA加密验证license合法性,我们修改字节码,把这个方法屏蔽掉应该就可以。这里需要使用到javassist 了。新建java工程,新建类,代码如下:

public static void changeMethod() throwsException {

ClassPool.getDefault().insertClassPath("E:/aspose-crack/aspose-diagram-20.1-jdk16.jar");

CtClass ctclass=ClassPool.getDefault()

.getCtClass("com.aspose.diagram.License");

CtMethod[] ms=ctclass.getDeclaredMethods();for(CtMethod c : ms) {

System.out.println(c.getName());

CtClass[] ps=c.getParameterTypes();for(CtClass cx : ps) {

System.out.println("\t" +cx.getName());

}if (c.getName().equals("a") && ps.length == 3

&& ps[0].getName().equals("org.w3c.dom.Node")&& ps[1].getName().equals("org.w3c.dom.Node")) {

System.out.println("find it!");

c.insertBefore("{return;}");

}

}

ctclass.writeFile("E:/aspose-crack/");

}

其中,具体的jar包输入路径与最终的class文件输出路径可以自定义。

然后使用压缩文件打开 aspose-diagram-20.1-jdk16.jar,替换生成的License.class文件,然后把META-INF下的签名文件全部删掉。参考下面代码就能愉快使用了。

public static boolean getLicense() throwsException {boolean result = false;try{

InputStream is= new FileInputStream(new File("License.xml文件路径"));

License license= newLicense();

license.setLicense(is);

result= true;

is.close();

}catch(Exception e) {

e.printStackTrace();throwe;

}returnresult;

}

在准备绘制visio之前,调用一次getLicense()方法就可以去掉水印与元素个数的限制了。

再次强调,仅供学习使用。

github参考资料(github是个好网站):

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Aspose.HTML for Java是一个强大的Java库,用于处理HTML文档。它提供了许多功能,可以使用户在Java应用程序中方便地生成、修改和转换HTML文件。 首先,Aspose.HTML for Java可以用于创建HTML文档。用户可以通过代码动态地生成HTML标记,添加文本、图像、链接和其他元素,从而轻松地创建自定义的HTML页面。 其次,该库还支持HTML文档的修改。用户可以使用Aspose.HTML提供的API来操作HTML文档的各个部分,如标题、段落、表格、表单等。用户可以添加、删除或修改这些元素,以满足其特定的需求。 此外,Aspose.HTML for Java还支持HTML文档的转换。用户可以将HTML文档转换为其他格式,如PDF、图片、EPUB等。这使得用户可以轻松地在不同的环境中共享和使用他们的HTML内容。 Aspose.HTML还具有对HTML解析和分析的大量支持。用户可以使用该库来解析和检索HTML文档的各种信息,如元素、属性和文本内容。这使用户能够在HTML文档中进行更深入的操作和分析。 总结而言,Aspose.HTML for Java是一个功能强大、灵活且易于使用Java库,可以帮助用户处理HTML文档。它提供了许多功能,包括HTML文档的生成、修改、转换和分析,使用户能够更轻松地处理和操作HTML内容。无论是生成自定义的HTML文档,还是将HTML转换为其他格式,Aspose.HTML都可以成为Java开发人员的有力工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值