From 642da35ec47710659b0c839527aadc583b66ea14 Mon Sep 17 00:00:00 2001 From: "novice.li" Date: Fri, 5 Apr 2024 10:40:35 +0800 Subject: [PATCH] hook LicensingFacade --- .../java/com/novitechie/jetbra/AgentMain.java | 14 +- .../jetbra/LicensingFacadeAdvice.java | 22 +++ .../src/main/resources/public/index.html | 175 ++++++++++++++---- 3 files changed, 176 insertions(+), 35 deletions(-) create mode 100644 jetbra-agent/src/main/java/com/novitechie/jetbra/LicensingFacadeAdvice.java diff --git a/jetbra-agent/src/main/java/com/novitechie/jetbra/AgentMain.java b/jetbra-agent/src/main/java/com/novitechie/jetbra/AgentMain.java index 0157d5d..3f78f02 100644 --- a/jetbra-agent/src/main/java/com/novitechie/jetbra/AgentMain.java +++ b/jetbra-agent/src/main/java/com/novitechie/jetbra/AgentMain.java @@ -30,6 +30,12 @@ public class AgentMain { .on(ElementMatchers.named("getUserOptionsFile")))) .asTerminalTransformation() + .type(ElementMatchers.named("com.intellij.ui.LicensingFacade")) + .transform((builder, typeDescription, classLoader, javaModule, protectionDomain) -> + builder.visit(Advice.to(LicensingFacadeAdvice.class) + .on(ElementMatchers.named("getLicenseExpirationDate")))) + .asTerminalTransformation() + .installOn(inst); agentBuilder.installOn(inst); @@ -37,10 +43,10 @@ public class AgentMain { static AgentBuilder newAgentBuilder() { return new AgentBuilder.Default() - .with(AgentBuilder.RedefinitionStrategy.RETRANSFORMATION) - .with(AgentBuilder.InitializationStrategy.NoOp.INSTANCE) - .with(AgentBuilder.TypeStrategy.Default.REDEFINE) - .ignore(ElementMatchers.nameStartsWith("net.bytebuddy.")); + .ignore(ElementMatchers.none()) + .with(AgentBuilder.RedefinitionStrategy.REDEFINITION) + .with(AgentBuilder.Listener.StreamWriting.toSystemError().withErrorsOnly()) + .with(AgentBuilder.Listener.StreamWriting.toSystemOut().withTransformationsOnly()); } diff --git a/jetbra-agent/src/main/java/com/novitechie/jetbra/LicensingFacadeAdvice.java b/jetbra-agent/src/main/java/com/novitechie/jetbra/LicensingFacadeAdvice.java new file mode 100644 index 0000000..125b818 --- /dev/null +++ b/jetbra-agent/src/main/java/com/novitechie/jetbra/LicensingFacadeAdvice.java @@ -0,0 +1,22 @@ +package com.novitechie.jetbra; + +import net.bytebuddy.asm.Advice; + +import java.util.Calendar; +import java.util.Date; + +public class LicensingFacadeAdvice { + + @Advice.OnMethodExit + public static void intercept(@Advice.Return(readOnly = false) Date expirationDate) { + RuntimeException e = new RuntimeException(); + for (StackTraceElement stackTraceElement : e.getStackTrace()) { + if (stackTraceElement.getFileName() == null){ + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DAY_OF_MONTH, 50); + expirationDate = calendar.getTime(); + break; + } + } + } +} diff --git a/jetbra-server/src/main/resources/public/index.html b/jetbra-server/src/main/resources/public/index.html index 3334c16..f7209c2 100644 --- a/jetbra-server/src/main/resources/public/index.html +++ b/jetbra-server/src/main/resources/public/index.html @@ -795,10 +795,13 @@ - + @@ -847,7 +850,7 @@ document.getElementById('licenseeName').value = licenseInfo.licenseeName document.getElementById('assigneeName').value = licenseInfo.assigneeName document.getElementById('expiryDate').value = licenseInfo.expiryDate - }else { + } else { document.getElementById('licenseeName').value = 'Test only' document.getElementById('assigneeName').value = 'Test only' document.getElementById('expiryDate').value = '2026-12-31' @@ -858,26 +861,114 @@