XJAR解密

XJAR解密

分析过程

在解密xjar加密的jar时发现无法正常解密,研究后发现是不同版本的xjar加密方式不一样。

新版本使用的AES-CBC,老版本是AES(ECB)。

以下为调试过程:

启动调试模式

1
java -jar -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 -javaagent:xjar-agent-hibernate-v1.0.0.jar -Xms2g -Xmx2g -jar saas-out.jar --xjar.password=yoc.xjar

使用IDEA远程调试
image-20220617180028811

添加断点

1
2
3
javax.crypto.Cipher.init
javax.crypto.Cipher.getInstance
...

image-20220617175956254

查看加密模式
image-20220617180547377

代码对比
image-20220617180518938

解密

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import io.xjar.XKit;
import io.xjar.jar.XJar;
import io.xjar.key.XKey;


public class Main {

public static void main(String[] args) throws Exception {
String input_path = "encrypted.jar";
String output_path = "decrypted.jar";
String password = "123456";
XKey xKey = XKit.key(password);
XJar.decrypt(input_path, output_path, xKey);

}
}

1
2
3
4
5
# 编译
javac -cp encrypted.jar Main.java

# 运行
java -cp .;encrypted.jar;commons-compress-1.21.jar Main

image-20220714094017421