首先,说明下本破解过程纯粹是研究学习的,需要商业版的请绕行。
其次,该破解过程,是参考借鉴gitee上liuzy88所开源代码,但还是有所差异。再次感谢liuzy88。更多详见其破解操作,https://gitee.com/liuzy1988/aspose-words-crack
最后,开始正题。请大神多多赐教。
1、下载jar文件:see官网地址:https://releases.aspose.com/words/java/22-12/,如图所示:
image.png (170.25 KB, 下载次数: 1)
下载附件
aspose官网地址
2023-8-23 00:02 上传
2、为了方便查看编译后的java代码,建议在idea中查看(2023.1和谐版),通过maven引入到自己的测试工程中,如图所示:
image.png (49.79 KB, 下载次数: 0)
下载附件
maven引入
2023-8-23 00:11 上传
[Java] 纯文本查看 复制代码
com.aspose
aspose-words
22.12
jdk17-->
system
/Downloads/aspose-words-crack-master/aspose-words-22.12-jdk17.jar
/Downloads/aspose-words-crack-master/aspose-words-22.12-jdk17-cracked.jar-->
上图方便切换使用,故没有install到maven本地私库。
3、破解-1,找主入口、及其他需破解的文件。刚刚也说了,为了方便看编译后的源代码,建议在idea中操作。
通过 License license = new License(); 进入到破解主入口中。15M的代码,若一个一个找的话,还是非常吃力的。License截图如下:
image.png (110.01 KB, 下载次数: 0)
下载附件
Licenes主入口
2023-8-23 00:15 上传
1)待破解文件1,上图的两个红框,都可以进入到类文件zzYvW中。点击即可。
2)待破解文件2,通过在破解文件1(zzYvW)中搜索关键词2099或者zzZ8h.zzW8即可,如下图:我们找到了类文件zzWS8。
image.png (127.94 KB, 下载次数: 0)
下载附件
破解文件2
2023-8-23 00:22 上传
3)待破解文件3,通过在破解文件2(zzWS8)中,找到其空参构造函数,操作有点陌生,以截图方式呈现,大致如下截图:
image.png (118.3 KB, 下载次数: 0)
下载附件
zzQG
2023-8-23 00:31 上传
image.png (90.65 KB, 下载次数: 0)
下载附件
zzW5m
2023-8-23 00:32 上传
有点不好找,但也还是很容易的。即找到:类文件zzYJa。
4、好了,三个待破解的文件已经找到,现在,正式开始破解。程序如下:(注意过程中需要javassist-3.29.2-GA.jar的支持,这是关键点,具体原理大家可百度一下。)
[Java] 纯文本查看 复制代码import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import java.lang.reflect.Field;
public class AsposeWords_22_12 {
public static void main(String[] args) throws Exception {
ClassPool.getDefault().insertClassPath("aspose-words-22.12-jdk17.jar"); //注意路径
// 类文件1,从com.aspose.words.License类文件找到。
CtClass clazz = ClassPool.getDefault().getCtClass("com.aspose.words.zzYvW");
clazz.getDeclaredMethod("zzY34").setBody("{return com.aspose.words.zzZ8h.zzW8b;}");
clazz.getDeclaredMethod("zzjS").setBody("{this.zzWbe = com.aspose.words.zzZ8h.zzW8b; zzZAO = this; }");
CtMethod[] methodA = clazz.getDeclaredMethods();
for (CtMethod ctMethod : methodA) {
CtClass[] ps = ctMethod.getParameterTypes();
if (ps.length == 1 && ctMethod.getName().equals("zzjS") && ps[0].getName().equals("java.io.InputStream")) {
ctMethod.setBody("{this.zzWbe = com.aspose.words.zzZ8h.zzW8b; zzZAO = this; }");
}
}
clazz.getDeclaredConstructors()[0].setBody("{System.out.println(\"do nothing at zzYvW.\");}");
clazz.writeFile();
// 类文件2,从类com.aspose.words.zzYvW的方法zzY34()进。大概是第171行。
CtClass clazz2 = ClassPool.getDefault().getCtClass("com.aspose.words.zzWS8");
clazz2.getDeclaredMethod("zzQG").setBody("{System.out.println(\"do nothing. this.zzW67(); this.zzW5m();\");}");
clazz2.getDeclaredMethod("zzH0").setBody("{return com.aspose.words.zzY7H.zzZPG;}");
//clazz2.getDeclaredConstructors()[0].setBody("{System.out.println(\"do nothing at zzWS8.\");}");
clazz2.writeFile();
// 类文件3(关键点:删除水印)从类com.aspose.words.zzWS8W的方法zzW5m()进,大概是665行。
CtClass clazz3 = ClassPool.getDefault().getCtClass("com.aspose.words.zzYJa");
clazz3.getDeclaredMethod("zzXuq").setBody("{zzYOl = 29273535023874148L;}");
clazz3.writeFile();
}
}
为了方便操作,借鉴liuzy88所开源出的shell脚本,如下:
[Shell] 纯文本查看 复制代码#!/bin/sh
set -e
SRC='aspose-words-22.12-jdk17.jar'
DST='aspose-words-22.12-jdk17-cracked.jar'
echo '==> 官网下载(新下载的此破解已失效,请直接下载破解版)'
# stat $SRC || wget https://releases.aspose.com/java/repo/com/aspose/aspose-words/22.12/aspose-words-22.12-jdk17.jar
echo '==> 重命名'
rm -f $DST
cp $SRC $DST
echo '==> 执行破解,生成类'
javac -classpath .:javassist-3.29.2-GA.jar AsposeWords_22_12.java
java -classpath .:javassist-3.29.2-GA.jar AsposeWords_22_12
echo '==> 用jar命令更新jar内的类'
echo '替换前'
jar -uvf0 $DST com/aspose/words/*.class
echo '==> 替换UCCESS。'
echo '==> 用压缩工具打开,并删除 /MANIFEST.MF 目录下的*.SF,*.RSA文件,以及删除 versions 目录。'
echo '==> DONE.'
另外,执行shell脚本,所需文件:crack.sh(源码上面)、aspose-words-22.12-jdk17.jar(官网下载)、AsposeWords_22_12.java(源码上面)、javassist-3.29.2-GA.jar、MANIFEST.MF(主要更新如下两行:Manifest-Version: 1.0
Created-By: 1.8.0_231,即可。)
5、执行shell脚本:进入命令行,执行: sh crack.sh,结果如下图所示:会复制生成新jar文件:
[color=]aspose-words-22.12-jdk17-cracked.jar
。
image.png (97.71 KB, 下载次数: 1)
下载附件
shell执行
2023-8-23 00:50 上传
shell脚本执行过程中,会生成3个带路径的class文件,并替换覆盖jar包中原来的class文件(mac环境下OK),如下图所示:
image.png (224.93 KB, 下载次数: 0)
下载附件
jar更新
2023-8-23 00:52 上传
最后,删除jar包的额外文件,并添加简单的MANIFEST.MF文件。如下图:
image.png (185.03 KB, 下载次数: 0)
下载附件
delFile
2023-8-23 00:55 上传
6、验证,在maven中调整新生成的破解jar文件,然后编写代码来验证即可。如下代码:
[color=]// 依赖的类文件。
[color=]import
com.aspose.words.Document;
[color=]import
com.aspose.words.License;
[color=]import
javassist.*;
[color=]import
java.io.File;
[color=]import
java.io.FileOutputStream;
[color=]import
java.io.IOException;
// 自定义class名称,验证代码如下:
[color=]public static void
[color=]main
(String[] args)
[color=]throws
Exception {
[color=]//License license = new License(); //方便找主入口。
[color=]
word(
[color=]"/Users/Downloads/
需求规格说明书
[color=]1.1.docx"
);
}
[color=]private static void
[color=]word
(String src) {
System.out.println(src);
File file =
[color=]new
File(src +
[color=]".pdf"
);
[color=]try
(FileOutputStream os =
[color=]new
FileOutputStream(file)) {
[color=]long
start = System.currentTimeMillis();
Document doc =
[color=]new
Document(src);
doc.save(os, com.aspose.words.SaveFormat.PDF);
System.out.println(
[color=]"
共耗时:
[color=]"
+ (System.currentTimeMillis() - start) +
[color=]"ms"
);
}
[color=]catch
(Exception e) {
e.printStackTrace();
}
}
image.png (120.88 KB, 下载次数: 0)
下载附件
未破解效果
2023-8-23 01:04 上传
破解版的效果:
image.png (184.78 KB, 下载次数: 0)
下载附件
OK,破解
2023-8-23 01:10 上传
注意要点:未删除 META-INF目录下的(主要是
[color=]*.SF,*.RSA
)所有文件,可能的错误,如下:
image.png (121.85 KB, 下载次数: 0)
下载附件
未删除MANIFEST.MF
2023-8-23 01:06 上传