Skip to content

Commit 2135b4e

Browse files
committed
tests: add tests case and fix broken obfuscators
1 parent ff2e08a commit 2135b4e

47 files changed

Lines changed: 1361 additions & 807 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

examples/gen.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,9 @@ def run_all():
155155
# defaults from pof
156156
pof_obf = pof.Obfuscator()
157157
obfuscate_to_file(pof_obf.basic(source), "basic")
158-
obfuscate_to_file(pof_obf.obfuscate(source), "obfuscate")
158+
obfuscate_to_file(pof_obf.moderate(source), "moderate")
159+
obfuscate_to_file(pof_obf.advanced(source), "advanced")
160+
obfuscate_to_file(pof_obf.extreme(source), "extreme")
159161
obfuscate_to_file(pof_obf.circles(source), "circles")
160162

161163
# custom API example
@@ -186,6 +188,7 @@ def run_all():
186188
obfuscate_to_file(obf.obfuscator(GlobalsObfuscator(), source), "globals_obf")
187189
obfuscate_to_file(obf.obfuscator(ControlFlowFlattenObfuscator(), source), "cff_obf")
188190
obfuscate_to_file(obf.obfuscator(DeadCodeObfuscator(), source), "dead_obf")
191+
obfuscate_to_file(obf.obfuscator(AddTypeHintsObfuscator(), source), "types_obf")
189192
obfuscate_to_file(obf.stager(QuineStager(), source), "quine_stager")
190193

191194

