Vvvvvoid 发表于 2022-7-25 16:41

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);
```
## 后记

仅供研究学习使用,请勿用于非法用途
注:若转载请注明来源(本贴地址)与作者信息。


mouccc 发表于 2022-8-16 18:11

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-26 18:06

本帖最后由 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//添加此语句后,错误不再出现

guijun 发表于 2022-7-25 16:56

写得很好!

cai2532 发表于 2022-7-25 16:58

学习并 拜读了。

Vvvvvoid 发表于 2022-7-25 17:55

本帖最后由 Vvvvvoid 于 2022-7-25 20:46 编辑

WIN10/Mac m1 测试通过

kds0221 发表于 2022-7-25 18:35

感谢分享,学习学习。有时间试一下

irrtatingbear21 发表于 2022-7-26 00:08

拜读大作!

cxq297532493 发表于 2022-7-26 00:37

感谢大佬技术分享

linxun 发表于 2022-7-26 07:02

写得很好!

lxfw2000 发表于 2022-7-26 08:43

太好了!来学习JAVA程序逆向分析!

MI20220721 发表于 2022-7-26 08:44

学习学习,很多自己都看不懂!
页: [1] 2 3 4 5
查看完整版本: DBeaver Ultimate edition JAVA程序逆向分析