feat: initial push of the files
This commit is contained in:
174
obfuscation.py
Normal file
174
obfuscation.py
Normal file
@@ -0,0 +1,174 @@
|
||||
import os, string, re
|
||||
|
||||
"""
|
||||
Creates :
|
||||
- Random variables (local and globals)
|
||||
- Random operations on globals
|
||||
"""
|
||||
|
||||
def GetRandomBool() :
|
||||
result = os.urandom(3)
|
||||
r= sum(result) < 381.04
|
||||
return r #average
|
||||
|
||||
def GetRandomNumber() :
|
||||
result = os.urandom(4)
|
||||
return int(sum(result))
|
||||
|
||||
def GetRandomRange(a, b):
|
||||
if a > b:
|
||||
a, b = b, a # Swap a and b if a is greater than b
|
||||
|
||||
range_size = b - a + 1 # Calculate the size of the range
|
||||
|
||||
# Calculate the number of bits required to represent all values in the range
|
||||
num_bits = 0
|
||||
while 2 ** num_bits < range_size:
|
||||
num_bits += 1
|
||||
|
||||
# Generate a random number in binary representation using GetRandomBool()
|
||||
random_binary = [GetRandomBool() for _ in range(num_bits)]
|
||||
|
||||
# Convert the binary representation to an integer within the specified range
|
||||
random_integer = 0
|
||||
for i, bit in enumerate(random_binary):
|
||||
random_integer += bit * (2 ** i)
|
||||
|
||||
# Map the generated integer to the desired range [a, b]
|
||||
mapped_value = a + random_integer
|
||||
if mapped_value > b : return GetRandomRange(a, b)
|
||||
|
||||
return mapped_value
|
||||
|
||||
def GetRandomString(l) :
|
||||
letters = string.ascii_lowercase
|
||||
s = ""
|
||||
while len(s) < l :
|
||||
r = GetRandomRange(0, len(letters)-1)
|
||||
s += letters[r]
|
||||
|
||||
return s
|
||||
|
||||
types = ["short", "unsigned short", "int", "unsigned int", "long", "unsigned long", "float", "double"]
|
||||
operations = ["-", "+", "^", "*", "/"]
|
||||
global_vars = {}
|
||||
functions = []
|
||||
in_func = False
|
||||
|
||||
def GetRandomVar() :
|
||||
global global_vars
|
||||
global in_func
|
||||
vtype = types[GetRandomRange(0, len(types)-1)]
|
||||
vname = GetRandomString(10)
|
||||
t = vtype + " " + vname + " = "
|
||||
|
||||
val = str(GetRandomNumber())
|
||||
if vtype == "float" or vtype == "double" : val = str(GetRandomNumber())+"."+str(GetRandomNumber())
|
||||
if vtype == "float" : val += "f"
|
||||
res = t + val + ";"
|
||||
|
||||
if not in_func :
|
||||
global_vars[vname] = vtype
|
||||
|
||||
return res
|
||||
|
||||
def GetRandomOperation() :
|
||||
global global_vars
|
||||
vars_ = list(global_vars.items())
|
||||
if len(vars_) < 1 : return ""
|
||||
|
||||
v1 = vars_[GetRandomRange(0, len(vars_)-1)]
|
||||
|
||||
op = operations[GetRandomRange(0, len(operations)-1)]
|
||||
res = ""
|
||||
res += v1[0] + " " + op + "= "
|
||||
|
||||
vtype = v1[1]
|
||||
val = str(GetRandomNumber())
|
||||
if vtype == "float" or vtype == "double" :
|
||||
if op == "^" : return GetRandomOperation()
|
||||
val = str(GetRandomNumber())+"."+str(GetRandomNumber())
|
||||
if vtype == "float" : val += "f"
|
||||
|
||||
res += val + ";"
|
||||
return res
|
||||
|
||||
def GetRandomFunction() :
|
||||
global functions
|
||||
name = GetRandomString(6)
|
||||
functions.append(name)
|
||||
|
||||
body = "int "+name+"(const char* a1) {\n"
|
||||
body += f"\tint bb = {GetRandomNumber()};\n"
|
||||
body += "\tfor (int i = 0; i < 10; i++) {\n\t\tCreateMutexA(NULL, false, a1);\n\t\tbb++;\n\t}\n\treturn bb;\n}"
|
||||
|
||||
return body
|
||||
|
||||
def CallRandomFunction() :
|
||||
global functions
|
||||
if len(functions) < 1 : return ""
|
||||
|
||||
sub = functions[GetRandomRange(0, len(functions)-1)]
|
||||
return "int " + GetRandomString(6) + " = " + sub + "(\""+GetRandomString(5)+"\");"
|
||||
|
||||
def obfuscate(PASS) :
|
||||
global global_vars
|
||||
global functions
|
||||
global in_func
|
||||
dont = ["for", "if", "else", "while"]
|
||||
func_def_pattern = r'\b\w+\s+\w+\s*\([^)]*\)\s*'
|
||||
|
||||
f = open("DO_NOT_TOUCH.cpp", "r")
|
||||
o = open("main.cpp", "w")
|
||||
|
||||
lines = f.readlines()
|
||||
for k in range(PASS) :
|
||||
in_comment = False
|
||||
in_switch = False
|
||||
in_asm = False
|
||||
in_func_delay = False
|
||||
global_vars = {}
|
||||
functions = []
|
||||
out = []
|
||||
for line in lines :
|
||||
out.append(line)
|
||||
|
||||
if in_func_delay and "}" in line :
|
||||
in_func = False
|
||||
in_func_delay = False
|
||||
elif in_func_delay : continue
|
||||
|
||||
if "//START" in line : in_func = True
|
||||
if "/*" in line : in_comment = True
|
||||
elif "*/" in line : in_comment = False
|
||||
if "switch" in line : in_switch = True
|
||||
elif in_switch and "}" in line : in_switch = False
|
||||
if "__asm" in line : in_asm = True
|
||||
elif in_asm and "}" in line : in_asm = False
|
||||
skip = False
|
||||
for w in dont :
|
||||
if w in line : skip = True
|
||||
if skip : continue
|
||||
|
||||
a = "{" in line or "}" in line or "#" in line
|
||||
b = re.search(func_def_pattern, line) != None
|
||||
|
||||
if b or a or in_comment or in_switch or in_asm : continue # we can't write
|
||||
|
||||
if GetRandomBool() : # do we create a variable ?
|
||||
out.append(GetRandomVar()+"\n")
|
||||
|
||||
if GetRandomBool() and in_func : # do we do an operation on globals ?
|
||||
out.append(GetRandomOperation()+"\n")
|
||||
|
||||
if GetRandomBool() and not in_func : # do we create a function ?
|
||||
out.append(GetRandomFunction()+"\n")
|
||||
|
||||
if GetRandomBool() and in_func : # do we call a function ?
|
||||
out.append(CallRandomFunction()+"\n")
|
||||
|
||||
if "//END" in line : in_func_delay = True
|
||||
|
||||
lines = out
|
||||
|
||||
o.writelines(out)
|
||||
Reference in New Issue
Block a user