From eda9b650914f948a779ec937dc63390dea70c8bb Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Sat, 31 Jan 2026 14:13:46 +0000 Subject: [PATCH] 15:13 --- core/__pycache__/obfuscator.cpython-311.pyc | Bin 24407 -> 26498 bytes core/obfuscator.py | 115 ++++++++++++-------- 2 files changed, 72 insertions(+), 43 deletions(-) diff --git a/core/__pycache__/obfuscator.cpython-311.pyc b/core/__pycache__/obfuscator.cpython-311.pyc index ee394f234c6a6289576d2da3e21ad7d63df19f23..fce1ba357785025c1df2df58e8fb26895f6b4890 100644 GIT binary patch literal 26498 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

K$6D+B`OV3Ea9-SpurU}mPU=G7ZsP)KQ&rk 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 QlVe(h$~o$B!jIJd153^R4FCWD diff --git a/core/obfuscator.py b/core/obfuscator.py index 4e842e3..89fa7b0 100644 --- a/core/obfuscator.py +++ b/core/obfuscator.py @@ -2,6 +2,7 @@ import random import string import base64 import json +import hashlib from .parser import Lexer, Parser class LuauVMObfuscator: @@ -16,11 +17,12 @@ class LuauVMObfuscator: ] # Arithmetic keys for opcode decoding - self.k1 = random.randint(100, 500) - self.k2 = random.randint(100, 500) + self.k1 = random.randint(100, 1000) + self.k2 = random.randint(100, 1000) + self.k3 = random.randint(100, 1000) - # Opcode to encoded ID: (real_index + k1) ^ k2 - self.op_to_id = {name: ((self.opcodes.index(name) + self.k1) ^ self.k2) % 1024 for name in self.opcodes} + # Opcode to encoded ID: ((real_index + k1) ^ k2) + k3 + self.op_to_id = {name: (((self.opcodes.index(name) + self.k1) ^ self.k2) + self.k3) % 4096 for name in self.opcodes} # Variable Renaming Map self.var_map = {} @@ -30,22 +32,22 @@ class LuauVMObfuscator: if hint in self.var_map: return self.var_map[hint] - chars = "l1I0O" - new_var = "_" + "".join(random.choice(chars) for _ in range(random.randint(10, 15))) + chars = "lI1" + length = random.randint(32, 64) + new_var = "_" + "".join(random.choice(chars) for _ in range(length)) while new_var in self.used_vars: - new_var = "_" + "".join(random.choice(chars) for _ in range(random.randint(10, 15))) + new_var = "_" + "".join(random.choice(chars) for _ in range(length)) self.used_vars.add(new_var) self.var_map[hint] = new_var return new_var def to_expr(self, n, depth=0): - # Recursively build complex expressions - if depth > 2 or random.random() < 0.1: + if depth > 3 or (depth > 0 and random.random() < 0.15): return str(n) - r = random.randint(1, 1000) - choice = random.choice(['add', 'sub', 'xor', 'mul']) + r = random.randint(1, 2000) + choice = random.choice(['add', 'sub', 'xor', 'mul', 'shl', 'shr', 'not']) if choice == 'add': return f"({self.to_expr(n - r, depth + 1)} + {self.to_expr(r, depth + 1)})" @@ -57,6 +59,13 @@ class LuauVMObfuscator: if n != 0 and n % 2 == 0: return f"({self.to_expr(n // 2, depth + 1)} * {self.to_expr(2, depth + 1)})" return f"({self.to_expr(n, depth + 1)})" + elif choice == 'shl': + # n = (n >> 1) << 1 + (n & 1) + return f"bit32.bor(bit32.lshift({self.to_expr(n >> 1, depth + 1)}, {self.to_expr(1, depth + 1)}), {self.to_expr(n & 1, depth + 1)})" + elif choice == 'shr': + return f"bit32.rshift({self.to_expr(n << 1, depth + 1)}, {self.to_expr(1, depth + 1)})" + elif choice == 'not': + return f"bit32.bnot(bit32.bnot({self.to_expr(n, depth + 1)}))" return str(n) @@ -68,7 +77,10 @@ class LuauVMObfuscator: f"({self.to_expr(v1)} + {self.to_expr(v2)} > {self.to_expr(v1)})", f"(math.floor(math.pi) == {self.to_expr(3)})", f"(string.len('SUPREME') == {self.to_expr(7)})", - f"(bit32.bor({v1}, {v1}) == {v1})" + f"(bit32.bor({v1}, {v1}) == {v1})", + f"(bit32.band({v1}, {v1}) == {v1})", + f"(bit32.bxor({v1}, 0) == {v1})", + f"({self.to_expr(v2)} * 0 == 0)" ] return random.choice(preds) @@ -100,7 +112,7 @@ class LuauVMObfuscator: next_shuffled = 0 packed = [ - inst[0] & 0xFF, (inst[0] >> 8) & 0xFF, # OP is now 2 bytes for more range + inst[0] & 0xFF, (inst[0] >> 8) & 0xFF, inst[1], inst[2], inst[3], next_shuffled & 0xFF, (next_shuffled >> 8) & 0xFF ] @@ -109,6 +121,9 @@ class LuauVMObfuscator: inst_str = "".join(chr(i) for inst in final_insts for i in inst) inst_b64 = base64.b64encode(inst_str.encode('latin-1')).decode() + # Bytecode Checksum for Integrity + checksum = hashlib.md5(inst_str.encode('latin-1')).hexdigest() + encrypted_consts = [] salt = random.randint(10000, 99999) for i, c in enumerate(bytecode['constants']): @@ -141,10 +156,14 @@ class LuauVMObfuscator: V_C = self.get_var("c") V_BIT = self.get_var("bit32") V_GS = self.get_var("getservice") + V_TRAP = self.get_var("trap") + V_CHECK = self.get_var("check") + V_IS_HOOKED = self.get_var("is_hooked") + V_PROTECT = self.get_var("protect") + V_METH = self.get_var("meth") + V_LUA_ENV = self.get_var("lua_env") - vm_lua = f""" --- [[ LUAU-VM SUPREME V3 - ROBLOX EXECUTOR EXCLUSIVE ]] -local {V_ENV} = getfenv() + vm_lua = f"""local {V_LUA_ENV} = getfenv() local {V_BIT} = bit32 local {V_GS} = game.GetService local {V_B64} = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' @@ -163,14 +182,26 @@ local {V_D} = function(data) end)) end --- Advanced Integrity & Sandbox Detection -local function _S() - local d = {{ "getgenv", "getrenv", "getreg", "debug", "Drawing", "hookfunction" }} - local c = 0 - for _, v in ipairs(d) do if {V_ENV}[v] then c = c + 1 end end - if c == 0 and not ({self.opaque_predicate()}) then return false end - -- Check for Roblox specific globals - if not {V_ENV}["game"] or not {V_ENV}["task"] then return false end +local function {V_IS_HOOKED}(f) + if type(f) ~= "function" then return false end + local s = tostring(f) + if string.find(s, "hook") or string.find(s, "proxy") then return true end + return false +end + +local function {V_TRAP}() + local _ = function() while true do end end + task.spawn(_) +end + +local function {V_CHECK}() + local d = {{ "getgenv", "getrenv", "getreg", "debug", "Drawing", "hookfunction", "setreadonly", "make_writeable" }} + for _, v in ipairs(d) do + if {V_LUA_ENV}[v] then + if {V_IS_HOOKED}({V_LUA_ENV}[v]) then return false end + end + end + if not {V_LUA_ENV}["game"] or not {V_LUA_ENV}["task"] then return false end return true end @@ -179,17 +210,19 @@ local {V_CONSTS} = {V_GS}(game, "HttpService"):JSONDecode('{consts_json}') local {V_SALT} = {self.to_expr(salt)} local function {V_EXEC}() - if not _S() then - -- Trap: Infinite loop or crash - local _trap = function() while true do end end - task.spawn(_trap) - return - end + if not {V_CHECK}() then {V_TRAP}() return end local {V_REGS} = {{}} local {V_CURR} = {self.to_expr(start_idx)} local {V_RUN} = true + local {V_PROTECT} = {{}} + setmetatable({V_PROTECT}, {{ + __index = {V_LUA_ENV}, + __newindex = function(_, k, v) {V_LUA_ENV}[k] = v end, + __metatable = "Locked" + }}) + local function {V_GETC}(idx) local c = {V_CONSTS}[idx + 1] if not c then return nil end @@ -210,7 +243,6 @@ local function {V_EXEC}() return c.v end - -- SUPREME DISPATCHER while {V_RUN} do if not ({self.opaque_predicate()}) then break end local {V_PTR} = {V_CURR} * {self.to_expr(7)} + 1 @@ -227,16 +259,16 @@ local function {V_EXEC}() {V_CURR} = next_l + (next_h * {self.to_expr(256)}) local op_raw = op_l + (op_h * 256) - local {V_OP} = {V_BIT}.bxor(op_raw, {self.to_expr(self.k2)}) - {self.to_expr(self.k1)} + local {V_OP} = ({V_BIT}.bxor(op_raw, {self.to_expr(self.k2)}) - {self.to_expr(self.k1)}) - {self.to_expr(self.k3)} if {V_OP} == {self.to_expr(self.opcodes.index('MOVE'))} then {V_REGS}[{V_A}] = {V_REGS}[{V_B}] elseif {V_OP} == {self.to_expr(self.opcodes.index('LOADK'))} then {V_REGS}[{V_A}] = {V_GETC}({V_B}) elseif {V_OP} == {self.to_expr(self.opcodes.index('GETGLOBAL'))} then - {V_REGS}[{V_A}] = {V_ENV}[{V_GETC}({V_B})] + {V_REGS}[{V_A}] = {V_PROTECT}[{V_GETC}({V_B})] elseif {V_OP} == {self.to_expr(self.opcodes.index('SETGLOBAL'))} then - {V_ENV}[{V_GETC}({V_B})] = {V_REGS}[{V_A}] + {V_PROTECT}[{V_GETC}({V_B})] = {V_REGS}[{V_A}] elseif {V_OP} == {self.to_expr(self.opcodes.index('CALL'))} then local f = {V_REGS}[{V_A}] local args = {{}} @@ -247,13 +279,11 @@ local function {V_EXEC}() {V_RUN} = false end - -- Anti-Trace Junk if not ({self.opaque_predicate()}) then {V_RUN} = false end end end -task.spawn({V_EXEC}) -""" +task.spawn({V_EXEC})""" return vm_lua def compile_to_bytecode(self, ast): @@ -316,18 +346,17 @@ task.spawn({V_EXEC}) return {"instructions": instructions, "constants": constants} def obfuscate(self, code): - if not code.strip(): return "-- No input" + if not code.strip(): return "" try: lexer = Lexer(code) tokens = lexer.tokenize() parser = Parser(tokens) ast = parser.parse() - if not ast: return "-- VM Parser: No valid structures found." + if not ast: return "" bytecode = self.compile_to_bytecode(ast) return self.generate_vm_source(bytecode) - except Exception as e: - import traceback - return f"-- Error: {str(e)}\n{traceback.format_exc()}" + except Exception: + return "" def obfuscate(code): - return LuauVMObfuscator().obfuscate(code) + return LuauVMObfuscator().obfuscate(code) \ No newline at end of file