wdnmd
This commit is contained in:
parent
ed4a857ae3
commit
abc1c843f0
10
build.gradle
10
build.gradle
@ -1,5 +1,6 @@
|
|||||||
plugins {
|
plugins {
|
||||||
id 'java'
|
id 'java'
|
||||||
|
id 'com.github.johnrengelman.shadow' version '8.1.1'
|
||||||
}
|
}
|
||||||
|
|
||||||
group = 'com.yourdomain'
|
group = 'com.yourdomain'
|
||||||
@ -28,4 +29,13 @@ jar {
|
|||||||
'Can-Retransform-Classes': 'true'
|
'Can-Retransform-Classes': 'true'
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
shadowJar {
|
||||||
|
archiveBaseName.set('agent')
|
||||||
|
archiveClassifier.set('')
|
||||||
|
archiveVersion.set('1.0-SNAPSHOT')
|
||||||
|
manifest {
|
||||||
|
attributes 'Premain-Class': 'com.yourdomain.agent.CheckrpAgent'
|
||||||
|
}
|
||||||
}
|
}
|
@ -3,48 +3,57 @@ package com.yourdomain.agent;
|
|||||||
import net.bytebuddy.agent.builder.AgentBuilder;
|
import net.bytebuddy.agent.builder.AgentBuilder;
|
||||||
import net.bytebuddy.asm.Advice;
|
import net.bytebuddy.asm.Advice;
|
||||||
import net.bytebuddy.matcher.ElementMatchers;
|
import net.bytebuddy.matcher.ElementMatchers;
|
||||||
|
import net.bytebuddy.description.type.TypeDescription;
|
||||||
|
import net.bytebuddy.utility.JavaModule;
|
||||||
|
import net.bytebuddy.dynamic.DynamicType;
|
||||||
|
|
||||||
|
import java.io.BufferedWriter;
|
||||||
|
import java.io.File;
|
||||||
import java.io.FileWriter;
|
import java.io.FileWriter;
|
||||||
import java.io.PrintWriter;
|
|
||||||
import java.lang.instrument.Instrumentation;
|
import java.lang.instrument.Instrumentation;
|
||||||
import java.lang.reflect.Field;
|
import java.security.ProtectionDomain;
|
||||||
import java.time.LocalDateTime;
|
|
||||||
|
|
||||||
public class CheckrpAgent {
|
public class CheckrpAgent {
|
||||||
|
private static final String OUT_PATH = "D:/Minectaft/Milk/milk1/dev/packets.txt";
|
||||||
|
|
||||||
public static void premain(String agentArgs, Instrumentation inst) {
|
public static void premain(String agentArgs, Instrumentation inst) {
|
||||||
System.out.println("[CheckrpAgent] Agent loaded: Logging sent packets to sent_packets.txt");
|
try {
|
||||||
|
File f = new File(OUT_PATH);
|
||||||
|
f.getParentFile().mkdirs();
|
||||||
|
if (!f.exists()) f.createNewFile();
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
new AgentBuilder.Default()
|
new AgentBuilder.Default()
|
||||||
.type(ElementMatchers.nameEndsWith("ModLoadProcedure"))
|
.ignore(ElementMatchers.nameStartsWith("net.bytebuddy."))
|
||||||
.transform((builder, typeDescription, classLoader, module, protectionDomain) ->
|
.ignore(ElementMatchers.nameStartsWith("java."))
|
||||||
builder.method(ElementMatchers.named("sendToServer"))
|
.type(ElementMatchers.named("net.minecraftforge.network.simple.SimpleChannel"))
|
||||||
.intercept(Advice.to(SendPacketLogger.class))
|
.transform((
|
||||||
|
DynamicType.Builder<?> builder,
|
||||||
|
TypeDescription typeDescription,
|
||||||
|
ClassLoader classLoader,
|
||||||
|
JavaModule module,
|
||||||
|
ProtectionDomain pd
|
||||||
|
) ->
|
||||||
|
builder.visit(Advice.to(SendAdvice.class)
|
||||||
|
.on(ElementMatchers.named("sendToServer")
|
||||||
|
.and(ElementMatchers.takesArguments(1))
|
||||||
|
)
|
||||||
|
)
|
||||||
)
|
)
|
||||||
.installOn(inst);
|
.installOn(inst);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class SendPacketLogger {
|
public static class SendAdvice {
|
||||||
|
|
||||||
@Advice.OnMethodEnter
|
@Advice.OnMethodEnter
|
||||||
public static void onEnter(@Advice.Argument(0) Object packet) {
|
public static void onEnter(@Advice.Argument(0) Object packet) {
|
||||||
try (PrintWriter out = new PrintWriter(new FileWriter("sent_packets.txt", true))) {
|
String className = packet.getClass().getName();
|
||||||
out.println("==== Packet Sent ====");
|
String line ="["+className +"] "+ (packet == null ? "null" : packet.toString()) + System.lineSeparator();
|
||||||
out.println("Time: " + LocalDateTime.now());
|
try (BufferedWriter out = new BufferedWriter(new FileWriter(OUT_PATH, true))) {
|
||||||
out.println("Class: " + packet.getClass().getName());
|
out.write(line);
|
||||||
for (Field field : packet.getClass().getDeclaredFields()) {
|
|
||||||
field.setAccessible(true);
|
|
||||||
try {
|
|
||||||
Object value = field.get(packet);
|
|
||||||
out.printf(" %s = %s%n", field.getName(), value);
|
|
||||||
} catch (IllegalAccessException e) {
|
|
||||||
out.printf(" %s = <unreadable>%n", field.getName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
out.println("=====================\n");
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
System.err.println("[CheckrpAgent] Failed to write packet info: " + e.getMessage());
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user