DBeaver Ultimate edition JAVA程序逆向分析
本帖最后由 Vvvvvoid 于 2022-7-25 20:46 编辑## DBeaver Ultimate edition JAVA程序逆向分析
官方下载地址: https://dbeaver.com/download/ultimate/
当前分析版本号: dbeaver-ue-22.1.0
## 环境
JAVA/Maven/javassist
原理: 利用 javassist 载入 资源文件,并修改字节码,保存为 class 文件 ; 之后自行替换目标 jar包中的 class文件
WIN10/Mac m1 测试通过
## 分析
安装后打开主程序,弹出未授权框; 关闭框后程序就跑飞了
我们在程序主目录, 找到环境下的所有依赖 jar, 搜关键字 ‘No license found’
找到一个关键jar : com.dbeaver.lm.core_2.0.112.202206121904.jar
简单分析后, 记录执行修改如下:
LicenseServiceEmbedded.invalidateActiveLicense 返回 true;
接着 next,查找下一个
找到关键jar: com.dbeaver.lm.ui_2.0.112.202206121904.jar
注意到当前的 class 是 LicenseMissingDialog , 是 IconAndMessageDialog 的实现类
同时, 该jar包内 有多个 实现类, 一定是哪里有什么判断, 所以调用到了这里的 licenseMiss
接着搜一下 ‘LicenseMissingDialog’ , 看看是谁调用的;
此时定位到了 LicenseManagerUIUtils.checkLicense
看着类名跟方法名都很像真的; 简单分析下这个 方法
看到代码里有一段循环 获取 license , 如果 license miss 则会调用 LicenseMissingDialog 实现类,如果找到直接则返回 license
这里我们注意到 LMLicense 这个 对象; 跟进去看看, 看到一个构造器
就用这个构造器,直接 让 checkLicense 返回 new LMLicense(xxxxx,xxx...)
改完之后,重新打开程序, 没有弹框里, 能正常使用了, 但是还有一个瑕疵,点击关于 还是显示 Not licensed!
接着搜 找到了 第一步的那个类 , 定位到 getActiveProductLicense 这个方法, 看到返回值也是 LMLicense, 把第二部的 return过去就可以
改完之后保存,打开程序 ok了
点更新的时候还是有点小瑕疵,留给大家当作业吧~
## 具体代码
自行修改路径,以及添加所有程序依赖的 jar包,修改并保存后替换目标 jar包里的 class 文件既可
```xml
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.26.0-GA</version>
</dependency>
```
```java
ClassPool pool = ClassPool.getDefault();
//设置目标类的路径
pool.insertClassPath("/Applications/DBeaverUltimate.app/Contents/Eclipse/plugins/com.dbeaver.app.advanced_22.1.0.202206121904.jar");
pool.insertClassPath("/Applications/DBeaverUltimate.app/Contents/Eclipse/plugins/com.dbeaver.app.ultimate_22.1.0.202206121904.jar");
......
把主程序相关所有 jar 都添加到 ClassPath 中
//获得要修改的全路径类名
CtClass clazz = pool.get("com.dbeaver.lm.embedded.LicenseServiceEmbedded");
CtMethod bMethod = clazz.getDeclaredMethod("invalidateActiveLicense");
// 重置方法体
bMethod.setBody("return true;");
bMethod = clazz.getDeclaredMethod("getActiveProductLicense");
// 重置方法体
bMethod.setBody("return new org.jkiss.lm.LMLicense(\"licenseId\",org.jkiss.lm.LMLicenseType.ULTIMATE,new java.text.SimpleDateFormat(\"yyyy-MM-dd\").parse(\"2029-01-01\"),new java.text.SimpleDateFormat(\"yyyy-MM-dd\").parse(\"2020-01-01\"),new java.text.SimpleDateFormat(\"yyyy-MM-dd\").parse(\"2029-01-01\"),1L,\"2\",\"3\",\"4\",\"52pojie.Vvvvvoid\",\"52pojie.Vvvvvoid\",\"marlkiller@voidm.com\");");
//保存到文件
save(clazz);
//public LMLicense(@NotNull String licenseId, @NotNull LMLicenseType licenseType, Date licenseIssueTime, Date licenseStartTime, Date licenseEndTime, long flags, String productId, String productVersion, String ownerId, String ownerCompany, String ownerName, String ownerEmail) {
clazz = pool.get("com.dbeaver.lm.ui.LicenseManagerUIUtils");
bMethod = clazz.getDeclaredMethod("checkLicense");
// 重置方法体
bMethod.setBody("return new org.jkiss.lm.LMLicense(\"licenseId\",org.jkiss.lm.LMLicenseType.ULTIMATE,new java.text.SimpleDateFormat(\"yyyy-MM-dd\").parse(\"2029-01-01\"),new java.text.SimpleDateFormat(\"yyyy-MM-dd\").parse(\"2020-01-01\"),new java.text.SimpleDateFormat(\"yyyy-MM-dd\").parse(\"2029-01-01\"),1L,\"2\",\"3\",\"4\",\"52pojie.Vvvvvoid\",\"52pojie.Vvvvvoid\",\"marlkiller@voidm.com\");");
//保存到文件
save(clazz);
```
## 后记
仅供研究学习使用,请勿用于非法用途
注:若转载请注明来源(本贴地址)与作者信息。
java :
//获得要修改的全路径类名
ClassPool pool = ClassPool.getDefault();
//设置目标类的路径
pool.insertClassPath("I:\\dbeave\\com.dbeaver.app.advanced_22.1.0.202206121739.jar");
pool.insertClassPath("I:\\dbeave\\com.dbeaver.app.ultimate_22.1.0.202206121739.jar");
pool.insertClassPath("I:\\dbeave\\com.dbeaver.lm.core_2.0.112.202206121739.jar");
pool.insertClassPath("I:\\dbeave\\com.dbeaver.lm.ui_2.0.112.202206121739.jar");
pool.insertClassPath("I:\\dbeave\\org.jkiss.lm_1.0.136.202206121739.jar");
pool.insertClassPath("I:\\dbeave\\org.eclipse.swt.win32.win32.x86_64_3.119.0.v20220223-1102.jar");
//获得要修改的全路径类名
//获得要修改的全路径类名
CtClass clazz = pool.get("com.dbeaver.lm.embedded.LicenseServiceEmbedded");
CtMethod bMethod = clazz.getDeclaredMethod("invalidateActiveLicense");
// 重置方法体
bMethod.setBody("return true;");
bMethod = clazz.getDeclaredMethod("getActiveProductLicense");
// 重置方法体
bMethod.setBody("return new org.jkiss.lm.LMLicense(\"licenseId\",org.jkiss.lm.LMLicenseType.ULTIMATE,new java.text.SimpleDateFormat(\"yyyy-MM-dd\").parse(\"2029-01-01\"),new java.text.SimpleDateFormat(\"yyyy-MM-dd\").parse(\"2020-01-01\"),new java.text.SimpleDateFormat(\"yyyy-MM-dd\").parse(\"2029-01-01\"),1L,\"2\",\"3\",\"4\",\"52pojie.Vvvvvoid\",\"52pojie.Vvvvvoid\",\"marlkiller@voidm.com\");");
//保存到文件
save(clazz);
//public LMLicense(@NotNull String licenseId, @NotNull LMLicenseType licenseType, Date licenseIssueTime, Date licenseStartTime, Date licenseEndTime, long flags, String productId, String productVersion, String ownerId, String ownerCompany, String ownerName, String ownerEmail) {
clazz = pool.get("com.dbeaver.lm.ui.LicenseManagerUIUtils");
bMethod = clazz.getDeclaredMethod("checkLicense");
// 重置方法体
bMethod.setBody("return new org.jkiss.lm.LMLicense(\"licenseId\",org.jkiss.lm.LMLicenseType.ULTIMATE,new java.text.SimpleDateFormat(\"yyyy-MM-dd\").parse(\"2029-01-01\"),new java.text.SimpleDateFormat(\"yyyy-MM-dd\").parse(\"2020-01-01\"),new java.text.SimpleDateFormat(\"yyyy-MM-dd\").parse(\"2029-01-01\"),1L,\"2\",\"3\",\"4\",\"52pojie.Vvvvvoid\",\"52pojie.Vvvvvoid\",\"marlkiller@voidm.com\");");
save(clazz);
}
private static void save(CtClass sclazz) {
// TODO Auto-generated method stub
try {
sclazz.writeFile("I:/dbeave");
System.out.println("修改成功");
} catch (IOException | CannotCompileException e) {
e.printStackTrace();
}
}
class替换:
jar uvfcom.dbeaver.lm.core_2.0.112.202206121739.jar com\dbeaver\lm\embedded\LicenseServiceEmbedded.class
jar uvfcom.dbeaver.lm.ui_2.0.112.202206121739.jar com\dbeaver\lm\ui\LicenseManagerUIUtils.class
最后把修改后的com.dbeaver.lm.core_2.0.112.202206121739.jar、 com.dbeaver.lm.ui_2.0.112.202206121739.jar换绿色版dbeaver plugins ,启动dbeaver报错
!ENTRY org.eclipse.e4.ui.swt.win32.nls 2 0 2022-08-16 17:57:52.541
!MESSAGE Could not resolve module: org.eclipse.e4.ui.swt.win32.nls
Unresolved requirement: Fragment-Host: org.eclipse.e4.ui.swt.win32
Unresolved requirement: Fragment-Host: org.eclipse.e4.ui.swt.win32
!ENTRY org.eclipse.ui.win32.nls 2 0 2022-08-16 17:57:52.543
!MESSAGE Could not resolve module: org.eclipse.ui.win32.nls
Unresolved requirement: Fragment-Host: org.eclipse.ui.win32
Unresolved requirement: Fragment-Host: org.eclipse.ui.win32
!ENTRY org.eclipse.equinox.security.win32.x86_64.nls 2 0 2022-08-16 17:57:52.544
!MESSAGE Could not resolve module: org.eclipse.equinox.security.win32.x86_64.nls
Unresolved requirement: Fragment-Host: org.eclipse.equinox.security.win32.x86_64
Unresolved requirement: Fragment-Host: org.eclipse.equinox.security.win32.x86_64
!ENTRY org.eclipse.core.filesystem.win32.x86_64.nls 2 0 2022-08-16 17:57:52.546
!MESSAGE Could not resolve module: org.eclipse.core.filesystem.win32.x86_64.nls
Unresolved requirement: Fragment-Host: org.eclipse.core.filesystem.win32.x86_64
Unresolved requirement: Fragment-Host: org.eclipse.core.filesystem.win32.x86_64
!ENTRY org.eclipse.osgi.compatibility.state.nls 2 0 2022-08-16 17:57:52.548
!MESSAGE Could not resolve module: org.eclipse.osgi.compatibility.state.nls
Unresolved requirement: Fragment-Host: org.eclipse.osgi.compatibility.state
Unresolved requirement: Fragment-Host: org.eclipse.osgi.compatibility.state
!ENTRY org.eclipse.core.resources.win32.x86_64.nls 2 0 2022-08-16 17:57:52.550
!MESSAGE Could not resolve module: org.eclipse.core.resources.win32.x86_64.nls
Unresolved requirement: Fragment-Host: org.eclipse.core.resources.win32.x86_64
Unresolved requirement: Fragment-Host: org.eclipse.core.resources.win32.x86_64
!ENTRY org.eclipse.osgi 4 0 2022-08-16 17:57:52.552
!MESSAGE 应用程序错误
!STACK 1
org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.NullPointerException)
at org.eclipse.swt.SWT.error(SWT.java:4918)
at org.eclipse.swt.SWT.error(SWT.java:4833)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:188)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4035)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3635)
at org.eclipse.swt.widgets.Display.release(Display.java:3710)
at org.eclipse.swt.graphics.Device.dispose(Device.java:324)
at org.jkiss.dbeaver.ui.app.standalone.DBeaverApplication.start(DBeaverApplication.java:307)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:136)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:401)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:659)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:596)
at org.eclipse.equinox.launcher.Main.run(Main.java:1467)
Suppressed: org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.IllegalStateException: Need an underlying widget to be able to set the input.(Has the widget been disposed?))
... 20 more
Caused by: java.lang.IllegalStateException: Need an underlying widget to be able to set the input.(Has the widget been disposed?)
at org.eclipse.jface.viewers.StructuredViewer.setInput(StructuredViewer.java:1627)
at org.jkiss.dbeaver.ui.navigator.database.DatabaseNavigatorTree.setInput(DatabaseNavigatorTree.java:284)
at org.jkiss.dbeaver.ui.navigator.database.NavigatorViewBase.lambda$0(NavigatorViewBase.java:110)
at org.jkiss.dbeaver.ui.UIExecutionQueue.executeInUI(UIExecutionQueue.java:52)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185)
... 17 more
Suppressed: org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.IllegalStateException: Need an underlying widget to be able to set the input.(Has the widget been disposed?))
... 20 more
Caused by: java.lang.IllegalStateException: Need an underlying widget to be able to set the input.(Has the widget been disposed?)
at org.eclipse.jface.viewers.StructuredViewer.setInput(StructuredViewer.java:1627)
at org.jkiss.dbeaver.ui.navigator.database.DatabaseNavigatorTree.setInput(DatabaseNavigatorTree.java:284)
at org.jkiss.dbeaver.ui.navigator.database.NavigatorViewBase.lambda$0(NavigatorViewBase.java:110)
at org.jkiss.dbeaver.ui.UIExecutionQueue.executeInUI(UIExecutionQueue.java:52)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185)
... 17 more
Suppressed: org.eclipse.swt.SWTException: Failed to execute runnable (org.eclipse.swt.SWTException: Widget is disposed)
... 20 more
Caused by: org.eclipse.swt.SWTException: Widget is disposed
at org.eclipse.swt.SWT.error(SWT.java:4918)
at org.eclipse.swt.SWT.error(SWT.java:4833)
at org.eclipse.swt.SWT.error(SWT.java:4804)
at org.eclipse.swt.widgets.Widget.error(Widget.java:447)
at org.eclipse.swt.widgets.Widget.getDisplay(Widget.java:569)
at org.jkiss.dbeaver.ui.navigator.project.ProjectExplorerView.createColumns(ProjectExplorerView.java:100)
at org.jkiss.dbeaver.ui.navigator.project.ProjectExplorerView.lambda$0(ProjectExplorerView.java:84)
at org.jkiss.dbeaver.ui.UIExecutionQueue.executeInUI(UIExecutionQueue.java:52)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185)
... 17 more
Caused by: java.lang.NullPointerException
at org.jkiss.dbeaver.core.WorkbenchContextListener.listenWindowEvents(WorkbenchContextListener.java:96)
at org.jkiss.dbeaver.core.WorkbenchContextListener.<init>(WorkbenchContextListener.java:54)
at org.jkiss.dbeaver.core.WorkbenchContextListener.registerInWorkbench(WorkbenchContextListener.java:241)
at org.jkiss.dbeaver.core.DesktopUI.lambda$0(DesktopUI.java:137)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185)
... 17 more
!ENTRY org.eclipse.e4.ui.workbench 4 0 2022-08-16 17:57:52.567
!MESSAGE NullPointerException
!STACK 0
java.lang.NullPointerException
at org.eclipse.jface.resource.JFaceResources.getResources(JFaceResources.java:224)
at org.eclipse.jface.resource.JFaceResources.getResources(JFaceResources.java:242)
at org.eclipse.ui.part.WorkbenchPart.dispose(WorkbenchPart.java:105)
at org.jkiss.dbeaver.ui.navigator.database.NavigatorViewBase.dispose(NavigatorViewBase.java:273)
at org.jkiss.dbeaver.ui.navigator.database.DatabaseNavigatorView.dispose(DatabaseNavigatorView.java:94)
at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.invalidate(CompatibilityPart.java:264)
at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.destroy(CompatibilityPart.java:421)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58)
at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:995)
at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:960)
at org.eclipse.e4.core.internal.di.InjectorImpl.disposed(InjectorImpl.java:452)
at org.eclipse.e4.core.internal.di.Requestor.disposed(Requestor.java:161)
at org.eclipse.e4.core.internal.contexts.ContextObjectSupplier$ContextInjectionListener.update(ContextObjectSupplier.java:83)
at org.eclipse.e4.core.internal.contexts.TrackableComputationExt.update(TrackableComputationExt.java:103)
at org.eclipse.e4.core.internal.contexts.TrackableComputationExt.handleInvalid(TrackableComputationExt.java:68)
at org.eclipse.e4.core.internal.contexts.EclipseContext.dispose(EclipseContext.java:178)
at org.eclipse.e4.core.internal.contexts.EclipseContext.dispose(EclipseContext.java:163)
at org.eclipse.e4.core.internal.contexts.EclipseContext.dispose(EclipseContext.java:163)
at org.eclipse.e4.core.internal.contexts.EclipseContext.dispose(EclipseContext.java:163)
at org.eclipse.e4.core.internal.contexts.EclipseContext.dispose(EclipseContext.java:163)
at org.eclipse.e4.core.internal.contexts.osgi.EclipseContextOSGi.dispose(EclipseContextOSGi.java:102)
at org.eclipse.e4.core.internal.contexts.osgi.EclipseContextOSGi.bundleChanged(EclipseContextOSGi.java:144)
at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:944)
at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234)
at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151)
at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEventPrivileged(EquinoxEventPublisher.java:229)
at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:138)
at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:130)
at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor.publishModuleEvent(EquinoxContainerAdaptor.java:217)
at org.eclipse.osgi.container.Module.publishEvent(Module.java:499)
at org.eclipse.osgi.container.Module.doStop(Module.java:658)
at org.eclipse.osgi.container.Module.stop(Module.java:521)
at org.eclipse.osgi.container.SystemModule.stop(SystemModule.java:207)
at org.eclipse.osgi.internal.framework.EquinoxBundle$SystemBundle$EquinoxSystemModule$1.run(EquinoxBundle.java:226)
at java.base/java.lang.Thread.run(Unknown Source)
!ENTRY org.eclipse.e4.ui.workbench 4 0 2022-08-16 17:57:52.576
!MESSAGE FrameworkEvent ERROR
!STACK 0
org.eclipse.e4.core.di.InjectionException: org.eclipse.swt.SWTException: Device is disposed
at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:68)
at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:995)
at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:960)
at org.eclipse.e4.core.internal.di.InjectorImpl.disposed(InjectorImpl.java:452)
at org.eclipse.e4.core.internal.di.Requestor.disposed(Requestor.java:161)
at org.eclipse.e4.core.internal.contexts.ContextObjectSupplier$ContextInjectionListener.update(ContextObjectSupplier.java:83)
at org.eclipse.e4.core.internal.contexts.TrackableComputationExt.update(TrackableComputationExt.java:103)
at org.eclipse.e4.core.internal.contexts.TrackableComputationExt.handleInvalid(TrackableComputationExt.java:68)
at org.eclipse.e4.core.internal.contexts.EclipseContext.dispose(EclipseContext.java:178)
at org.eclipse.e4.core.internal.contexts.EclipseContext.dispose(EclipseContext.java:163)
at org.eclipse.e4.core.internal.contexts.EclipseContext.dispose(EclipseContext.java:163)
at org.eclipse.e4.core.internal.contexts.EclipseContext.dispose(EclipseContext.java:163)
at org.eclipse.e4.core.internal.contexts.EclipseContext.dispose(EclipseContext.java:163)
at org.eclipse.e4.core.internal.contexts.osgi.EclipseContextOSGi.dispose(EclipseContextOSGi.java:102)
at org.eclipse.e4.core.internal.contexts.osgi.EclipseContextOSGi.bundleChanged(EclipseContextOSGi.java:144)
at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:944)
at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234)
at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151)
at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEventPrivileged(EquinoxEventPublisher.java:229)
at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:138)
at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:130)
at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor.publishModuleEvent(EquinoxContainerAdaptor.java:217)
at org.eclipse.osgi.container.Module.publishEvent(Module.java:499)
at org.eclipse.osgi.container.Module.doStop(Module.java:658)
at org.eclipse.osgi.container.Module.stop(Module.java:521)
at org.eclipse.osgi.container.SystemModule.stop(SystemModule.java:207)
at org.eclipse.osgi.internal.framework.EquinoxBundle$SystemBundle$EquinoxSystemModule$1.run(EquinoxBundle.java:226)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: org.eclipse.swt.SWTException: Device is disposed
at org.eclipse.swt.SWT.error(SWT.java:4918)
at org.eclipse.swt.SWT.error(SWT.java:4833)
at org.eclipse.swt.SWT.error(SWT.java:4804)
at org.eclipse.swt.widgets.Display.error(Display.java:1272)
at org.eclipse.swt.widgets.Display.asyncExec(Display.java:789)
at org.eclipse.ui.internal.WorkbenchWindow$3.changed(WorkbenchWindow.java:886)
at org.eclipse.e4.core.internal.contexts.TrackableComputationExt.update(TrackableComputationExt.java:105)
at org.eclipse.e4.core.internal.contexts.EclipseContext.processScheduled(EclipseContext.java:356)
at org.eclipse.e4.core.internal.contexts.EclipseContext.set(EclipseContext.java:372)
at org.eclipse.e4.ui.internal.services.ContextContextService.setEventCaching(ContextContextService.java:126)
at org.eclipse.e4.ui.internal.services.ContextContextService.deferUpdates(ContextContextService.java:87)
at org.eclipse.ui.internal.contexts.ContextService.deferUpdates(ContextService.java:92)
at org.eclipse.ui.internal.contexts.ContextService.deactivateContexts(ContextService.java:203)
at org.eclipse.ui.internal.contexts.SlaveContextService.dispose(SlaveContextService.java:197)
at org.eclipse.ui.internal.PartSite.dispose(PartSite.java:344)
at org.eclipse.ui.internal.ViewSite.dispose(ViewSite.java:58)
at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.disposeSite(CompatibilityPart.java:443)
at org.eclipse.ui.internal.e4.compatibility.CompatibilityView.disposeSite(CompatibilityView.java:291)
at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.internalDisposeSite(CompatibilityPart.java:434)
at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.invalidate(CompatibilityPart.java:272)
at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.destroy(CompatibilityPart.java:421)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58)
... 27 more
!ENTRY org.jkiss.dbeaver.model 2 0 2022-08-16 17:57:52.834
!MESSAGE Listener 'org.jkiss.dbeaver.ui.actions.datasource.DataSourceToolbarHandler@406c2554' is not unregistered from DBM model
!ENTRY org.jkiss.dbeaver.model 2 0 2022-08-16 17:57:52.838
!MESSAGE Some project listeners are still register:
!ENTRY org.jkiss.dbeaver.model 2 0 2022-08-16 17:57:52.841
!MESSAGE Some datasource registry listeners are still registered:
本帖最后由 goastship 于 2022-7-27 11:04 编辑
Vvvvvoid 发表于 2022-7-26 18:02
不需要, 用了几天没有遇到过这个窗口
可能被不小心爆破没了...
谢谢解惑,找到原因了,dbeaver.ini 文件配置问题。
-startup
plugins/org.eclipse.equinox.launcher_1.6.400.v20210924-0641.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.2.400.v20211117-0650
-vm:C:\Program Files (x86)\Java\jre1.8.0_333\bin\java//此处使用系统安装的 JAVA
-vmargs
-XX:+IgnoreUnrecognizedVMOptions
--add-modules=ALL-SYSTEM
-Dosgi.requiredJavaVersion=11
-Xms128m
-Xmx2048m
-Djavax.net.ssl.trustStoreType=WINDOWS-ROOT
-Ddbeaver.distribution.type=exe
-Dlm.debug.mode=true//添加此语句后,错误不再出现 写得很好! 学习并 拜读了。 本帖最后由 Vvvvvoid 于 2022-7-25 20:46 编辑
WIN10/Mac m1 测试通过 感谢分享,学习学习。有时间试一下 拜读大作! 感谢大佬技术分享 写得很好! 太好了!来学习JAVA程序逆向分析! 学习学习,很多自己都看不懂!