Created
June 14, 2019 05:03
-
-
Save WitherOrNot/7c346dc7b7dde4a930cb00db39f5b22a to your computer and use it in GitHub Desktop.
obfuscates python code to only use 8 characters, aside from one pre-defined function
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 8 characters: _ ~ + , ( ) [ ] and 1 function | |
# code.py is the original code | |
# obf.py is the obfuscated code | |
def _(s=None,a=0): | |
if isinstance(s, str): | |
try: | |
if a == 0: | |
exec(s) | |
elif a == 1: | |
return eval(s) | |
except Exception as e: | |
return repr(e) | |
elif s == 0: | |
return '0' | |
elif s == None: | |
return True | |
elif s == -2: | |
return False | |
elif s == False: | |
return None | |
else: | |
return str(s) | |
def nto_(n): | |
return ("_()+"*n)[:-1] if n > 0 else "~_()+~~_()+~~_()" | |
def pnto_(n): | |
l = str(n) | |
t = [] | |
if n == 1: | |
return "_(~(~_()+_())+_())" | |
for i in range(len(l)): | |
t.append("_("+nto_(int(l[i]))+")") | |
return '+'.join(t) | |
def sto_(s): | |
t = [] | |
for i in s: | |
if i in ['(', ')', '[', ']']: | |
t.append("_([()])["+nto_(_([()]).index(i))+"]") | |
elif i in ['e', 'r']: | |
t.append("_(_(_)[_()])["+nto_(_(_(_)[_()]).index(i))+"]") | |
elif i in ['a', ' ', 'c', 'f', 'o', 'n', 'i', '_']: | |
t.append("_(_)["+nto_(_(_).index(i))+"]") | |
elif i in ['g', ',']: | |
t.append("_(_(())[_()])["+nto_(_(_(())[_()]).index(i))+"]") | |
elif i in "0123456789": | |
t.append(pnto_(int(i))) | |
elif i == "h": | |
t.append("_(_(_)[_()+_()+_()+_()+_()+_()+_()+_()+_()+_()]+_([()])[_()]+_(_)[_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()]+_(_)[_()+_()+_()+_()+_()+_()+_()+_()+_()]+_(_)[_()]+_(_)[_()+_()+_()+_()+_()+_()+_()]+_(_(_)[_()])[_()+_()+_()+_()+_()]+_(_)[_()+_()+_()+_()+_()+_()+_()+_()+_()]+_(_)[_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()]+_(_)[_()+_()+_()+_()+_()+_()+_()+_()+_()]+_(_)[_()+_()+_()+_()+_()+_()]+_(_)[_()+_()+_()]+_(_)[_()+_()+_()+_()+_()+_()+_()+_()+_()]+_([()])[~_()+~~_()+~~_()]+_([()])[_()+_()+_()]+_(_(())[_()])[_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()]+_(_)[_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()]+_([()])[_()+_()])["+nto_(48)+"]") | |
else: | |
t.append("_(_([()])[~_()+~~_()+~~_()]+_(_)[_()+_()+_()+_()]+_(_(_)[_()+_()+_()+_()+_()+_()+_()+_()+_()+_()]+_([()])[_()]+_(_)[_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()]+_(_)[_()+_()+_()+_()+_()+_()+_()+_()+_()]+_(_)[_()]+_(_)[_()+_()+_()+_()+_()+_()+_()]+_(_(_)[_()])[_()+_()+_()+_()+_()]+_(_)[_()+_()+_()+_()+_()+_()+_()+_()+_()]+_(_)[_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()]+_(_)[_()+_()+_()+_()+_()+_()+_()+_()+_()]+_(_)[_()+_()+_()+_()+_()+_()]+_(_)[_()+_()+_()]+_(_)[_()+_()+_()+_()+_()+_()+_()+_()+_()]+_([()])[~_()+~~_()+~~_()]+_([()])[_()+_()+_()]+_(_(())[_()])[_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()]+_(_)[_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()]+_([()])[_()+_()])[_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()]+_(_(_)[_()])[_()+_()+_()+_()+_()]+_([()])[_()]+_(_)[_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()]+_([()])[_()+_()]+_(_)[_()+_()+_()+_()+_()+_()+_()+_()+_()]+_(_)[_()]+_(_)[_()+_()+_()+_()+_()+_()+_()]+_(_(_)[_()])[_()+_()+_()+_()+_()]+_(_)[_()+_()+_()+_()+_()+_()+_()+_()+_()]+_(_)[_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()]+_(_)[_()+_()+_()+_()+_()+_()+_()+_()+_()]+_(_)[_()+_()+_()+_()+_()+_()]+_(_)[_()+_()+_()]+_(_)[_()+_()+_()+_()+_()+_()+_()+_()+_()]+_(_(_)[_()])[_()+_()+_()+_()+_()]+_(_)[_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()]+_(_)[_()+_()+_()]+_(_(())[_()])[_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()+_()]+_(_(_)[_()])[_()+_()+_()]+_([()])[_()]+_(_()+_())+_(_()+_()+_()+_()+_())+_(_()+_()+_()+_()+_()+_())+_([()])[_()+_()]+_([()])[_()+_()+_()],_())["+nto_(['\x00', '\x01', '\x02', '\x03', '\x04', '\x05', '\x06', '\x07', '\x08', '\t', '\n', '\x0b', '\x0c', '\r', '\x0e', '\x0f', '\x10', '\x11', '\x12', '\x13', '\x14', '\x15', '\x16', '\x17', '\x18', '\x19', '\x1a', '\x1b', '\x1c', '\x1d', '\x1e', '\x1f', ' ', '!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', '\x7f', '\x80', '\x81', '\x82', '\x83', '\x84', '\x85', '\x86', '\x87', '\x88', '\x89', '\x8a', '\x8b', '\x8c', '\x8d', '\x8e', '\x8f', '\x90', '\x91', '\x92', '\x93', '\x94', '\x95', '\x96', '\x97', '\x98', '\x99', '\x9a', '\x9b', '\x9c', '\x9d', '\x9e', '\x9f', '\xa0', '\xa1', '\xa2', '\xa3', '\xa4', '\xa5', '\xa6', '\xa7', '\xa8', '\xa9', '\xaa', '\xab', '\xac', '\xad', '\xae', '\xaf', '\xb0', '\xb1', '\xb2', '\xb3', '\xb4', '\xb5', '\xb6', '\xb7', '\xb8', '\xb9', '\xba', '\xbb', '\xbc', '\xbd', '\xbe', '\xbf', '\xc0', '\xc1', '\xc2', '\xc3', '\xc4', '\xc5', '\xc6', '\xc7', '\xc8', '\xc9', '\xca', '\xcb', '\xcc', '\xcd', '\xce', '\xcf', '\xd0', '\xd1', '\xd2', '\xd3', '\xd4', '\xd5', '\xd6', '\xd7', '\xd8', '\xd9', '\xda', '\xdb', '\xdc', '\xdd', '\xde', '\xdf', '\xe0', '\xe1', '\xe2', '\xe3', '\xe4', '\xe5', '\xe6', '\xe7', '\xe8', '\xe9', '\xea', '\xeb', '\xec', '\xed', '\xee', '\xef', '\xf0', '\xf1', '\xf2', '\xf3', '\xf4', '\xf5', '\xf6', '\xf7', '\xf8', '\xf9', '\xfa', '\xfb', '\xfc', '\xfd', '\xfe', '\xff'].index(i))+"]") | |
return "("+'+'.join(t)+")" | |
def cgen(s): | |
r = """def _(s=None,a=0): | |
if isinstance(s, str): | |
try: | |
if a == 0: | |
exec(s) | |
elif a == 1: | |
return eval(s) | |
except Exception as e: | |
return repr(e) | |
elif s == 0: | |
return '0' | |
elif s == None: | |
return True | |
elif s == -2: | |
return False | |
elif s == False: | |
return None | |
else: | |
return str(s) | |
""" | |
r += "\n_("+sto_(s)+")\n" | |
return r | |
inf = open("code.py","r").read() | |
out = open("obf.py","w") | |
out.write(cgen(inf)) | |
raw_input("Press enter to run obfuscated code.") | |
exec(cgen(inf)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment