Tags: crypto
Rating:
```
import decimal
from Crypto.Util.number import *
def ungantunex(x, length=6):
    if len(long_to_bytes(x)) <= length:
        try:
            return long_to_bytes(x).decode('utf8')
        except UnicodeDecodeError:
            pass
    x = decimal.Decimal(x)
    root = int(x.sqrt(context=decimal.Context(prec=300)))
    pad = int(x) - (root ** 2)
    if pad > root:
        pad -= root
        return ungantunex(root, length), ungantunex(pad, length)
    return ungantunex(pad, length), ungantunex(root, length)
f = open('flag.enc', 'rb')
print(ungantunex(bytes_to_long(f.read()), 6))
f.close()
```
after run, we got this :
```
(((('m0rE_e', '_P41RI'), 'SUSEC{'), 'ct1ON}'), ('L39An7', 'NG_fUn'))
```
with some brute force on permutations we can find the flag:
```
SUSEC{m0rE_eL39An7_P41RING_fUnct1ON}
```