aspose-psd是一个不开源的psd编辑库,在没有证书的情况下只能进行有限的步骤,处理很小的图片,原库如下
implementation("com.aspose:aspose-psd:24.9:jdk16")
破解需要修改验证的方法,引入如下库进行修改class文件
implementation("org.javassist:javassist:3.30.2-GA")
implementation("net.lingala.zip4j:zip4j:2.11.5")
package loli.ball
import javassist.ClassPool
import javassist.CtClass
import javassist.bytecode.Bytecode
import java.io.File
import javax.swing.filechooser.FileSystemView
/**
* Created by LoliBall on 2024/10/3 22:47.
* https://github.com/WhichWho
*/
fun main() {
val desktop = FileSystemView.getFileSystemView().homeDirectory
ClassPool.getDefault().insertClassPath(File(desktop, "111.jar").absolutePath)
val zzZJJClass = ClassPool.getDefault().getCtClass("com.aspose.psd.internal.kP.e")
val methodA = zzZJJClass.declaredMethods
for (ctMethod in methodA) {
var ps = ctMethod.parameterTypes
if (ps.size == 1 && ctMethod.name == "a" && ctMethod.returnType.name == "int") {
println(ctMethod.name)
println(ctMethod.parameterTypes.toList())
println(ctMethod.returnType)
ctMethod.setBody("{return 2;}")
}
}
//这一步就是将破译完的代码放在桌面上
zzZJJClass.writeFile(desktop.absolutePath)
}
由于zip文件名大小写敏感,但是windows文件系统大小写不敏感,需要引入压缩库进行jar包中的文件替换
package loli.ball
import net.lingala.zip4j.ZipFile
import net.lingala.zip4j.model.ZipParameters
import java.io.File
import javax.swing.filechooser.FileSystemView
/**
* Created by LoliBall on 2024/10/3 23:15.
* https://github.com/WhichWho
*/
fun main() {
val desktop = FileSystemView.getFileSystemView().homeDirectory
val fileAA = File("C:\\Users\\litte\\Desktop\\com\\aspose\\psd\\internal\\kP\\e.class")
val zip = ZipFile(File(desktop, "111.jar"))
zip.fileHeaders
// 需要删除原先的签名文件
// .filter { it.fileName.startsWith("META-INF") }
// .forEach {
// zip.removeFile(it)
// }
.filter { it.fileName == "com/aspose/psd/internal/kP/e.class" }
.forEach {
println(it.fileName)
val fileName = it.fileName
zip.removeFile(fileName)
zip.addFile(fileAA, ZipParameters().also { it.fileNameInZip = fileName })
}
zip.close()
}
最终得到修改后的jar文件,本地引入即可
implementation(files("libs/111.jar"))