Stack-based Serialization utility.
| 31 | log4j_logger = logging.getLogger("Log4RCE") |
| 32 | |
| 33 | class Serializer(): |
| 34 | """ |
| 35 | Stack-based Serialization utility. |
| 36 | """ |
| 37 | |
| 38 | __payload: bytes |
| 39 | __size_stack: bytes |
| 40 | |
| 41 | def __init__(self): |
| 42 | self.__payload = b"" |
| 43 | self.__size_stack = [] |
| 44 | |
| 45 | def push(self, data: bytes) -> "Serializer": |
| 46 | self.__last = data |
| 47 | self.__payload = data + self.__payload |
| 48 | return self |
| 49 | |
| 50 | def pop_size(self) -> "Serializer": |
| 51 | return self.push(bytes([len(self.__payload) - self.__size_stack.pop()])) |
| 52 | |
| 53 | def push_size(self, count=1) -> "Serializer": |
| 54 | for _ in range(count): |
| 55 | self.__size_stack.append(len(self.__payload)) |
| 56 | |
| 57 | return self |
| 58 | |
| 59 | def build(self) -> bytes: |
| 60 | return self.__payload |
| 61 | |
| 62 | def __repr__(self) -> str: |
| 63 | return f"Serializer{self.__payload}" |
| 64 | |
| 65 | class JavaClass(): |
| 66 | """ |