1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
| import marshal import inspect
def main(): import marshal import inspect c = b'\x87\xfcA@\xc7\xc4\xea\xf5\xa6\x87\x84\x02\xd6\x9e\x85\x93\xdeM\xa9\xe7\'\xf1\xaf\xe7\xc5\xde:\xff\xff\x95\x9a\xce\x05v\xd21\xce~\xa5\xb6\x19KI\xafd\xf2\xb5D\x1d\xa9:<7\x97<\xc8\xfd\x02\x9fK\x9a\x14\xb3\xc8\xb82\x90\x1a7\x140j\xffw\xe6\xb1s\xcd|s\xfd\x99\xf4b\xe1Z\x9e\x86\xf1%q\x05\xf0\xfb\xd2\xf0G\xd5x\xc0A\xac\xc4\xe5\xca~}2\x8e.\x9d6\xbe\xe2\x9a\xa0u=\xe0\x98\xaa\xc1xl\x1aI~T\xec\xfe\x95F\xbbS1)\x7f\x01\xdam\xb7>\x91\xf0\xb9-"1\xa1V\xf4\x18{3\'\x8b\x16\xeb\x92%\r<\xbe\xe3\xda\xcc\xc1\x03\xae\xf7h\xe6\xd7\xa8h\xe4\x1dM\xf53.-o\xd7\xb4\x1b\xdd\x1f\x7fG\xeb[o\xbab\x1fZF\xa1\xbd\x81\xe5\xb3)\xdf\'\x01\xdb\xe0j\xd6\xf6\x8b+\x1b\xee\x97\xcb\x9c\xf7\x03\x00p\xdb\xe89}\xc8\xd6\xd2Tu\x85y\x08\xfa\xe2\x98\xd2\xfa\n\x00v\xd4\x0cr\x02ew\x99\xe6\xe2\x1b\x8b\xbd]\x08\xb2\x07\xdfg\xc2\xf3\xd32\xe65\xf1\xa4\x02:\xbe\xf6\xa4\xea\xe1\xc9 \xa4E\x9c\xe3\xf95\x81\xbdd\xb3&\xf7%\x8a\x05\x18\x1a\xdc\x00\x08\xd2\x95\xd8\x06\xc7\xe4\xfaI\xe5\x80K\x99\xfa\xd9\x8a\xc5d\x18\x03\xc6\xd4\x13m4\xf1ts\x866\xe0\xae8$\xb0z\x85\x0bU\xfdC\xe6\xc2\xef:Ra\xd2\x07h\xdf\x9b\xaa\xd8\xa3\xc1\xee}\x0b\xd0\x97\xb7\x11U\x98\x89E\x88\xfd\xa8\x85\x84Ez@\x92U\x8a6\xcb\x18\xb7\xe0$\xfe\xa6\x0f]\xbd\x05p\xc4\xa8"\xc0w\xd7I\xfd\x84\xe8\xb5\xa7\xc9A\x01\tV\xbb\xaa@HTiK\xab)W\xb3\xdf\x0e\xb0\xd8\x93Oh`\xf7[b\xbaB\x8f\xe2\x9d\tpXA\x11\x04\xa2N\x9e;\x07J\x9c@"\x90^9\xdc\x10\x87`9\xbe\xfc|\x04\xb6"\x95\xd7l\xf4\x07;\xfb\x8a\xf3\xc4\xd6\xa2T\xcc\x18v~y8RE\xca,Q\xf5\xb5\xed\xd6,6\xf1i%\x92\xc3\x83\xda\xdc-\x0fWe&/I\x04\x1e\xf4Y\x14]\xb3e\x97\x84\xe1\x922\xd0\x96e\xc2\x161\xebtr\xe8\xa3\xea(\x18!\x83\xf9\x0b+\xc1\x01\x1f\xcec\x1f\x91\xf2\xd8f\xbav\xf9\t\xd7\xab\xd4\x84\x10L\x95\xe7\xf5\xcf\x15\xdf\x9d\xad\xfa\xac\x9d\xcbJ\x86\x14^P\n\xbc\xbd\x1f\xbb\xaen\xe4\xd0q\xc0\xd8\xb3\x97\xdc\x92P\xaa\xe4j\x813~\xd0_q\x88y\xff[\x00\xaa@\x90\x87\x905\xb0\xc3\r\x91\t\x9f>\xdd\x17\x19\xe1.\x8eR\x06/\x99\x1b\xff\x8a\x95qY\xa3h\x10\xcau\x0c\x0b\xb8\xb5\x13\xf6\xde\x06\x9c\xb6\xffS\x819\x8e8\'\x1e\x0fker\xbcD\xc99\x9d\xda\x8b\xbd\x0e\x9cbF?\xe8,\x17w\x8d\xafk\xee\'\x7f\x9b\x07\x91{I\xd0\xbbi$\xf8\xad\xed\xcf\x83\xb8\xee\xbe\x8aM\xa3Ea\xe5\xe3s\xaf\xe5\xcc:<!\xee\x03\x96[\xf6\xde\xe0\xfa\xb0}\xfa\xdb\x95\x9eio\xba\xc8Oo\xc4^_\x12\x88V\xe5\x0c\x01\x07\x87{\xfc\x93,h\x94\xc1\x80\x96\xac6\xdf\x98+M\xd6\xd0\xcf\x15\xd6>H\x11)\x140\xf7\x12t[\x1a\xa7\xcc\x80v\x18<\xb7\xafOa;o\xf4\x86K\xcf\xe6\x87\xaa\xaaLfk\xc7w \x7fNk\xc0\x9f\xc8b\x1aFo\x80\x07 YRa\x96\xa6\xbcH\x84)SK\xda\xaeX\xbd\x82\x8d6\x11U6d\x91\xb101I\x17\xe0\xe7\xf0\xcc\xd7\x1a@t\xe4\\\x06]\x19\x975\xa2(\xc3\x13\xe3^my\xbe<\xe0\x05\xb8Cue\x9c\x18o3\xe9\xd4-\x10\x14\x9ea\xad\xcb\xd2\xee\xaa\xa0>re\x8a\xb9\x1d\xba\xd2\xb81[\xe7\xd19\xf5\x12\xfe~\xf4\xc5)\x15\xe0o\x01%?#\x94\xde\xa9\xc3g(WDN9\xd8\xeb\xb4\xef8?\xf6\x18\xbdu\x16\x8c"\xbe?c\xb7P\xd1V\x8d\x14\x94\xb8\xaa\xac,=\x81g\xd7G\xac\xf6\x84\xe8\x90\x7f\xce\x1crz@\x9e\xaf\xed\xa1\xb2@\x91\x8c\x89\xe6\xa8\xa5\x9c|\x1cq\xb0|1\x06\xe6\x87\xfcn3\x80\xc2\xb0\x8c\x0cI"\x1c48yC\xe2.\x7f\x7f"k\xbb\xae\xf5a/\xfa\x9f\n\x01\x00\xc7\xb9\xb0C\xff\xb6Y)\xf5a)5`\xf9iqx\xe03Z\xf0\x0bW\x0e\xa7\t\xb4\x98J\xf6\xe2\xa4\xaa\x1eG\xeeD\xe1\xadD\xbe\xfb\r/\x97v\x86j~\xbe\x9d\xf4F\xc0:$\x8a\x06n\x12`sE\xd4\xdc\xe5i\x1a$^\xd4\x06r\x87-bj9Ik[\ru\x8f\xb3q\xb9Y\xc1\xa6\xe8\xb3\xd8)'
def e(m, k): r = [] r += [m[0] ^ (sum(k) & 0o377)] for _, i in enumerate(m[1:]): k = e(k, [m[_]]) r += [i ^ (sum(k) & 0o377)] return bytes(r) print("This is a simple python flag checking service.") flag = input("Please give the flag to check: ") k = [(a*b) & 0xff for a, b in zip(map(sum, inspect.getsource(main).encode().splitlines()), map(len, inspect.getsource(main).encode().splitlines()))] try: exec(marshal.loads(e(c, k))) except: print("That is not the flag")
c = b'\x87\xfcA@\xc7\xc4\xea\xf5\xa6\x87\x84\x02\xd6\x9e\x85\x93\xdeM\xa9\xe7\'\xf1\xaf\xe7\xc5\xde:\xff\xff\x95\x9a\xce\x05v\xd21\xce~\xa5\xb6\x19KI\xafd\xf2\xb5D\x1d\xa9:<7\x97<\xc8\xfd\x02\x9fK\x9a\x14\xb3\xc8\xb82\x90\x1a7\x140j\xffw\xe6\xb1s\xcd|s\xfd\x99\xf4b\xe1Z\x9e\x86\xf1%q\x05\xf0\xfb\xd2\xf0G\xd5x\xc0A\xac\xc4\xe5\xca~}2\x8e.\x9d6\xbe\xe2\x9a\xa0u=\xe0\x98\xaa\xc1xl\x1aI~T\xec\xfe\x95F\xbbS1)\x7f\x01\xdam\xb7>\x91\xf0\xb9-"1\xa1V\xf4\x18{3\'\x8b\x16\xeb\x92%\r<\xbe\xe3\xda\xcc\xc1\x03\xae\xf7h\xe6\xd7\xa8h\xe4\x1dM\xf53.-o\xd7\xb4\x1b\xdd\x1f\x7fG\xeb[o\xbab\x1fZF\xa1\xbd\x81\xe5\xb3)\xdf\'\x01\xdb\xe0j\xd6\xf6\x8b+\x1b\xee\x97\xcb\x9c\xf7\x03\x00p\xdb\xe89}\xc8\xd6\xd2Tu\x85y\x08\xfa\xe2\x98\xd2\xfa\n\x00v\xd4\x0cr\x02ew\x99\xe6\xe2\x1b\x8b\xbd]\x08\xb2\x07\xdfg\xc2\xf3\xd32\xe65\xf1\xa4\x02:\xbe\xf6\xa4\xea\xe1\xc9 \xa4E\x9c\xe3\xf95\x81\xbdd\xb3&\xf7%\x8a\x05\x18\x1a\xdc\x00\x08\xd2\x95\xd8\x06\xc7\xe4\xfaI\xe5\x80K\x99\xfa\xd9\x8a\xc5d\x18\x03\xc6\xd4\x13m4\xf1ts\x866\xe0\xae8$\xb0z\x85\x0bU\xfdC\xe6\xc2\xef:Ra\xd2\x07h\xdf\x9b\xaa\xd8\xa3\xc1\xee}\x0b\xd0\x97\xb7\x11U\x98\x89E\x88\xfd\xa8\x85\x84Ez@\x92U\x8a6\xcb\x18\xb7\xe0$\xfe\xa6\x0f]\xbd\x05p\xc4\xa8"\xc0w\xd7I\xfd\x84\xe8\xb5\xa7\xc9A\x01\tV\xbb\xaa@HTiK\xab)W\xb3\xdf\x0e\xb0\xd8\x93Oh`\xf7[b\xbaB\x8f\xe2\x9d\tpXA\x11\x04\xa2N\x9e;\x07J\x9c@"\x90^9\xdc\x10\x87`9\xbe\xfc|\x04\xb6"\x95\xd7l\xf4\x07;\xfb\x8a\xf3\xc4\xd6\xa2T\xcc\x18v~y8RE\xca,Q\xf5\xb5\xed\xd6,6\xf1i%\x92\xc3\x83\xda\xdc-\x0fWe&/I\x04\x1e\xf4Y\x14]\xb3e\x97\x84\xe1\x922\xd0\x96e\xc2\x161\xebtr\xe8\xa3\xea(\x18!\x83\xf9\x0b+\xc1\x01\x1f\xcec\x1f\x91\xf2\xd8f\xbav\xf9\t\xd7\xab\xd4\x84\x10L\x95\xe7\xf5\xcf\x15\xdf\x9d\xad\xfa\xac\x9d\xcbJ\x86\x14^P\n\xbc\xbd\x1f\xbb\xaen\xe4\xd0q\xc0\xd8\xb3\x97\xdc\x92P\xaa\xe4j\x813~\xd0_q\x88y\xff[\x00\xaa@\x90\x87\x905\xb0\xc3\r\x91\t\x9f>\xdd\x17\x19\xe1.\x8eR\x06/\x99\x1b\xff\x8a\x95qY\xa3h\x10\xcau\x0c\x0b\xb8\xb5\x13\xf6\xde\x06\x9c\xb6\xffS\x819\x8e8\'\x1e\x0fker\xbcD\xc99\x9d\xda\x8b\xbd\x0e\x9cbF?\xe8,\x17w\x8d\xafk\xee\'\x7f\x9b\x07\x91{I\xd0\xbbi$\xf8\xad\xed\xcf\x83\xb8\xee\xbe\x8aM\xa3Ea\xe5\xe3s\xaf\xe5\xcc:<!\xee\x03\x96[\xf6\xde\xe0\xfa\xb0}\xfa\xdb\x95\x9eio\xba\xc8Oo\xc4^_\x12\x88V\xe5\x0c\x01\x07\x87{\xfc\x93,h\x94\xc1\x80\x96\xac6\xdf\x98+M\xd6\xd0\xcf\x15\xd6>H\x11)\x140\xf7\x12t[\x1a\xa7\xcc\x80v\x18<\xb7\xafOa;o\xf4\x86K\xcf\xe6\x87\xaa\xaaLfk\xc7w \x7fNk\xc0\x9f\xc8b\x1aFo\x80\x07 YRa\x96\xa6\xbcH\x84)SK\xda\xaeX\xbd\x82\x8d6\x11U6d\x91\xb101I\x17\xe0\xe7\xf0\xcc\xd7\x1a@t\xe4\\\x06]\x19\x975\xa2(\xc3\x13\xe3^my\xbe<\xe0\x05\xb8Cue\x9c\x18o3\xe9\xd4-\x10\x14\x9ea\xad\xcb\xd2\xee\xaa\xa0>re\x8a\xb9\x1d\xba\xd2\xb81[\xe7\xd19\xf5\x12\xfe~\xf4\xc5)\x15\xe0o\x01%?#\x94\xde\xa9\xc3g(WDN9\xd8\xeb\xb4\xef8?\xf6\x18\xbdu\x16\x8c"\xbe?c\xb7P\xd1V\x8d\x14\x94\xb8\xaa\xac,=\x81g\xd7G\xac\xf6\x84\xe8\x90\x7f\xce\x1crz@\x9e\xaf\xed\xa1\xb2@\x91\x8c\x89\xe6\xa8\xa5\x9c|\x1cq\xb0|1\x06\xe6\x87\xfcn3\x80\xc2\xb0\x8c\x0cI"\x1c48yC\xe2.\x7f\x7f"k\xbb\xae\xf5a/\xfa\x9f\n\x01\x00\xc7\xb9\xb0C\xff\xb6Y)\xf5a)5`\xf9iqx\xe03Z\xf0\x0bW\x0e\xa7\t\xb4\x98J\xf6\xe2\xa4\xaa\x1eG\xeeD\xe1\xadD\xbe\xfb\r/\x97v\x86j~\xbe\x9d\xf4F\xc0:$\x8a\x06n\x12`sE\xd4\xdc\xe5i\x1a$^\xd4\x06r\x87-bj9Ik[\ru\x8f\xb3q\xb9Y\xc1\xa6\xe8\xb3\xd8)' k = [117, 167, 0, 48, 34, 58, 159, 220, 195, 70, 136, 149, 48, 125, 238]
# if __name__ == "__main__": # main()
def dump_pyc(fname, code): import importlib pyc_data = importlib._bootstrap_external._code_to_timestamp_pyc(code) with open(fname, 'wb') as f: f.write(pyc_data)
# code = marshal.loads(e(c, k)) # pyc_data = importlib._bootstrap_external._code_to_timestamp_pyc(code) # print(pyc_data) # with open('dump.pyc', 'wb') as f: # f.write(pyc_data)
def e_old(m, k): r = [] r += [m[0] ^ (sum(k) & 0o377)] for _, i in enumerate(m[1:]): k = e_old(k, [m[_]]) r += [i ^ (sum(k) & 0o377)] return bytes(r)
I = locals() l = dict(I) i = marshal.dumps l2 = str([dir(_) for _ in l.values()]).encode()
def e(m): return bytes([a ^ b for a, b in zip(m, m[len(m) // 2:])])
l2 = b'P\xa6wA\xea([\x9f\x98\xde\x1d\xf7D\x86/\xd4\xeb\xc9\xf0+F\xc3\x94\xc4\x9dn\x95\xa1\xe2\xaa\xf5\xfd\x808\xdbF.x\t\xfa\xd9\x1c\x81\x86y\xc8\xf1j\xed\x83\xbe\xd9\xc4\xb6N\xa7\xdbK\xe9e,\xf0SU\xa2:\x88}P\xca3\xff\xf3\x80\x01\x8a\xcb\x1a\xb2)\xdeM\x89|,\xfc>\xb18TV\x9fy\xeb\x97\xddf\t\xe4\x05\x11\xb0\x1d|y\xb2\xa7G\xe6\xa2-\xf2\xcd\x8b&\xc5d\x91Rg/h\x7f\x7f$\xf0\x08\xda;\xfc\x8d\xaa\xb7;\x91Eq,\xf6X\x19 \xc2\xae\x7f\x8ba\x1e\xcd_\xff\x1aA\xfd\xd52=\xd0\xec\xa5\xa5\xe1\xb4\xcf\xb8\xd2i\xa2X\x15\xd7\x80\x14\xe3\xe9\xa4\x06QG\x89B\xd7u\xc2\xb0\x80\xe1\xfd.\xbb\x88\x9f\xde\x07\x1c\x91\xd6\x7f \xf0ag[\xa7\x1d\xd92?m\xb5r\x84\xa3zh\x84\xc9\xe8\x9a\xf1-\xb4\xfe=j\xf0\xeb\xf62\x99\r\\\x16Q;M\xcb\r5(J\xd1\r+j\x11\x9e!P\xd0\xbb\xf5\xdd\xefJ\xe0f9.\xf6}\xc6+\x998\x9c\xb5\xcd1\xa0\x01\x08\r\x89^$\x88\x89\xc78\xbd\xdbL\xcb\x8c8\x16v\xfe\x05{S\xa3q\xe0@\xa1\xda\xb0\x00\xb2\x0c\x18\xf2\xe7\xb6\x81\t\n\x9c\x9c\x93\xcaz\x99kq\x8f\x15\xf6W\xd5\xcc}\x9a\xca\xc8\xa0\xda\xfe\xa1\xae7\xad\xd1\x1e\xd5\xd5#hS\xc7|\x01\n\xe0\xcdS\xe9&\x01\xe6h\xff*\x06\xc4\x8e\x0b\xddP\x8fa9\xa4E\x1a\x90\xfb$\x11\xf8FvV\x83Pg\xdbu\x9f`\xe8\x17\x0e?o\xb3\rU\xbbv\x8a\x07\xe7\xae\xc5Ho\xe3da\xf3\n\xd2]\xddZ\x9bWY\x9e\xea\xb9D\xbe\xb61\xb4\xab\xff\'\x92;\xa6\xe2k\xaa\x19\xdc\x8f\x02\x14W\'\xcdL\xe1\xbe\xdf\x1eJ\xb514\xec4\xcb\x94/\x87}\xea{\x8ev\x1fiJ\'\xc5\xdf\xdc\xad\xf24\x82\na\xf1\xf7\xe9vM\x08;|\xca\xfa\x89 \x17\xfdrQP\x8eOe\x1d\xdcV\x00\xee\xe9\x1b\x83E\xe2\xcbi\xfc$]\xa2\xb1\x1c&\x11\xe1\x14\x15c\xfe\x18\xaf6\x7f\xb9\xd0\'\xdbM\xe8\xf7\x87\xba\x1f\xde\xca\xf0\x17\x0e\xe4\xc0\x11\xb3\x8c<\xe7f6\x93\x9a\xdb\xe0q \x91\xb8\x16\xbd\xd1lX8(\x16]\x913s|\xa5\xd3}U\x92\x01\x95\xdb\x13\'.\xa2\xe8\xfbXq\xb0\x16uB\x06\x912\x8aQ@\x82\x89\xd7\xea\xac\x9b>(G\xe7\x8e\xf2>\x18\x85\xd2P\x84`\x9f\xcd\xb7\r\x1aE\x95\xc9\xac\x1e\xee\x9b\x95\xa4B\x13\xd4\xc7k\xe1 Q\x85\xf6P\xba4\xa9*\xb6\xac\xde\x8f\xa9\xb6Z\x06i>\x98\x8bK\x1eg=\r\x92\x0c}\x94\xc34\xb1\xa8\xf4\x06\r&\x8d"\r\xcdH\xfb\xc4\x85XMSc7}\xdc>\xa0\x0e0A\xe4\x01\x13\xe5Bo\xdd-\xcbA9\xb7\xf6!\x12\x9b\x05\xa5\xe0\x18\xadQ^\xf6\xa5\xd1\xd2\xc5\xe7\x1c\xcbZ\x1a1bXa^\xef\'l\xc5\xf7\xc4\xb54\x1a\xda\x1c\x06\x93\xfd\xe0\xf1\xf3_>vFF\x7fVi.\x8fP;V\xed\x08\xfd\xce\xbc\xb7G\xaa\xedq\xd5 \x1a\x9e8^\xdd\xb8\x87\x07`<\xcf\xd7z+\xf3\x16\x00\x00\x00t\x00|\x00\x83\x01\\\x02}\x01}\x02d\x01\xa0\x01|\x01\xa1\x01S\x00\xf3f\x00\x00\x00g\x00}\x02|\x02|\x00d\x01\x19\x00t\x00|\x01\x83\x01d\x02@\x00A\x00g\x017\x00}\x02t\x01|\x00d\x03d\x00\x85\x02\x19\x00\x83\x01D\x00]\x17\\\x02}\x03}\x04\x88\x00|\x01|\x00|\x03\x19\x00g\x01\x83\x02}\x01|\x02|\x04t\x00|\x01\x83\x01d\x02@\x00A\x00g\x017\x00}\x02q\x17t\x02|\x02\x83\x01S\x00' l2 = e(e(e(e(e(l2) + e(i(open('chall.py').read())))))) e2 = open('chall.flag', 'rb') I = b'' while True: i = e2.read(3) if (i := int.from_bytes(i, 'big')) == 0: break I += l['e_old'](e2.read(i), l2) l2 = l['e_old'](l2, l2)
x = marshal.loads(I) dump_pyc('dump2.pyc', x)
# exec(marshal.loads(I))
|