У меня есть приложение Spring Boot, которое я упаковываю в файл .jar
.Эта фляга запутывается задачами gradle
и библиотекой ProGuard
.(Эта часть работает правильно. Я могу осмотреть и запустить флягу.)
Как только запутанный фляга готова, я использую install4j
, включаю обфусцированный файл .jar и делайте установщик.После установки, когда я пытаюсь запустить программу, я получаю следующую ошибку:
java.lang.VerifyError: Expecting a stackmap frame at branch target 124 Exception Details: Location:
com/bla/test/Main.main([Ljava/lang/String;)V @95: ifeq Reason:
Expected stackmap frame at this location. Bytecode:
0000000: b800 5212 11b6 0057 120f b600 58b6 0053
0000010: 4cbb 0022 592b 1202 b700 544d bb00 1f59
0000020: b700 4d4e bb00 1e59 1208 b700 4b3a 04bb
0000030: 001e 5912 03b7 004b 3a05 1905 ba00 6400
0000040: 00b6 004c 2d19 04b6 004e 572d 1905 b600
0000050: 4e57 2c04 b600 552c 2db6 0056 b800 5199
0000060: 001d b800 503a 0619 062c b600 4fa7 000f
0000070: 3a07 b200 3112 01b9 0060 0200 a700 00 Exception Handler Table:
bci [103, 109] => handler: 112
at java.base/java.lang.Class.getDeclaredMethods0(Native Method) at java.base/java.lang.Class.privateGetDeclaredMethods(Unknown Source) at java.base/java.lang.Class.getDeclaredMethod(Unknown Source) at com.exe4j.runtime.LauncherEngine.launch(LauncherEngine.java:83) at com.exe4j.runtime.WinLauncher.main(WinLauncher.java:94) at com.install4j.runtime.launcher.WinLauncher.main(WinLauncher.java:25)
Я также пытался получить запутанную версию кода.Для генерации запутанного .jar
я использовал следующую конфигурацию в:
-libraryjar 'etc/resources/libs/jackson-dataformat-xml-2.9.9.jar'
-libraryjar 'etc/resources/libs/jackson-dataformat-yaml-2.9.9.jar'
-libraryjar 'etc/resources/libs/jackson-core-2.9.9.jar'
-libraryjar 'etc/resources/libs/jackson-databind-2.9.9.jar'
-libraryjar 'etc/resources/libs/dsl-json-1.9.3.jar'
-dontnote
-dontwarn
-dontshrink
-dontoptimize
-useuniqueclassmembernames
-dontpreverify
-keepattributes Exceptions,InnerClasses,SourceFile,LineNumberTable,EnclosingMethod,*Annotation*
-keep interface *
-keep public class org.apache.logging.**
-keep public class com.potato.Main {
public static void main(java.lang.String[]);
}
-overloadaggressively
-optimizationpasses 3
-allowaccessmodification
Я обеспокоен флагами -dontwarn
и -dontpreverify
.Они помогли мне пройти процесс создания jar-файла с обфусцированными банками, но я совершенно уверен, что это всего лишь обходной путь.
Очень сложно отладить этот процесс и выяснить, что происходит.Кто-нибудь может указать мне правильное направление, пытаясь выяснить, что происходит с этой ошибкой?