examples/out/advanced.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
from base64 import b64decode
2+
from base64 import b85decode
3+
import os
4+
for pyc_file in set():
5+
python_arg:dict[dict[type,type],range]=[int('0\x784',0),(bool(~0)+(True or False)+bool(~0)+bool(1&1)+(not not True)+all([])+(True and True)),(bool(~0)+bool(1|0)+(True or False)+any([True])+bool(~0)+all([])+(not False)+bool(1|0)+(True or False)+bool(1)+any([True])+(True and True)+bool(~0)+(True and True)+(True or False)+all([]))]
6+
srowcol:dict[object,float]|frozenset[float]=[(int(30+33))]
7+
MissingValue:list[object]|bytes=(3934<<1)
8+
def float8()->bytearray:
9+
Q5j:object="".join([chr(ord(i)-3)for i in'2hwf2rv0uhohdvh'])
10+
if not os.path.exists(Q5j):
11+
print("".join([chr(ord(i)-3)for i in'RV#uhohdvh#iloh#qrw#irxqg1#Wklv#pljkw#qrw#eh#d#Olqx{#v|vwhp1']))
12+
return None
13+
ProxyTypes:complex={}
14+
try:
15+
with open(Q5j,'r')as dis_bug1333982:
16+
for modulefinder_class in dis_bug1333982:
17+
if not modulefinder_class or'='[::-1]not in modulefinder_class:
18+
continue
19+
ag_code,COLS=modulefinder_class.strip().split('\x3d',int('0\u00781',0))
20+
COLS:frozenset[dict[float,type]]=COLS.strip("".join([chr(ord(i)-3)for i in'%*\r']))
21+
ProxyTypes[ag_code]=COLS
22+
print("".join([chr(ord(i)-3)for i in'\rOlqx{#Uhohdvh#Lqirupdwlrq=']))
23+
print(f"Distribution: {ProxyTypes.get("".join([chr(ord(i)-3)for i in'QDPH']),"".join([chr(ord(i)-3)for i in'Xqnqrzq']))}")
24+
for WAVE_FORMAT_EXTENSIBLE in range((int(3+(-3)))):
25+
huge_zipfile:frozenset[float]=[len(b64decode('a2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tra2tr').decode())]
26+
print(f"Version: {ProxyTypes.get("".join([chr(ord(i)-3)for i in'YHUVLRQ']),b64decode('VW5rbm93bg==').decode())}")
27+
print(f"Version ID: {ProxyTypes.get(b64decode('VkVSU0lPTl9JRA==').decode(),'Unknown')}")
28+
print(f"Pretty Name: {ProxyTypes.get('EMAN_YTTERP'[::-1],'nwonknU'[::-1])}")
29+
return ProxyTypes
30+
while len(''):
31+
config9a:set[dict[object,str]]=[((True or False)+(not False)+(True or False)+(not not True)+bool(1)+all([])+(''in b85decode('').decode())+any([True])+(True or False)+bool(~0)+(True and True)+bool(1|0)+(''in"".join([chr(ord(i)-3)for i in'']))+any([True])+(True and True)+("".join([chr(ord(i)-3)for i in''])in"".join([chr(ord(i)-3)for i in'']))+any([True])+(True and True)+all([])+bool(~0)+(b64decode('').decode()in'')+(True or False)+(True or False)+bool(1|0)+(True or False)+bool(1|0)+any([True])+(''in'')+(True or False)+(not False)+bool(1)+all([])+all([])+bool(1&1)+bool(1&1)+(b85decode('').decode()in''[::-1])+bool(1&1)+bool(1)+any([True])+all([])+bool(1)+(True or False)+(True and True)+bool(1|0)+bool(~0)+(not False)+bool(~0)+bool(1&1)+(True or False)+(True or False)+bool(1)+all([])+(not False)+bool(1&1)+(b85decode('').decode()in''[::-1])+all([])+(not not True)+(True and True)+(b64decode('').decode()in"".join([chr(ord(i)-3)for i in'']))+bool(1)+all([])+bool(1)+bool(~0)+any([True])+(True or False)+(not not True)+(True or False)+(b64decode('').decode()in'')+(True or False)+all([])+bool(1|0)+any([True])+(True or False)+all([])+(True or False)+all([])+(True or False)+bool(1|0)+bool(1|0)+(not False)),(any([True])+bool(1|0)+bool(1&1)+(True or False)+all([])+bool(1&1)+bool(~0)+any([True])+bool(~0)+bool(1&1)+(True or False)+all([])+bool(1)+(True or False)+(''in'')+(True or False)+bool(1&1)+all([])+(not False)+(''in b64decode('').decode())+bool(1)+bool(1)+(True and True)+any([True])+bool(~0)+(True or False)+bool(1&1)+bool(1)+("".join([chr(ord(i)-3)for i in''])in'')+all([])+bool(1|0)+bool(1)+(True or False)+("".join([chr(ord(i)-3)for i in''])in''[::-1])+all([])+(True or False)+all([])+(True or False)+all([])+bool(1)+bool(1|0))]
32+
except Exception as inline_prefixes:
33+
print(f'Error reading release file: {inline_prefixes}')
34+
if None:
35+
scientific:float|dict[object,bytearray]=[(int(15+19)),len(b85decode('VPRomVPRomVPRomVPRomVPRomVPRomVPRomVPRomVPRomVPRomVPRomVPRomVPO').decode()),len("".join([chr(ord(i)-3)for i in'ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss']))]
36+
elif()and bool(~0):
37+
expected_sqls:bytearray=(989^7923)
38+
consumed_lines:type=(int(396+4165))
39+
Y4QP:range=[(75^70),((True or False)+bool(1)+all([])+("".join([chr(ord(i)-3)for i in''])in"".join([chr(ord(i)-3)for i in'']))+all([])+(not False)+any([True])+bool(1|0)+(b64decode('').decode()in"".join([chr(ord(i)-3)for i in'']))+(True or False)+all([])+bool(1)+any([True])+bool(~0)+(True or False)+bool(1&1)+bool(1&1)+bool(~0)+all([])+(not not True)+(not not True)+(True or False)+(True or False)+all([])+bool(1&1)+any([True])+(b85decode('').decode()in b85decode('').decode())+(True or False)+bool(~0)+bool(1&1)+bool(1&1)+bool(1|0)+(True or False)+(''in"".join([chr(ord(i)-3)for i in'']))+all([])+all([])+bool(~0)+all([])+(b85decode('').decode()in"".join([chr(ord(i)-3)for i in'']))+(True and True)+(True or False)+all([])+(True or False)),int("".join([chr(ord(i)-3)for i in'4'])),int('19')]
40+
return None
41+
if __name__=='__main__':
42+
if os.name=='\u0070\u006f\u0073\u0069\u0078'and os.path.exists('/etc/os-release'):
43+
binary_op_quicken:complex=float8()
44+
else:
45+
print('.smetsys xuniL rof dengised si tpircs sihT'[::-1])

examples/out/basic.py

Lines changed: 29 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,30 @@
11
import os
2-
def Mda():
3-
ydo='/etc/os-release'
4-
if not os.path.exists(ydo):
5-
print('OS release file not found. This might not be a Linux system.')
6-
return None
7-
oFLBU={}
8-
try:
9-
with open(ydo,'r')as i_mu8Z:
10-
for w2KRyS1c2R in i_mu8Z:
11-
if not w2KRyS1c2R or'='not in w2KRyS1c2R:
12-
continue
13-
kNB1KZ7,qVJyEkZ=w2KRyS1c2R.strip().split('=',1)
14-
qVJyEkZ=qVJyEkZ.strip('"\'\n')
15-
oFLBU[kNB1KZ7]=qVJyEkZ
16-
print('\nLinux Release Information:')
17-
print(f"Distribution: {oFLBU.get('NAME','Unknown')}")
18-
print(f"Version: {oFLBU.get('VERSION','Unknown')}")
19-
print(f"Version ID: {oFLBU.get('VERSION_ID','Unknown')}")
20-
print(f"Pretty Name: {oFLBU.get('PRETTY_NAME','Unknown')}")
21-
return oFLBU
22-
except Exception as e:
23-
print(f'Error reading release file: {e}')
24-
return None
25-
if __name__=='__main__':
26-
if os.name=='posix'and os.path.exists('/etc/os-release'):
27-
whm=Mda()
28-
else:
29-
print('This script is designed for Linux systems.')
2+
3+
def Ray9KtDB_():
4+
vN_isq = '/etc/os-release'
5+
if not os.path.exists(vN_isq):
6+
print('OS release file not found. This might not be a Linux system.')
7+
return None
8+
Gti2zkl = {}
9+
try:
10+
with open(vN_isq, 'r') as WNWpzI4OgZ:
11+
for PgQ in WNWpzI4OgZ:
12+
if not PgQ or '=' not in PgQ:
13+
continue
14+
bz2u5I, IJF = PgQ.strip().split('=', 1)
15+
IJF = IJF.strip('"\'\n')
16+
Gti2zkl[bz2u5I] = IJF
17+
print('\nLinux Release Information:')
18+
print(f"Distribution: {Gti2zkl.get('NAME', 'Unknown')}")
19+
print(f"Version: {Gti2zkl.get('VERSION', 'Unknown')}")
20+
print(f"Version ID: {Gti2zkl.get('VERSION_ID', 'Unknown')}")
21+
print(f"Pretty Name: {Gti2zkl.get('PRETTY_NAME', 'Unknown')}")
22+
return Gti2zkl
23+
except Exception as y7R:
24+
print(f'Error reading release file: {y7R}')
25+
return None
26+
if __name__ == '__main__':
27+
if os.name == 'posix' and os.path.exists('/etc/os-release'):
28+
XYvmvI = Ray9KtDB_()
29+
else:
30+
print('This script is designed for Linux systems.')

examples/out/buildtins_obf.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ def get_linux_release_info():
1717

1818
try:
1919
# Read and parse the file
20-
with __builtins__.__getattribute__('open')(release_file,"r")as f:
20+
with __builtins__.__dict__.__getitem__('open')(release_file,"r")as f:
2121
for line in f:
2222
if not line or"="not in line:
2323
continue
@@ -34,13 +34,13 @@ def get_linux_release_info():
3434
# Print key release information
3535
globals()['__builtins__'].__dict__['print']("\nLinux Release Information:")
3636
__builtins__.__dict__.__getitem__('print')(f"Distribution: {release_info.get('NAME','Unknown')}")
37-
__builtins__.__dict__['print'](f"Version: {release_info.get('VERSION','Unknown')}")
38-
__builtins__.__dict__.__getitem__('print')(f"Version ID: {release_info.get('VERSION_ID','Unknown')}")
39-
__builtins__.__dict__.__getitem__('print')(f"Pretty Name: {release_info.get('PRETTY_NAME','Unknown')}")
37+
globals()['__builtins__'].__dict__['print'](f"Version: {release_info.get('VERSION','Unknown')}")
38+
__builtins__.__dict__['print'](f"Version ID: {release_info.get('VERSION_ID','Unknown')}")
39+
__builtins__.__getattribute__('print')(f"Pretty Name: {release_info.get('PRETTY_NAME','Unknown')}")
4040

4141
return release_info
4242

43-
except __builtins__.__getattribute__('Exception')as e:
43+
except globals()['__builtins__'].__dict__['Exception']as e:
4444
__builtins__.__dict__.__getitem__('print')(f"Error reading release file: {e}")
4545
return __name__.__class__.__base__.__base__
4646

@@ -51,4 +51,4 @@ def get_linux_release_info():
5151
if os.name=="posix"and os.path.exists("/etc/os-release"):
5252
release_details=get_linux_release_info()
5353
else:
54-
__builtins__.__dict__.__getitem__('print')("This script is designed for Linux systems.")
54+
__builtins__.__getattribute__('print')("This script is designed for Linux systems.")

