Files
Python-Obfuscation/utils/junk_gen.py
T
zack3d 69184c7cb8
Doxygen to Wiki / Build Doxygen and publish to Wiki (push) Failing after 1m0s
da
2025-08-15 21:06:31 -07:00

71 lines
3.5 KiB
Python

"""
@file utils/junk_gen.py
@brief Junk code generation utilities for OMG-Fuscator.
@details Generates random noise statements and multi-line snippets for obfuscation.
"""
import random
import string
from utils.name_gen import NameGenerator
class JunkGenerator:
"""
@brief Produces pseudo-random junk code.
@param name_generator Name generator used for variable identifiers.
"""
def __init__(self, name_generator: NameGenerator):
"""
@brief Constructor.
@param name_generator NameGenerator instance used to create junk variable names.
"""
self.name_generator = name_generator
def add_junk(self) -> str:
"""
@brief Generate a random multi-line junk code snippet.
@return Python source string with one or more lines.
"""
var1 = self.name_generator.generate_name()
var2 = self.name_generator.generate_name()
example_strings = ["HelloWorld", "CryptoMagic", "XxX_Obf_42", "DataStorm", "RandomStr", "TestString"]
s1 = random.choice(example_strings)
s2 = random.choice(example_strings)
multi_line_junks = [
f"{var1} = chr({random.randint(65, 90)}) + chr({random.randint(65, 90)})",
f"{var1} = sum([{random.randint(1,10)} for _ in range({random.randint(1,5)})])",
f"{var1} = len(bytes([{random.randint(65,90)}, {random.randint(65,90)}, {random.randint(65,90)}]))",
f"if chr({random.randint(65,90)}).isupper(): {var1} = {random.randint(0, 999)}",
f"{var1} = bytes([{random.randint(65,90)}] * {random.randint(1,3)})",
f"{var1} = ord(chr({random.randint(65,90)})) - {random.randint(1,10)}",
f"{var1} = '{s1}'.lower()\n{var2} = '{s2}'.upper()",
f"{var1} = [chr(random.randint(65,90)) for _ in range({random.randint(2,5)})]\n{var2} = ''.join({var1})",
f"{var1} = {random.randint(1,10)} ** {random.randint(1,3)}\n{var2} = {var1} % {random.randint(1,10)}",
f"{var1} = [{random.randint(1,5)} for _ in range({random.randint(3,5)})]\nif len({var1}) > {random.randint(1,4)}: {var2} = sum({var1})",
f"{var1} = {{ {random.randint(1,10)} : '{s1}' }}\n{var2} = {var1}.get({random.randint(1,10)}, None)",
f"{var1} = set(range({random.randint(2,5)}))\n{var2} = set(range({random.randint(2,5)}))\n{var1}.intersection({var2})"
]
return random.choice(multi_line_junks)
def generate_junk(self) -> str:
"""
@brief Generate a single-line junk statement.
@return Python source string for a single assignment or expression.
"""
var_name = self.name_generator.generate_name()
junk_code = [
f"{var_name} = {random.randint(0, 100)}",
f"{var_name} = '{''.join(random.choices(string.ascii_letters, k=10))}'",
f"{var_name} = {random.randint(0, 100)} + {random.randint(0, 100)}",
f"{var_name} = {random.randint(0, 100)} * {random.randint(0, 100)}",
f"{var_name} = {random.randint(0, 100)} - {random.randint(0, 100)}",
f"{var_name} = {random.randint(0, 100)} / {random.randint(1, 100)}",
f"{var_name} = '{''.join(random.choices(string.ascii_letters + string.digits, k=15))}'",
f"{var_name} = {random.randint(0, 100)} % {random.randint(1, 100)}",
f"{var_name} = {random.randint(0, 100)} ** {random.randint(0, 5)}",
f"{var_name} = {random.randint(0, 100)} // {random.randint(1, 100)}"
]
return random.choice(junk_code)