writeups/2020/rgbctf/oop/decode.py

47 lines
1.2 KiB
Python

#!/usr/bin/env python3
import pathlib
mapping = {}
for file in pathlib.Path("src").iterdir():
if "Main" in file.name:
continue
name = file.name.replace(".java", "")
with file.open("r") as f:
data = f.read()
thisfile = {}
mname = None
for line in data.split("\n"):
if mname is None:
if "public String" in line:
mname = line.strip().split(" ")[2].replace("()", "")
else:
val = line.strip().split(" ")[1].replace('"', "").replace(";", "")
thisfile[mname] = val
mname = None
mapping[name] = thisfile
import pprint
pprint.pprint(mapping)
start = "javautil"
def rfind(what):
for file,data in mapping.items():
for k,v in data.items():
if v == what and k in data.values():
for k2, v2 in data.items():
if v2 == k and k2 in data.values():
for k3, v3 in data.items():
if v3 == k2:
return file + k3
data = rfind("ja") + rfind("va") + rfind("ut") + rfind("il")
data = bytearray(data.encode())
for i in range(len(data)):
data[i] ^= 2
print(data)