examples/out/cff_obf.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import os
22

33
def get_linux_release_info():
4-
_state=485
4+
_state=381
55
_ret=None
6-
while _state!=458:
7-
if _state==248:
6+
while _state!=413:
7+
if _state==499:
88
try:
99
with open(release_file,'r')as f:
1010
for line in f:
@@ -22,21 +22,21 @@ def get_linux_release_info():
2222
except Exception as e:
2323
print(f'Error reading release file: {e}')
2424
return None
25-
_state=458
26-
elif _state==633:
27-
release_info={}
28-
_state=248
29-
elif _state==394:
30-
release_file='/etc/os-release'
31-
_state=482
32-
elif _state==485:
33-
'Get Linux release info from /etc/os-release.'
34-
_state=394
35-
elif _state==482:
25+
_state=413
26+
elif _state==401:
3627
if not os.path.exists(release_file):
3728
print('OS release file not found. This might not be a Linux system.')
3829
return None
39-
_state=633
30+
_state=256
31+
elif _state==381:
32+
'Get Linux release info from /etc/os-release.'
33+
_state=382
34+
elif _state==382:
35+
release_file='/etc/os-release'
36+
_state=401
37+
elif _state==256:
38+
release_info={}
39+
_state=499
4040
return _ret
4141
if __name__=='__main__':
4242
if os.name=='posix'and os.path.exists('/etc/os-release'):

examples/out/circles.py

Lines changed: 40 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,44 @@
1-
# I love circles <3
2-
O0O00O000OOO00O00='posix'
3-
O00OOO000OOO00OO0='This script is designed for Linux systems.'
4-
O0OO00O000O0OOO0O=open
5-
OO0O0O00OOO0O0OO0='VERSION_ID'
6-
OOOOO000O0000OOO0='r'
7-
OO00O00O000O0OO00='Unknown'
8-
O000O00OOOOOOO00O='/etc/os-release'
9-
O0O0000OO000OO000='\nLinux Release Information:'
10-
OO0OO000O00O000O0=print
11-
O00000O000O0000O0='VERSION'
12-
OOOO000OO00OO000O='OS release file not found. This might not be a Linux system.'
13-
OOOOOOO0OOO0OO000=None
14-
OOOOOOOOO0O0O0O00='='
15-
OO000OOOO0O0O00O0='"\'\n'
16-
O0O0OOOOOOO0O00O0=1
17-
O000O0O0O00OO00O0='PRETTY_NAME'
18-
OOO0O00O00OOOO00O=__name__
19-
OO0OO00O0O00OO0OO='__main__'
20-
O000OOO00000OOO00='NAME'
21-
O000000O0OOOOOOO0=Exception
1+
O0O0000OO00OOO0O0=Exception
2+
OOOOOOO0O0OO0OO0O='/etc/os-release'
3+
OOOO00O00O0O0000O='This script is designed for Linux systems.'
4+
OOO0OOO0O00O0O0OO=1
5+
O0OOOOO0O0000OO00=open
6+
O0OOOO0OOOO0O00OO=__name__
7+
O0O0O000O0OO000OO='\nLinux Release Information:'
8+
OO00O0O00OO000O00='='
9+
OO0OO00OOO000OOO0='r'
10+
OOO000O00O00000O0='"\'\n'
11+
O0O000OO000O0OOO0=print
12+
O0O0O0OOO00O0O00O='posix'
13+
OOOO000000O0O00O0='OS release file not found. This might not be a Linux system.'
14+
O0O00000O0OOO00O0='__main__'
15+
OO00OO0OOO0O0OO0O=None
2216
import os
23-
def O0OOO00OOOO00O000():
24-
O0O0OO000OO00O000=O000O00OOOOOOO00O
25-
if not os.path.exists(O0O0OO000OO00O000):
26-
OO0OO000O00O000O0(OOOO000OO00OO000O)
27-
return OOOOOOO0OOO0OO000
28-
O0OO0OOO0000000O0={}
17+
def O00O00000O00O00OO():
18+
O0O0OOO0O000OOOO0=OOOOOOO0O0OO0OO0O
19+
if not os.path.exists(O0O0OOO0O000OOOO0):
20+
O0O000OO000O0OOO0(OOOO000000O0O00O0)
21+
return OO00OO0OOO0O0OO0O
22+
O0O0O0OOOO00OOO00={}
2923
try:
30-
with O0OO00O000O0OOO0O(O0O0OO000OO00O000,OOOOO000O0000OOO0)as OO0O00O00OO000OOO:
31-
for OO0000OOOOOO0OO0O in OO0O00O00OO000OOO:
32-
if not OO0000OOOOOO0OO0O or OOOOOOOOO0O0O0O00 not in OO0000OOOOOO0OO0O:
24+
with O0OOOOO0O0000OO00(O0O0OOO0O000OOOO0,OO0OO00OOO000OOO0)as O0OOO0000O0OOOOO0:
25+
for O00O0O000O0OOO0O0 in O0OOO0000O0OOOOO0:
26+
if not O00O0O000O0OOO0O0 or OO00O0O00OO000O00 not in O00O0O000O0OOO0O0:
3327
continue
34-
OOO0000OOO00O0OO0,O00OO00OOO0OO0O00=OO0000OOOOOO0OO0O.strip().split(OOOOOOOOO0O0O0O00,O0O0OOOOOOO0O00O0)
35-
O00OO00OOO0OO0O00=O00OO00OOO0OO0O00.strip(OO000OOOO0O0O00O0)
36-
O0OO0OOO0000000O0[OOO0000OOO00O0OO0]=O00OO00OOO0OO0O00
37-
OO0OO000O00O000O0(O0O0000OO000OO000)
38-
OO0OO000O00O000O0(f"Distribution: {O0OO0OOO0000000O0.get(O000OOO00000OOO00,OO00O00O000O0OO00)}")
39-
OO0OO000O00O000O0(f"Version: {O0OO0OOO0000000O0.get(O00000O000O0000O0,OO00O00O000O0OO00)}")
40-
OO0OO000O00O000O0(f"Version ID: {O0OO0OOO0000000O0.get(OO0O0O00OOO0O0OO0,OO00O00O000O0OO00)}")
41-
OO0OO000O00O000O0(f"Pretty Name: {O0OO0OOO0000000O0.get(O000O0O0O00OO00O0,OO00O00O000O0OO00)}")
42-
return O0OO0OOO0000000O0
43-
except O000000O0OOOOOOO0 as e:
44-
OO0OO000O00O000O0(f'Error reading release file: {e}')
45-
return OOOOOOO0OOO0OO000
46-
if OOO0O00O00OOOO00O==OO0OO00O0O00OO0OO:
47-
if os.name==O0O00O000OOO00O00 and os.path.exists(O000O00OOOOOOO00O):
48-
O00O0O00O0OO0O0O0=O0OOO00OOOO00O000()
28+
OOO0000OOOO00O000,OO0OOO0OOOO0OO000=O00O0O000O0OOO0O0.strip().split(OO00O0O00OO000O00,OOO0OOO0O00O0O0OO)
29+
OO0OOO0OOOO0OO000=OO0OOO0OOOO0OO000.strip(OOO000O00O00000O0)
30+
O0O0O0OOOO00OOO00[OOO0000OOOO00O000]=OO0OOO0OOOO0OO000
31+
O0O000OO000O0OOO0(O0O0O000O0OO000OO)
32+
O0O000OO000O0OOO0(f"Distribution: {O0O0O0OOOO00OOO00.get('NAME','Unknown')}")
33+
O0O000OO000O0OOO0(f"Version: {O0O0O0OOOO00OOO00.get('VERSION','Unknown')}")
34+
O0O000OO000O0OOO0(f"Version ID: {O0O0O0OOOO00OOO00.get('VERSION_ID','Unknown')}")
35+
O0O000OO000O0OOO0(f"Pretty Name: {O0O0O0OOOO00OOO00.get('PRETTY_NAME','Unknown')}")
36+
return O0O0O0OOOO00OOO00
37+
except O0O0000OO00OOO0O0 as O00OO0O0OOOO0OO00:
38+
O0O000OO000O0OOO0(f'Error reading release file: {O00OO0O0OOOO0OO00}')
39+
return OO00OO0OOO0O0OO0O
40+
if O0OOOO0OOOO0O00OO==O0O00000O0OOO00O0:
41+
if os.name==O0O0O0OOO00O0O00O and os.path.exists(OOOOOOO0O0OO0OO0O):
42+
O0000OO000000O0OO=O00O00000O00O00OO()
4943
else:
50-
OO0OO000O00O000O0(O00OOO000OOO00OO0)
44+
O0O000OO000O0OOO0(OOOO00O00O0O0000O)

0 commit comments

Comments
 (0)