aspose.slides for java去除水印


原文:https://www.cnblogs.com/baby123/p/11046704.html

 

前一段時間使用aspose.slides for java,處理了下才去除的水印,但是時間一久就忘記了,重新整理了下

下載aspose-slides-19.3-jdk16.jar,重命名為aspose.slides-19.3.jar(為了在maven應用才改名的)

(1)使用jd-gui查看jar包

注冊文件的加載類License

復制代碼
package com.aspose.slides;

import com.aspose.slides.exceptions.InvalidOperationException;
import com.aspose.slides.internal.k5.return;
import com.aspose.slides.ms.System.IDisposable;
import com.aspose.slides.ms.System.p;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

public class License
  implements ILicense
{
  public void setLicense(InputStream stream)
    throws AsposeLicenseException
  {
    try
    {
      ByteArrayInputStream localByteArrayInputStream = null;
      if (stream != null)
      {
        localObject = new ByteArrayOutputStream();
        byte[] arrayOfByte = new byte[1024];
        int i;
        while ((i = stream.read(arrayOfByte)) > 0)
          ((ByteArrayOutputStream)localObject).write(arrayOfByte, 0, i);
        ((ByteArrayOutputStream)localObject).flush();
        localByteArrayInputStream = new ByteArrayInputStream(((ByteArrayOutputStream)localObject).toByteArray());
      }
      Object localObject = new return();
      ((return)localObject).jdMethod_do(localByteArrayInputStream);
    }
    catch (IOException localIOException1)
    {
      throw new InvalidOperationException("License stream is not available for reading");
    }
  }

  public void setLicense(String namePath)
    throws AsposeLicenseException
  {
    try
    {
      FileInputStream localFileInputStream = null;
      if ((null != namePath) && (!"".equals(namePath)))
        localFileInputStream = new FileInputStream(namePath);
      setLicense(localFileInputStream);
    }
    catch (FileNotFoundException localFileNotFoundException1)
    {
      throw new InvalidOperationException("License stream is not available for reading");
    }
  }

  public static String getVersion()
  {
    return return.jdMethod_new();
  }

  public void resetLicense()
  {
    return.jdMethod_for();
  }

  public boolean isLicensed()
  {
    int i = 0;
    Presentation localPresentation = new Presentation();
    try
    {
      ISlide localISlide = localPresentation.getSlides().addEmptySlide(localPresentation.getLayoutSlides().getByType(11));
      IAutoShape localIAutoShape = localISlide.getShapes().addAutoShape(5, 10.0F, 10.0F, 200.0F, 100.0F);
      localIAutoShape.getTextFrame().setText(p.jdMethod_if("", 500, 'a'));
      i = localIAutoShape.getTextFrame().getText().length() == 500 ? 1 : 0;
    }
    finally
    {
      if (localPresentation != null)
        localPresentation.dispose();
    }
    return i;
  }
}
復制代碼

主要的處理類為return

說明:具體是是哪一個類,要看具體情況,不同的版本是有差異的

關鍵代碼

復制代碼
private static void jdField_do(Node paramNode1, Node paramNode2, String[] paramArrayOfString)
  {
    PublicKey localPublicKey = null;
    Object localObject;
    try
    {
      KeyFactory localKeyFactory = KeyFactory.getInstance("RSA");
      localObject = void.jdField_do(jdField_if(paramArrayOfString));
      localPublicKey = localKeyFactory.generatePublic((KeySpec)localObject);
    }
    catch (Exception localException1)
    {
      new float()
      {
      }
      .jdField_do(new throws()
      {
      }
      .jdField_if, localException1);
    }
    try
    {
      String str1 = paramNode1 != null ? jdField_do(paramNode1) : "";
      localObject = str1.getBytes("UTF-16LE");
      String str2 = paramNode2 != null ? paramNode2.getFirstChild().getNodeValue() : "";
      byte[] arrayOfByte = try.jdField_do(str2);
      Signature localSignature = Signature.getInstance("SHA1withRSA");
      localSignature.initVerify(localPublicKey);
      localSignature.update(localObject);
      if (!localSignature.verify(arrayOfByte))
        new float()
        {
        }
        .jdField_do(new throws()
        {
        }
        .jdField_for);
    }
    catch (Exception localException2)
    {
      new float()
      {
      }
      .jdField_do(new throws()
      {
      }
      .jdField_int, localException2);
    }
  }
復制代碼

(2)使用javassist

使用rsa加密驗證許可證的合法性,屏蔽驗證過程許可證即有效

用進行代碼修改

復制代碼
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;

public class Main {

    public static void main(String[] args) {

        try {
            ClassPool.getDefault().insertClassPath(
                    "lib/aspose.slides-19.3.jar");
            CtClass c2 = ClassPool.getDefault()
                    .getCtClass("com.aspose.slides.internal.k5.return");
            CtMethod[] ms = c2.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 (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.setBody("{return;}");
                }
            }
            c2.writeFile();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
復制代碼

說明:

  javassist下載使用參考https://www.cnblogs.com/baby123/p/10871154.html

重新生成jar包:

  a. 將以前的 aspose.slides-19.3.jar 修改aspose.slides-19.3.zip

  b. 解壓 aspose.slides-19.3.zip 為 aspose.slides-19.3

  c. 將剛才生成的 com\aspose\slides\internal\mx\return.class 替換掉 aspose.slides-19.3 里的 return.class

  d. 將 META-INF 下除了 MANIFEST.MF 其他文件都刪掉

  e. 壓縮 aspose.slides-19.3 為 aspose.slides-19.3.zip

  f. 修改文件名為 aspose.slides-19.3.jar

(3)許可文件 license.xml

復制代碼
<License>
  <Data>
    <Products>
      <Product>Aspose.Total for Java</Product>      
    </Products>
    <EditionType>Enterprise</EditionType>
    <SubscriptionExpiry>20991231</SubscriptionExpiry>
    <LicenseExpiry>20991231</LicenseExpiry>
    <SerialNumber>------</SerialNumber>
  </Data>
  <Signature>------</Signature>
</License>
復制代碼

aspose.slides使用https://www.cnblogs.com/baby123/p/10863759.html

注意:此教程及下載文件只允許學習使用,不得用於商業用途,請購買授權正版 apose


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM