hook LicensingFacade

This commit is contained in:
2024-04-05 10:40:35 +08:00
parent 7a36d1729f
commit 642da35ec4
3 changed files with 176 additions and 35 deletions

View File

@@ -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());
}

View File

@@ -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;
}
}
}
}