1.使用 jd-gui.exe 反编译查看,直接搜索 License
1.修改
public static boolean isLicenseSet() { return (a != null); }
改成
public static boolean isLicenseSet() { return true; }
2.修改
public void setLicense(InputStream stream) { Document document = null; if (stream != null) try { DocumentBuilder documentBuilder = zad.b(); document = documentBuilder.parse(stream); } catch (Exception exception) { throw new CellsException(9, zf.a(new byte[] { -20, 93, -23, 54, -20, -49, -59, 86, -9, -86, 49, 44, -59, 71, -52, -86, -90, 6, -90, -25, -86, 1, -1, -92, -91, -126, 7, 113, -66, -95, -121, 16, -122, -126, 7, 104, -40, -70, -10, -37, 126, 7, -111, -121, -121 }) + exception.getMessage()); } a(document); }
改成
public void setLicense(InputStream paramInputStream){ a = new License(); zbiw.a(); }
3.修改
private static Date k(String paramString) { if (paramString == null || paramString.length() < 8) return null; SimpleDateFormat simpleDateFormat = new SimpleDateFormat(zf.a(new byte[] { 79, 89, 33, -52, 79, -121, -125, 33, 71, -126, 105, -121 })); try { return simpleDateFormat.parse(paramString); } catch (ParseException parseException) { throw new IllegalArgumentException(zf.a(new byte[] { -21, -113, -77, 13, -115, 27, Byte.MIN_VALUE, 35, 103, -52, -20, -106, 71, 95, 31, -73, -76, -38, 13, 31, -91, -97, -102, 85, -68, -33, -19, -87, -127, -14, 78, -23, 6, -25, -94, 1, -97, -95, -57, -121 })); } }
改成
private static Date k(String paramString){ return new Date(Long.MAX_VALUE); }
2.生成 aspose-cells-20.7-crack.jar
修改 class 这里使用 javassist:
新建一个 Spring boot 项目:
pom 文件中引用 javassist
<dependency><!--aspose的jar破解工具--> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> <version>3.20.0-GA</version> </dependency>
启动类中创建一个静态方法 crackAspose
public static void crackAspose(String JarPath) throws Exception { // 这个是得到反编译的池 ClassPool pool = ClassPool.getDefault(); // 取得需要反编译的jar文件,设定路径 pool.insertClassPath(JarPath); CtClass cc_License = pool.get("com.aspose.cells.License"); CtMethod method_isLicenseSet = cc_License.getDeclaredMethod("isLicenseSet"); method_isLicenseSet.setBody("return true;"); CtClass cc_License2 = pool.get("com.aspose.cells.License"); CtMethod method_setLicense = cc_License2.getDeclaredMethod("setLicense"); method_setLicense.setBody("{ a = new com.aspose.cells.License(); " + " com.aspose.cells.zbiw.a();}"); CtMethod method_k = cc_License.getDeclaredMethod("k"); method_k.setBody("return new java.util.Date(Long.MAX_VALUE);"); cc_License.writeFile("F:\441\1"); }
在 main 方法中执行 crackAspose
try{ crackAspose("F:\441\aspose-cells-20.7.jar"); System.out.println("Success!"); }catch (Exception e){ e.printStackTrace(); }
复制一个 aspose-cells-20.7.jar 改名为 aspose-cells-20.7-crack.zip 然后解压
把刚才生成的 License.class 文件 替换到解压的源代码中。
造一个 License xml 文件,这里文件名为 com.aspose.cells.lic_2999.xml, 位置直接放源代码解压的根目录:
文件内容为:
<License> <Data> <Products> <Product>Aspose.Cells for Java</Product> </Products> <EditionType>Enterprise</EditionType> <SubscriptionExpiry>29991231</SubscriptionExpiry> <LicenseExpiry>29991231</LicenseExpiry> <SerialNumber>evilrule</SerialNumber> </Data> <Signature>evilrule</Signature> </License>
防止文件指纹校验,我们需要删除掉源代码解压包中的 META_INF 文件夹。
最后的根目录:
压缩源代码(注意要是 zip 格式)
然后重命名为:
完成!
3.测试 aspose-cells-20.7-crack.jar 使用
封装一个 License 验证方法:
public static boolean authrolizeLicense() { boolean result = false; try { InputStream is = com.aspose.cells.License.class.getResourceAsStream("/com.aspose.cells.lic_2999.xml"); License asposeLicense = new License(); asposeLicense.setLicense(is); is.close(); result = true; } catch (Exception e) { e.printStackTrace(); } return result; }
修改 main 方法测试使用:
public static void main(String[] args) { /* // 修改 License.class try{ crackAspose("C:\Users\DYG\Desktop\1\aspose-cells-20.7.jar"); System.out.println("Success!"); }catch (Exception e){ e.printStackTrace(); } */ // 测试破解后的 aspose-cells-20.7-crack.jar boolean auth = authrolizeLicense(); if (!auth) { System.out.println("aspose 许可无效!"); return; } System.out.println("aspose 已就绪!"); try{ Workbook wb = new Workbook("F:\aaa123.xlsx"); Worksheet ws = wb.getWorksheets().get(0); ImageOrPrintOptions imgOptions = new ImageOrPrintOptions(); imgOptions.setImageFormat(ImageFormat.getPng()); imgOptions.setCellAutoFit(true); imgOptions.setOnePagePerSheet(true); SheetRender render = new SheetRender(ws, imgOptions); render.toImage(0, "F:\aaa\123.png"); } catch (Exception e){ e.printStackTrace(); } }
运行:
样板图
生成图片