Updated to decompile

main
noah metz 2024-01-19 21:36:13 -07:00
parent a22aba913d
commit 3689a35410
2 changed files with 25 additions and 10 deletions

@ -0,0 +1,5 @@
Steps:
1. Extract PYZ from executable with `pyi-archive_viewer`
2. Run get_co.py on the PYZ file to extract all code objects embedded in the PYZ file
3. Run get_pyc.py on the extracted directory to get the pyc and py files for the co

@ -52,18 +52,28 @@ def code_to_bytecode(code, mtime=0, source_size=0):
if len(sys.argv) < 3: if len(sys.argv) < 3:
print("Usage %s <in_path> <out_path>" % sys.argv[0]) print("Usage %s <in_path> <pyc_path> <py_path>" % sys.argv[0])
sys.exit(1) sys.exit(1)
in_path = Path(sys.argv[1]) in_path = Path(sys.argv[1])
out_path = Path(sys.argv[2]) pyc_path = Path(sys.argv[2])
py_path = Path(sys.argv[3])
for path in in_path.rglob("*.co"): for path in in_path.rglob("*.co"):
with open(str(path), "rb") as file: try:
data = file.read() co = marshal.loads(path.read_bytes())
co = marshal.loads(data) pyc = code_to_bytecode(co, time.time())
pyc = code_to_bytecode(co, time.time())
out_file = out_path / path.relative_to(in_path) pyc_file = pyc_path / path.relative_to(in_path).with_suffix(".pyc")
out_file.parent.mkdir(parents=True, exist_ok=True) pyc_file.parent.mkdir(parents=True, exist_ok=True)
with open(str(out_file), "wb") as file:
file.write(pyc) with open(str(pyc_file), "wb") as file:
file.write(pyc)
py_file = py_path / path.relative_to(in_path).with_suffix(".py")
py_file.parent.mkdir(parents=True, exist_ok=True)
with open(str(py_file), 'w') as decompiled:
uncompyle6.main.decompile_file(str(pyc_file), decompiled)
except:
print("Failed to decompile %s" % path)