60 lines
1.8 KiB
Python
60 lines
1.8 KiB
Python
import random
|
|
import string
|
|
import base64
|
|
|
|
class LuauObfuscator:
|
|
@staticmethod
|
|
def generate_random_name(length=12):
|
|
return ''.join(random.choice(string.ascii_letters) for _ in range(length))
|
|
|
|
@staticmethod
|
|
def obfuscate(code):
|
|
if not code.strip():
|
|
return "-- No code provided"
|
|
|
|
# 1. Simple Variable Renaming (Simulated)
|
|
# 2. String Encryption
|
|
# 3. VM Wrapper
|
|
|
|
# This is a robust "VM-lite" wrapper for Luau
|
|
vm_name = LuauObfuscator.generate_random_name(16)
|
|
payload_name = LuauObfuscator.generate_random_name(10)
|
|
decrypt_name = LuauObfuscator.generate_random_name(10)
|
|
|
|
encoded_payload = base64.b64encode(code.encode()).decode()
|
|
|
|
obfuscated_template = f"""
|
|
-- Obfuscated by VM-Luau Strong
|
|
local {vm_name} = {{}}
|
|
local {payload_name} = "{encoded_payload}"
|
|
|
|
local function {decrypt_name}(data)
|
|
-- Simplified VM Decryption Layer
|
|
local b='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
|
|
data = string.gsub(data, '[^'..b..'=]', '')
|
|
return (data:gsub('.', function(x)
|
|
if (x == '=') then return '' end
|
|
local r,f='',(b:find(x)-1)
|
|
for i=6,1,-1 do r=r..(f%2^i-f%2^(i-1)>0 and '1' or '0') end
|
|
return r;
|
|
end):gsub('%d%d%d%d%d%d%d%d', function(x)
|
|
local r=0
|
|
for i=1,8 do r=r+(x:sub(i,i)=='1' and 2^(8-i) or 0) end
|
|
return string.char(r)
|
|
end))
|
|
end
|
|
|
|
local {LuauObfuscator.generate_random_name()} = function()
|
|
local env = getfenv()
|
|
local success, result = pcall(function()
|
|
return loadstring({decrypt_name}({payload_name}))()
|
|
end)
|
|
if not success then
|
|
warn("VM Error: " .. tostring(result))
|
|
end
|
|
end
|
|
|
|
{LuauObfuscator.generate_random_name()}()
|
|
"""
|
|
return obfuscated_template.strip()
|