local LunarisObfuscator = Instance.new("ScreenGui") local MainFrame = Instance.new("Frame") local Title = Instance.new("TextLabel") local InputLabel = Instance.new("TextLabel") local InputBox = Instance.new("TextBox") local OutputLabel = Instance.new("TextLabel") local OutputBox = Instance.new("TextBox") local ObfuscateButton = Instance.new("TextButton") local CopyButton = Instance.new("TextButton") local ClearButton = Instance.new("TextButton") local AnimatedIcon = Instance.new("ImageLabel") local TitleGlow = Instance.new("ImageLabel") local TopBar = Instance.new("Frame") local CloseButton = Instance.new("TextButton") local ChangelogButton = Instance.new("TextButton") local SaveButton = Instance.new("TextButton") LunarisObfuscator.Name = "LunarisObfuscator" LunarisObfuscator.Parent = game:GetService("CoreGui") or game.Players.LocalPlayer:WaitForChild("PlayerGui") LunarisObfuscator.ZIndexBehavior = Enum.ZIndexBehavior.Sibling LunarisObfuscator.ResetOnSpawn = false MainFrame.Name = "MainFrame" MainFrame.Parent = LunarisObfuscator MainFrame.BackgroundColor3 = Color3.fromRGB(20, 20, 30) MainFrame.BackgroundTransparency = 0.1 MainFrame.BorderSizePixel = 0 MainFrame.Position = UDim2.new(0.3, 0, 0.2, 0) MainFrame.Size = UDim2.new(0.4, 0, 0.6, 0) MainFrame.ClipsDescendants = true local UICorner = Instance.new("UICorner") UICorner.CornerRadius = UDim.new(0.03, 0) UICorner.Parent = MainFrame local DropShadow = Instance.new("ImageLabel") DropShadow.Name = "DropShadow" DropShadow.Parent = MainFrame DropShadow.BackgroundTransparency = 1 DropShadow.BorderSizePixel = 0 DropShadow.Size = UDim2.new(1, 12, 1, 12) DropShadow.Position = UDim2.new(0, -6, 0, -6) DropShadow.Image = "rbxassetid://139437522" DropShadow.ImageColor3 = Color3.fromRGB(0, 0, 0) DropShadow.ImageTransparency = 0.8 DropShadow.ScaleType = Enum.ScaleType.Slice DropShadow.SliceCenter = Rect.new(10, 10, 118, 118) DropShadow.ZIndex = -1 TopBar.Name = "TopBar" TopBar.Parent = MainFrame TopBar.BackgroundColor3 = Color3.fromRGB(30, 30, 40) TopBar.BorderSizePixel = 0 TopBar.Size = UDim2.new(1, 0, 0.08, 0) TopBar.ZIndex = 3 local TopBarCorner = Instance.new("UICorner") TopBarCorner.CornerRadius = UDim.new(0, 8) TopBarCorner.Parent = TopBar AnimatedIcon.Name = "AnimatedIcon" AnimatedIcon.Parent = TopBar AnimatedIcon.BackgroundTransparency = 1 AnimatedIcon.Position = UDim2.new(0.02, 0, 0.15, 0) AnimatedIcon.Size = UDim2.new(0.07, 0, 0.7, 0) AnimatedIcon.Image = "rbxassetid://139437522" AnimatedIcon.ZIndex = 4 Title.Name = "Title" Title.Parent = TopBar Title.BackgroundTransparency = 1 Title.Position = UDim2.new(0.1, 0, 0, 0) Title.Size = UDim2.new(0.8, 0, 1, 0) Title.Font = Enum.Font.GothamBold Title.Text = " CSLO OBFUSCATOR v1.7.0" Title.TextColor3 = Color3.fromRGB(220, 220, 255) Title.TextSize = 18 Title.TextXAlignment = Enum.TextXAlignment.Left Title.ZIndex = 4 TitleGlow.Name = "TitleGlow" TitleGlow.Parent = Title TitleGlow.BackgroundTransparency = 1 TitleGlow.Size = UDim2.new(1.2, 0, 2, 0) TitleGlow.Position = UDim2.new(-0.1, 0, -0.5, 0) TitleGlow.Image = "rbxassetid://139437522" TitleGlow.ImageColor3 = Color3.fromRGB(100, 150, 255) TitleGlow.ImageTransparency = 0.7 TitleGlow.ScaleType = Enum.ScaleType.Slice TitleGlow.SliceCenter = Rect.new(10, 10, 118, 118) TitleGlow.ZIndex = 3 CloseButton.Name = "CloseButton" CloseButton.Parent = TopBar CloseButton.BackgroundColor3 = Color3.fromRGB(180, 80, 80) CloseButton.BackgroundTransparency = 0.5 CloseButton.BorderSizePixel = 0 CloseButton.Position = UDim2.new(0.92, 0, 0.15, 0) CloseButton.Size = UDim2.new(0.06, 0, 0.7, 0) CloseButton.Font = Enum.Font.GothamBold CloseButton.Text = "X" CloseButton.TextColor3 = Color3.fromRGB(255, 255, 255) CloseButton.TextSize = 14 CloseButton.ZIndex = 4 local CloseCorner = Instance.new("UICorner") CloseCorner.CornerRadius = UDim.new(0.5, 0) CloseCorner.Parent = CloseButton ChangelogButton.Name = "ChangelogButton" ChangelogButton.Parent = TopBar ChangelogButton.BackgroundColor3 = Color3.fromRGB(80, 120, 200) ChangelogButton.BackgroundTransparency = 0.5 ChangelogButton.BorderSizePixel = 0 ChangelogButton.Position = UDim2.new(0.76, 0, 0.15, 0) ChangelogButton.Size = UDim2.new(0.07, 0, 0.7, 0) ChangelogButton.Font = Enum.Font.GothamBold ChangelogButton.Text = "Changelog" ChangelogButton.TextColor3 = Color3.fromRGB(255, 255, 255) ChangelogButton.TextSize = 10 ChangelogButton.TextScaled = true ChangelogButton.ZIndex = 4 SaveButton.Name = "SaveButton" SaveButton.Parent = TopBar SaveButton.BackgroundColor3 = Color3.fromRGB(100, 100, 100) SaveButton.BackgroundTransparency = 0.5 SaveButton.BorderSizePixel = 0 SaveButton.Position = UDim2.new(0.84, 0, 0.15, 0) SaveButton.Size = UDim2.new(0.07, 0, 0.7, 0) SaveButton.Font = Enum.Font.GothamBold SaveButton.Text = "Save" SaveButton.TextColor3 = Color3.fromRGB(255, 255, 255) SaveButton.TextSize = 10 SaveButton.TextScaled = true SaveButton.ZIndex = 4 local SaveCorner = Instance.new("UICorner") SaveCorner.CornerRadius = UDim.new(0.5, 0) SaveCorner.Parent = SaveButton local ChangelogCorner = Instance.new("UICorner") ChangelogCorner.CornerRadius = UDim.new(0.5, 0) ChangelogCorner.Parent = ChangelogButton InputLabel.Name = "InputLabel" InputLabel.Parent = MainFrame InputLabel.BackgroundTransparency = 1 InputLabel.Position = UDim2.new(0, 0, 0.1, 0) InputLabel.Size = UDim2.new(1, 0, 0.05, 0) InputLabel.Font = Enum.Font.Gotham InputLabel.Text = "Input Script:" InputLabel.TextColor3 = Color3.fromRGB(200, 200, 255) InputLabel.TextSize = 14 InputLabel.ZIndex = 2 InputBox.Name = "InputBox" InputBox.Parent = MainFrame InputBox.BackgroundColor3 = Color3.fromRGB(25, 25, 35) InputBox.BorderSizePixel = 0 InputBox.Position = UDim2.new(0.02, 0, 0.15, 0) InputBox.Size = UDim2.new(0.96, 0, 0.35, 0) InputBox.Font = Enum.Font.Code InputBox.Text = "print('Hello CSLO!')" InputBox.TextColor3 = Color3.fromRGB(220, 220, 255) InputBox.TextSize = 12 InputBox.TextWrapped = true InputBox.TextXAlignment = Enum.TextXAlignment.Left InputBox.TextYAlignment = Enum.TextYAlignment.Top InputBox.ClearTextOnFocus = false InputBox.MultiLine = true InputBox.ZIndex = 2 local InputCorner = Instance.new("UICorner") InputCorner.CornerRadius = UDim.new(0.02, 0) InputCorner.Parent = InputBox OutputLabel.Name = "OutputLabel" OutputLabel.Parent = MainFrame OutputLabel.BackgroundTransparency = 1 OutputLabel.Position = UDim2.new(0, 0, 0.5, 0) OutputLabel.Size = UDim2.new(0.52, 0, 0.05, 0) OutputLabel.Font = Enum.Font.Gotham OutputLabel.Text = "Obfuscated Output:" OutputLabel.TextColor3 = Color3.fromRGB(200, 200, 255) OutputLabel.TextSize = 14 OutputLabel.ZIndex = 2 local FileNameBox = Instance.new("TextBox") FileNameBox.Name = "FileNameBox" FileNameBox.Parent = MainFrame FileNameBox.BackgroundColor3 = Color3.fromRGB(25, 25, 35) FileNameBox.BorderSizePixel = 0 FileNameBox.Position = UDim2.new(0.53, 0, 0.505, 0) FileNameBox.Size = UDim2.new(0.26, 0, 0.04, 0) FileNameBox.Font = Enum.Font.Code FileNameBox.Text = "script.lua" FileNameBox.PlaceholderText = "filename.lua" FileNameBox.TextColor3 = Color3.fromRGB(200, 200, 255) FileNameBox.TextSize = 10 FileNameBox.TextScaled = true FileNameBox.ClearTextOnFocus = false FileNameBox.ZIndex = 2 local FileNameCorner = Instance.new("UICorner") FileNameCorner.CornerRadius = UDim.new(0.3, 0) FileNameCorner.Parent = FileNameBox local LoadFileButton = Instance.new("TextButton") LoadFileButton.Name = "LoadFileButton" LoadFileButton.Parent = MainFrame LoadFileButton.BackgroundColor3 = Color3.fromRGB(0, 0, 0) LoadFileButton.BackgroundTransparency = 0.5 LoadFileButton.BorderSizePixel = 0 LoadFileButton.Position = UDim2.new(0.80, 0, 0.505, 0) LoadFileButton.Size = UDim2.new(0.18, 0, 0.04, 0) LoadFileButton.Font = Enum.Font.GothamBold LoadFileButton.Text = "LOAD FILE" LoadFileButton.TextColor3 = Color3.fromRGB(255, 255, 255) LoadFileButton.TextSize = 9 LoadFileButton.TextScaled = true LoadFileButton.ZIndex = 2 local LoadFileCorner = Instance.new("UICorner") LoadFileCorner.CornerRadius = UDim.new(0.5, 0) LoadFileCorner.Parent = LoadFileButton OutputBox.Name = "OutputBox" OutputBox.Parent = MainFrame OutputBox.BackgroundColor3 = Color3.fromRGB(25, 25, 35) OutputBox.BorderSizePixel = 0 OutputBox.Position = UDim2.new(0.02, 0, 0.55, 0) OutputBox.Size = UDim2.new(0.96, 0, 0.35, 0) OutputBox.Font = Enum.Font.Code OutputBox.Text = "" OutputBox.TextColor3 = Color3.fromRGB(220, 220, 255) OutputBox.TextSize = 11 OutputBox.TextWrapped = true OutputBox.TextXAlignment = Enum.TextXAlignment.Left OutputBox.TextYAlignment = Enum.TextYAlignment.Top OutputBox.ClearTextOnFocus = false OutputBox.MultiLine = true OutputBox.ZIndex = 2 local OutputCorner = Instance.new("UICorner") OutputCorner.CornerRadius = UDim.new(0.02, 0) OutputCorner.Parent = OutputBox ObfuscateButton.Name = "ObfuscateButton" ObfuscateButton.Parent = MainFrame ObfuscateButton.BackgroundColor3 = Color3.fromRGB(60, 100, 200) ObfuscateButton.BorderSizePixel = 0 ObfuscateButton.Position = UDim2.new(0.02, 0, 0.92, 0) ObfuscateButton.Size = UDim2.new(0.3, 0, 0.06, 0) ObfuscateButton.Font = Enum.Font.GothamBold ObfuscateButton.Text = "OBFUSCATE" ObfuscateButton.TextColor3 = Color3.fromRGB(255, 255, 255) ObfuscateButton.TextSize = 14 ObfuscateButton.ZIndex = 2 local ObfuscateCorner = Instance.new("UICorner") ObfuscateCorner.CornerRadius = UDim.new(0.5, 0) ObfuscateCorner.Parent = ObfuscateButton CopyButton.Name = "CopyButton" CopyButton.Parent = MainFrame CopyButton.BackgroundColor3 = Color3.fromRGB(50, 150, 100) CopyButton.BorderSizePixel = 0 CopyButton.Position = UDim2.new(0.34, 0, 0.92, 0) CopyButton.Size = UDim2.new(0.3, 0, 0.06, 0) CopyButton.Font = Enum.Font.GothamBold CopyButton.Text = "COPY OUTPUT" CopyButton.TextColor3 = Color3.fromRGB(255, 255, 255) CopyButton.TextSize = 14 CopyButton.ZIndex = 2 local CopyCorner = Instance.new("UICorner") CopyCorner.CornerRadius = UDim.new(0.5, 0) CopyCorner.Parent = CopyButton ClearButton.Name = "ClearButton" ClearButton.Parent = MainFrame ClearButton.BackgroundColor3 = Color3.fromRGB(180, 80, 80) ClearButton.BorderSizePixel = 0 ClearButton.Position = UDim2.new(0.66, 0, 0.92, 0) ClearButton.Size = UDim2.new(0.32, 0, 0.06, 0) ClearButton.Font = Enum.Font.GothamBold ClearButton.Text = "CLEAR ALL" ClearButton.TextColor3 = Color3.fromRGB(255, 255, 255) ClearButton.TextSize = 14 ClearButton.ZIndex = 2 local ClearCorner = Instance.new("UICorner") ClearCorner.CornerRadius = UDim.new(0.5, 0) ClearCorner.Parent = ClearButton local function animateIcon() local TweenService = game:GetService("TweenService") local rotationGoal = {Rotation = 360} local rotationInfo = TweenInfo.new(4, Enum.EasingStyle.Linear, Enum.EasingDirection.Out, math.huge, false, 0) local rotationTween = TweenService:Create(AnimatedIcon, rotationInfo, rotationGoal) rotationTween:Play() while true do local pulseUp = TweenService:Create(AnimatedIcon, TweenInfo.new(0.5, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Size = UDim2.new(0.08, 0, 0.8, 0)}) local pulseDown = TweenService:Create(AnimatedIcon, TweenInfo.new(0.5, Enum.EasingStyle.Quad, Enum.EasingDirection.Out), {Size = UDim2.new(0.07, 0, 0.7, 0)}) pulseUp:Play() pulseUp.Completed:Wait() pulseDown:Play() pulseDown.Completed:Wait() task.wait(2) end end coroutine.wrap(animateIcon)() local UserInputService = game:GetService("UserInputService") local TweenService = game:GetService("TweenService") local dragging = false local dragStart = Vector2.new(0,0) local startPos = UDim2.new(0,0,0,0) local function updateFramePosition(input) local delta = input.Position - dragStart local newPos = UDim2.new(startPos.X.Scale, startPos.X.Offset+delta.X, startPos.Y.Scale, startPos.Y.Offset+delta.Y) TweenService:Create(MainFrame, TweenInfo.new(0.1,Enum.EasingStyle.Quad,Enum.EasingDirection.Out), {Position=newPos}):Play() end TopBar.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging=true dragStart=input.Position startPos=MainFrame.Position TweenService:Create(TopBar, TweenInfo.new(0.1,Enum.EasingStyle.Quad,Enum.EasingDirection.Out), {BackgroundTransparency=0.3}):Play() input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging=false TweenService:Create(TopBar, TweenInfo.new(0.1,Enum.EasingStyle.Quad,Enum.EasingDirection.Out), {BackgroundTransparency=0}):Play() end end) end end) UserInputService.InputChanged:Connect(function(input) if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then updateFramePosition(input) end end) CloseButton.MouseButton1Click:Connect(function() local tw = TweenService:Create(MainFrame, TweenInfo.new(0.3,Enum.EasingStyle.Back,Enum.EasingDirection.In), {Position=UDim2.new(0.5,0,-1,0),Size=UDim2.new(0,0,0,0)}) tw:Play() tw.Completed:Wait() LunarisObfuscator:Destroy() end) local function setupButtonHover(btn) btn.MouseEnter:Connect(function() TweenService:Create(btn, TweenInfo.new(0.2,Enum.EasingStyle.Quad,Enum.EasingDirection.Out), {BackgroundTransparency=0.1}):Play() end) btn.MouseLeave:Connect(function() TweenService:Create(btn, TweenInfo.new(0.2,Enum.EasingStyle.Quad,Enum.EasingDirection.Out), {BackgroundTransparency=0}):Play() end) end setupButtonHover(ObfuscateButton) setupButtonHover(CopyButton) setupButtonHover(ClearButton) setupButtonHover(CloseButton) setupButtonHover(ChangelogButton) setupButtonHover(SaveButton) local AutoSaveEnabled = false SaveButton.MouseButton1Click:Connect(function() AutoSaveEnabled = not AutoSaveEnabled if AutoSaveEnabled then SaveButton.BackgroundColor3 = Color3.fromRGB(0, 170, 0) SaveButton.BackgroundTransparency = 0.2 else SaveButton.BackgroundColor3 = Color3.fromRGB(100, 100, 100) SaveButton.BackgroundTransparency = 0.5 end end) TweenService:Create(MainFrame, TweenInfo.new(0.5,Enum.EasingStyle.Back,Enum.EasingDirection.Out), {Position=UDim2.new(0.3,0,0.2,0),Size=UDim2.new(0.4,0,0.6,0)}):Play() local ChangelogFrame = Instance.new("Frame") local ChangelogTextLabel = Instance.new("TextLabel") local ChangelogCloseButton = Instance.new("TextButton") ChangelogFrame.Name="ChangelogFrame" ChangelogFrame.Parent=LunarisObfuscator ChangelogFrame.BackgroundColor3=Color3.fromRGB(180,220,255); ChangelogFrame.BackgroundTransparency=0.9 ChangelogFrame.BorderSizePixel=0; ChangelogFrame.Position=UDim2.new(0.35,0,0.25,0) ChangelogFrame.Size=UDim2.new(0.3,0,0.5,0); ChangelogFrame.Visible=false local CFCorner=Instance.new("UICorner"); CFCorner.CornerRadius=UDim.new(0.03,0) CFCorner.Parent=ChangelogFrame ChangelogTextLabel.Name="ChangelogTextLabel"; ChangelogTextLabel.Parent=ChangelogFrame ChangelogTextLabel.BackgroundTransparency=1 ChangelogTextLabel.Position=UDim2.new(0.05,0,0.05,0) ChangelogTextLabel.Size=UDim2.new(0.9,0,0.9,0); ChangelogTextLabel.Font=Enum.Font.GothamBold ChangelogTextLabel.Text="CSLO Obfuscator v1.7.0\n- Full Custom VM\n- Bytecode Encryption\n- LWZ + Base92 Compression\n- FeedBack Plezzz" ChangelogTextLabel.TextColor3=Color3.fromRGB(255,255,255) ChangelogTextLabel.TextSize=16 ChangelogTextLabel.TextXAlignment=Enum.TextXAlignment.Left ChangelogTextLabel.TextYAlignment=Enum.TextYAlignment.Top ChangelogTextLabel.TextWrapped=true ChangelogCloseButton.Name="ChangelogCloseButton" ChangelogCloseButton.Parent=ChangelogFrame ChangelogCloseButton.BackgroundColor3=Color3.fromRGB(180,80,80); ChangelogCloseButton.BackgroundTransparency=0.5 ChangelogCloseButton.BorderSizePixel=0; ChangelogCloseButton.Position=UDim2.new(0.9,0,0.02,0) ChangelogCloseButton.Size=UDim2.new(0.08,0,0.08,0); ChangelogCloseButton.Font=Enum.Font.GothamBold ChangelogCloseButton.Text="X"; ChangelogCloseButton.TextColor3=Color3.fromRGB(255,255,255); ChangelogCloseButton.TextSize=14 local CCCorner=Instance.new("UICorner"); CCCorner.CornerRadius=UDim.new(0.5,0) CCCorner.Parent=ChangelogCloseButton setupButtonHover(ChangelogCloseButton) ChangelogButton.MouseButton1Click:Connect(function() ChangelogFrame.Visible=true TweenService:Create(ChangelogFrame, TweenInfo.new(0.3,Enum.EasingStyle.Back,Enum.EasingDirection.Out), {Position=UDim2.new(0.35,0,0.25,0),Size=UDim2.new(0.3,0,0.5,0)}):Play() end) ChangelogCloseButton.MouseButton1Click:Connect(function() local tw=TweenService:Create(ChangelogFrame, TweenInfo.new(0.2,Enum.EasingStyle.Back,Enum.EasingDirection.In), {Position=UDim2.new(0.35,0,0.2,0),Size=UDim2.new(0.3,0,0,0)}) tw:Play(); tw.Completed:Wait(); ChangelogFrame.Visible=false end) local varCounter = 0 local usedVars = {} local function newVar() local name = "" local temp = varCounter repeat local rem = temp % 52 local charCode = (rem < 26) and (97 + rem) or (65 + rem - 26) name = string.char(charCode) .. name temp = math.floor(temp / 52) - 1 until temp < 0 varCounter = varCounter + 1 return "_" .. name end local function lex(src) local toks = {} local len = #src local pos = 1 local line = 1 local col = 1 local function byte(n) return string.byte(src, pos+(n or 0)) end local function sub(s,e) return string.sub(src, s, e) end local function isA(c) return (c>=65 and c<=90) or (c>=97 and c<=122) or c==95 end local function isD(c) return c>=48 and c<=57 end local function isAN(c) return isA(c) or isD(c) end local function isH(c) return isD(c) or (c>=65 and c<=70) or (c>=97 and c<=102) end local function isWS(c) return c==32 or c==9 end local function adv(n) n = n or 1 for i = 1, n do local c = string.byte(src, pos) pos = pos + 1 if c == 10 then line = line + 1; col = 1 else col = col + 1 end end end local KW = { ["and"]=1,["break"]=1,["continue"]=1,["do"]=1,["else"]=1, ["elseif"]=1,["end"]=1,["false"]=1,["for"]=1,["function"]=1, ["if"]=1,["in"]=1,["local"]=1,["nil"]=1,["not"]=1,["or"]=1, ["repeat"]=1,["return"]=1,["then"]=1,["true"]=1,["until"]=1, ["while"]=1, } local function addT(tType, v, r, sPos, sCol, sLine) toks[#toks+1] = { raw = r or v, type = tType, index = sPos, secondarytype = tType, column = sCol, length = pos - sPos, line = sLine, endindex = pos - 1, value = v } end local function skipLine() while pos<=len and byte()~=10 and byte()~=13 do adv() end end local function readLong() local eq=0; adv() while byte()==61 do eq=eq+1; adv() end if byte()~=91 then return nil end; adv() if byte()==10 then adv() elseif byte()==13 then adv(); if byte()==10 then adv() end end local cl="]"..string.rep("=",eq).."]" local s2=string.find(src, cl, pos, true) if not s2 then error("unfinished long string at "..pos) end local content = sub(pos, s2-1) for i=1, #content do local c = string.byte(content, i) if c == 10 then line = line + 1; col = 1 else col = col + 1 end end pos = s2 + #cl col = col + #cl return content end local function readStr(q) adv(); local buf={} while pos<=len do local c=byte() if c==q then adv(); break end if c==92 then adv(); local e=byte(); adv() if e==110 then buf[#buf+1]="\n" elseif e==116 then buf[#buf+1]="\t" elseif e==114 then buf[#buf+1]="\r" elseif e==92 then buf[#buf+1]="\\" elseif e==39 then buf[#buf+1]="'" elseif e==34 then buf[#buf+1]='"' elseif e==48 then buf[#buf+1]="\0" elseif e==117 then if byte()==123 then adv(); local hs="" while byte()~=125 do hs=hs..string.char(byte()); adv() end adv() local cp=tonumber(hs,16) or 0 if cp<128 then buf[#buf+1]=string.char(cp) elseif cp<2048 then buf[#buf+1]=string.char(192+math.floor(cp/64),128+cp%64) else buf[#buf+1]=string.char(224+math.floor(cp/4096),128+math.floor(cp%4096/64),128+cp%64) end end elseif e>=48 and e<=57 then local ns=string.char(e) if byte()>=48 and byte()<=57 then ns=ns..string.char(byte()); adv() end if byte()>=48 and byte()<=57 then ns=ns..string.char(byte()); adv() end buf[#buf+1]=string.char(tonumber(ns)) else buf[#buf+1]=string.char(e) end else buf[#buf+1]=string.char(c); adv() end end return table.concat(buf) end local function readNum() local s=pos if byte()==48 and (byte(1)==120 or byte(1)==88) then adv(2) while pos<=len and isH(byte()) do adv() end if byte()==46 then adv(); while pos<=len and isH(byte()) do adv() end end if byte()==112 or byte()==80 then adv() if byte()==43 or byte()==45 then adv() end while pos<=len and isD(byte()) do adv() end end else while pos<=len and isD(byte()) do adv() end if byte()==46 and byte(1)~=46 then adv() while pos<=len and isD(byte()) do adv() end end if byte()==101 or byte()==69 then adv() if byte()==43 or byte()==45 then adv() end while pos<=len and isD(byte()) do adv() end end end return sub(s,pos-1) end while pos<=len do local c=byte() local sP, sC, sL = pos, col, line if isWS(c) then adv() elseif c==10 or c==13 then local r = string.char(c) adv() if c==13 and byte()==10 then r = r .. "\n"; adv() end addT("newline", r, r, sP, sC, sL) elseif c==45 and byte(1)==45 then adv(2) if byte()==91 then local sv=pos; adv() local eq2=0; while byte()==61 do eq2=eq2+1; adv() end if byte()==91 then adv() local cl="]"..string.rep("=",eq2).."]" local s2=string.find(src,cl,pos,true) if s2 then pos=s2+#cl else pos=len+1 end else pos=sv; skipLine() end else skipLine() end elseif c==34 or c==39 then local q=c; local s=readStr(c) addT("string",s, sub(sP,pos-1), sP, sC, sL) elseif c==91 and (byte(1)==91 or byte(1)==61) then adv() local ls=readLong() if ls then addT("string",ls,sub(sP,pos-1), sP, sC, sL) else pos=sP; addT("punctuation","[","[", sP, sC, sL); adv() end elseif isD(c) or (c==46 and isD(byte(1))) then local ns=readNum(); addT("number",ns, ns, sP, sC, sL) elseif isA(c) then while pos<=len and isAN(byte()) do adv() end local w=sub(sP,pos-1) if KW[w] then addT("keyword",w, w, sP, sC, sL) else addT("identifier",w, w, sP, sC, sL) end elseif c==46 then if byte(1)==46 and byte(2)==46 then adv(3); addT("punctuation","...", "...", sP, sC, sL) elseif byte(1)==46 then adv(2); addT("punctuation","..", "..", sP, sC, sL) else adv(); addT("punctuation",".", ".", sP, sC, sL) end elseif c==61 then if byte(1)==61 then adv(2); addT("punctuation","==", "==", sP, sC, sL) else adv(); addT("punctuation","=", "=", sP, sC, sL) end elseif c==126 and byte(1)==61 then adv(2); addT("punctuation","~=", "~=", sP, sC, sL) elseif c==60 then if byte(1)==61 then adv(2); addT("punctuation","<=", "<=", sP, sC, sL) else adv(); addT("punctuation","<", "<", sP, sC, sL) end elseif c==62 then if byte(1)==61 then adv(2); addT("punctuation",">=", ">=", sP, sC, sL) else adv(); addT("punctuation",">", ">", sP, sC, sL) end elseif c==58 then if byte(1)==58 then adv(2); addT("punctuation","::", "::", sP, sC, sL) else adv(); addT("punctuation",":", ":", sP, sC, sL) end elseif c==47 and byte(1)==47 then adv(2); addT("punctuation","//", "//", sP, sC, sL) else local ch=string.char(c) adv(); addT("punctuation",ch, ch, sP, sC, sL) end end addT("eof","EOF", "EOF", pos, col, line) return toks end local function renameVars(toks) local scope = {{}} local globalRename = {} local PROTECTED = { ["print"]=1,["tostring"]=1,["tonumber"]=1,["type"]=1,["pairs"]=1, ["ipairs"]=1,["next"]=1,["select"]=1,["unpack"]=1,["rawget"]=1, ["rawset"]=1,["rawequal"]=1,["setmetatable"]=1,["getmetatable"]=1, ["pcall"]=1,["xpcall"]=1,["error"]=1,["assert"]=1,["require"]=1, ["math"]=1,["string"]=1,["table"]=1,["bit32"]=1,["os"]=1,["io"]=1, ["game"]=1,["workspace"]=1,["script"]=1,["Instance"]=1, ["Vector2"]=1,["Vector3"]=1,["Color3"]=1,["UDim"]=1,["UDim2"]=1, ["CFrame"]=1,["Enum"]=1,["Rect"]=1,["TweenInfo"]=1,["BrickColor"]=1, ["Region3"]=1,["Ray"]=1,["NumberRange"]=1,["ColorSequence"]=1, ["task"]=1,["coroutine"]=1,["_G"]=1,["_ENV"]=1,["self"]=1, ["wait"]=1,["spawn"]=1,["delay"]=1,["typeof"]=1,["warn"]=1, ["tick"]=1,["time"]=1,["collectgarbage"]=1, } local nameMap = {} local function getTok(i) while toks[i] and toks[i].type == "newline" do i=i+1 end return toks[i], i end local function collectLocals() local i=1 while i<=#toks do local t, nxt = getTok(i) if not t then break end i = nxt if t.type=="keyword" and t.value=="local" then local nj = i+1 local t2, j = getTok(nj) if t2 and t2.type=="keyword" and t2.value=="function" then local t3, k = getTok(j+1) if t3 and t3.type=="identifier" and not PROTECTED[t3.value] then if not nameMap[t3.value] then nameMap[t3.value]=newVar() end end elseif t2 and t2.type=="identifier" then while t2 and t2.type=="identifier" do if not PROTECTED[t2.value] and not nameMap[t2.value] then nameMap[t2.value]=newVar() end local tComma, nk = getTok(j+1) if tComma and tComma.type=="punctuation" and tComma.value=="," then t2, j = getTok(nk+1) else break end end end elseif t.type=="keyword" and t.value=="function" then local nj = i+1 local tj, j = getTok(nj) while tj and not (tj.type=="punctuation" and tj.value=="(") do tj, j = getTok(j+1) end tj, j = getTok(j+1) while tj and not (tj.type=="punctuation" and tj.value==")") do if tj.type=="identifier" and not PROTECTED[tj.value] and not nameMap[tj.value] then nameMap[tj.value]=newVar() end tj, j = getTok(j+1) end elseif (t.type=="keyword" and t.value=="for") then local nj = i+1 local tj, j = getTok(nj) while tj and not (tj.type=="keyword" and tj.value=="in") and not (tj.type=="punctuation" and tj.value=="=") do if tj.type=="identifier" and not PROTECTED[tj.value] and not nameMap[tj.value] then nameMap[tj.value]=newVar() end local tComma, nk = getTok(j+1) if tComma and tComma.type=="punctuation" and tComma.value=="," then tj, j = getTok(nk+1) else break end end end i=i+1 end end collectLocals() local result = {} for _,t in ipairs(toks) do if t.type=="identifier" and nameMap[t.value] then local newName = nameMap[t.value] t.value = newName t.raw = newName t.length = #newName result[#result+1]=t else result[#result+1]=t end end return result end local function makeOpcodes() local used = {} local function fop() local val repeat val = math.random(1, 65535) until not used[val] used[val] = true return val end return { M_PUSH_REG=fop(), M_PUSH_K=fop(), M_PUSH_LIT=fop(), M_MOVE_CONST_ID=fop(), M_DECRYPT_CONST=fop(), M_WRITE_REG=fop(), M_TAG_TAINT=fop(), M_MASK_WRITE=fop(), M_FETCH_REG_ID=fop(), M_POP_ALU_B=fop(), M_POP_ALU_A=fop(), M_ALU_ADD=fop(), M_ALU_SUB=fop(), M_ALU_MUL=fop(), M_ALU_DIV=fop(), M_ALU_MOD=fop(), M_ALU_POW=fop(), M_ALU_IDIV=fop(), M_ALU_BAND=fop(), M_ALU_BOR=fop(), M_ALU_BXOR=fop(), M_ALU_SHL=fop(), M_ALU_SHR=fop(), M_ALU_UNM=fop(), M_ALU_BNOT=fop(), M_ALU_NOT=fop(), M_ALU_LEN=fop(), M_LOADBOOL=fop(), M_LOADNIL=fop(), M_GETGLOBAL=fop(), M_SETGLOBAL=fop(), M_GETTABLE=fop(), M_SETTABLE=fop(), M_NEWTABLE=fop(), M_SELF=fop(), M_CONCAT=fop(), M_JMP=fop(), M_EQ=fop(), M_LT=fop(), M_LE=fop(), M_TEST=fop(), M_CALL=fop(), M_RETURN=fop(), M_FORPREP=fop(), M_FORLOOP=fop(), M_CLOSURE=fop(), M_HALT=fop(), M_NOP=fop(), M_EXEC_SUB=fop(), M_SECURE_ERASE=fop(), M_GETUPVAL=fop(), M_SETUPVAL=fop(), SUB_OP_DEC=fop(), SUB_OP_RET=fop() } end local function parseAST(toks) local tp=1 local function T() while toks[tp] and toks[tp].type == "newline" do tp = tp + 1 end return toks[tp] or {type="eof", value="EOF", raw="EOF"} end local function Tt() return T().type end local function Tv() return T().value end local function Pt(n) local tmp = tp local c = 0 while true do while toks[tmp] and toks[tmp].type == "newline" do tmp = tmp + 1 end c = c + 1 if c >= n then break end tmp = tmp + 1 end local x = toks[tmp] return x and x.type or "eof" end local function Pv(n) local tmp = tp local c = 0 while true do while toks[tmp] and toks[tmp].type == "newline" do tmp = tmp + 1 end c = c + 1 if c >= n then break end tmp = tmp + 1 end local x = toks[tmp] return x and x.value or "" end local function adv() tp=tp+1 while toks[tp] and toks[tp].type == "newline" do tp = tp + 1 end end local function chk(t,v) if v then return T().type==t and T().value==v end return T().type==t end local function eat(t,v) if not chk(t,v) then error("Expected "..t..(v and " '"..v.."'" or "").." got "..T().type.." '"..tostring(T().value).."'") end local r=T(); adv(); return r end local function try(t,v) if chk(t,v) then adv(); return true end end local parseExpr,parseStat,parseBlock,parseFB local BOPS={["or"]=1,["and"]=2,["<"]=3,[">"]=3,["<="]=3,[">="]=3,["=="]=3,["~="]=3, [".."]=4,["+"]=5,["-"]=5,["*"]=6,["/"]=6,["%"]=6,["//"]=6,["^"]=7} local RASS={["^"]=true,[".."]=true} local ENDS={["end"]=1,["else"]=1,["elseif"]=1,["until"]=1,["eof"]=1} local function pSfx(base) while true do if chk("punctuation",".") then adv(); local f=eat("identifier").value base = { type="MemberExpression", base=base, identifier=f } elseif chk("punctuation","[") then adv(); local idx=parseExpr(); eat("punctuation","]") base = { type="IndexExpression", base=base, index=idx } elseif chk("punctuation",":") then adv(); local m=eat("identifier").value eat("punctuation","(") local args={} if not chk("punctuation",")") then args[#args+1]=parseExpr() while try("punctuation",",") do args[#args+1]=parseExpr() end end eat("punctuation",")") base = { type="CallExpression", base=base, method=m, arguments=args, isSelf=true } elseif chk("punctuation","(") then adv(); local args={} if not chk("punctuation",")") then args[#args+1]=parseExpr() while try("punctuation",",") do args[#args+1]=parseExpr() end end eat("punctuation",")") base = { type="CallExpression", base=base, arguments=args, isSelf=false } elseif chk("string") then local sv=T().value; adv() base = { type="CallExpression", base=base, arguments={{type="Literal", kind="string", value=sv}}, isSelf=false } elseif chk("punctuation","{") then adv() local fields={} while not chk("punctuation","}") do if chk("identifier") and Pt(2)=="punctuation" and Pv(2)=="=" then local k=T().value; adv(); adv() fields[#fields+1]={ key={type="Literal", kind="string", value=k}, value=parseExpr() } elseif chk("punctuation","[") then adv(); local k=parseExpr(); eat("punctuation","]"); eat("punctuation","=") fields[#fields+1]={ key=k, value=parseExpr() } else fields[#fields+1]={ key=nil, value=parseExpr() } end if not try("punctuation",",") then try("punctuation",";") end end eat("punctuation","}") base = { type="CallExpression", base=base, arguments={{type="TableLiteral", fields=fields}}, isSelf=false } else break end end return base end local function pPrim() local t=T() if t.type=="number" then adv(); return { type="Literal", kind="number", value=tonumber(t.value) } elseif t.type=="string" then adv(); return { type="Literal", kind="string", value=t.value } elseif t.type=="keyword" and t.value=="true" then adv(); return { type="Literal", kind="boolean", value=true } elseif t.type=="keyword" and t.value=="false" then adv(); return { type="Literal", kind="boolean", value=false } elseif t.type=="keyword" and t.value=="nil" then adv(); return { type="Literal", kind="nil", value=nil } elseif t.type=="punctuation" and t.value=="..." then adv(); return { type="VarargLiteral" } elseif t.type=="keyword" and t.value=="function" then adv(); return parseFB() elseif t.type=="punctuation" and t.value=="(" then adv(); local e=parseExpr(); eat("punctuation",")"); return pSfx(e) elseif t.type=="keyword" and t.value=="not" then adv(); return { type="UnaryExpression", operator="not", argument=pPrim() } elseif t.type=="punctuation" and t.value=="-" then adv(); return { type="UnaryExpression", operator="-", argument=pPrim() } elseif t.type=="punctuation" and t.value=="#" then adv(); return { type="UnaryExpression", operator="#", argument=pPrim() } elseif t.type=="punctuation" and t.value=="~" then adv(); return { type="UnaryExpression", operator="~", argument=pPrim() } elseif t.type=="punctuation" and t.value=="{" then adv() local fields={} while not chk("punctuation","}") do if chk("identifier") and Pt(2)=="punctuation" and Pv(2)=="=" then local k=T().value; adv(); adv() fields[#fields+1]={ key={type="Literal", kind="string", value=k}, value=parseExpr() } elseif chk("punctuation","[") then adv(); local k=parseExpr(); eat("punctuation","]"); eat("punctuation","=") fields[#fields+1]={ key=k, value=parseExpr() } else fields[#fields+1]={ key=nil, value=parseExpr() } end if not try("punctuation",",") then try("punctuation",";") end end eat("punctuation","}") return { type="TableLiteral", fields=fields } elseif t.type=="identifier" then local n=t.value; adv() return pSfx({ type="Identifier", name=n }) else error("Unexpected token in expression: "..t.type.." '"..t.value.."'") end end parseExpr = function(mp) mp=mp or 0 local node=pPrim() while true do local op=T().value local pr=BOPS[op] if not pr or pr<=mp then break end if (op=="+" or op=="-" or op=="*" or op=="/" or op=="%" or op=="^" or op=="..") and Pt(2)=="punctuation" and Pv(2)=="=" then break end adv() local np2=RASS[op] and pr-1 or pr local right=parseExpr(np2) node={ type="BinaryExpression", operator=op, left=node, right=right } end return node end parseFB = function() eat("punctuation","(") local params={}; local isva=false while not chk("punctuation",")") do if chk("punctuation","...") then isva=true; adv(); break end params[#params+1]=eat("identifier").value; try("punctuation",",") end eat("punctuation",")") local body=parseBlock(); eat("keyword","end") return { type="FunctionDefinition", params=params, isVararg=isva, body=body } end parseStat = function() local t=T() if t.type=="keyword" and t.value=="local" then adv() if chk("keyword","function") then adv(); local n=eat("identifier").value; local fb=parseFB() return { type="LocalFunctionDefinition", name=n, functionDef=fb } else local names={eat("identifier").value} while try("punctuation",",") do names[#names+1]=eat("identifier").value end local values={} if try("punctuation","=") then values[#values+1]=parseExpr() while try("punctuation",",") do values[#values+1]=parseExpr() end end return { type="LocalDefinition", names=names, values=values } end elseif t.type=="keyword" and t.value=="function" then adv(); local n=eat("identifier").value; local chain={n} while chk("punctuation",".") do adv(); chain[#chain+1]=eat("identifier").value end local isM=false if chk("punctuation",":") then adv(); chain[#chain+1]=eat("identifier").value; isM=true end local fb=parseFB() return { type="GlobalFunctionDefinition", chain=chain, isMethod=isM, functionDef=fb } elseif t.type=="keyword" and t.value=="return" then adv(); local args={} if not ENDS[Tv()] and not chk("punctuation",";") then args[#args+1]=parseExpr() while try("punctuation",",") do args[#args+1]=parseExpr() end end try("punctuation",";") return { type="ReturnStatement", arguments=args } elseif t.type=="keyword" and t.value=="if" then adv(); local clauses={} clauses[#clauses+1]={ condition=parseExpr(), body=parseBlock() } while chk("keyword","elseif") do adv(); clauses[#clauses+1]={ condition=parseExpr(), body=parseBlock() } end local elseBody=nil if try("keyword","else") then elseBody=parseBlock() end eat("keyword","end") return { type="IfStatement", clauses=clauses, elseBody=elseBody } elseif t.type=="keyword" and t.value=="while" then adv(); local cond=parseExpr(); eat("keyword","do"); local body=parseBlock(); eat("keyword","end") return { type="WhileStatement", condition=cond, body=body } elseif t.type=="keyword" and t.value=="repeat" then adv(); local body=parseBlock(); eat("keyword","until"); local cond=parseExpr() return { type="RepeatUntilStatement", body=body, condition=cond } elseif t.type=="keyword" and t.value=="for" then adv(); local vn=eat("identifier").value if try("punctuation","=") then local start=parseExpr(); eat("punctuation",","); local limit=parseExpr(); local step=nil if try("punctuation",",") then step=parseExpr() end eat("keyword","do"); local body=parseBlock(); eat("keyword","end") return { type="ForNumericStatement", variable=vn, start=start, limit=limit, step=step, body=body } else local names={vn} while not chk("keyword","in") do try("punctuation",","); if chk("identifier") then names[#names+1]=eat("identifier").value end end eat("keyword","in"); local iters={} iters[#iters+1]=parseExpr() while try("punctuation",",") do iters[#iters+1]=parseExpr() end eat("keyword","do"); local body=parseBlock(); eat("keyword","end") return { type="ForGenericStatement", variables=names, iterators=iters, body=body } end elseif t.type=="keyword" and t.value=="do" then adv(); local body=parseBlock(); eat("keyword","end"); return { type="DoStatement", body=body } elseif t.type=="keyword" and t.value=="break" then adv(); return { type="BreakStatement" } elseif t.type=="keyword" and t.value=="continue" then adv(); return { type="ContinueStatement" } elseif t.type=="identifier" or (t.type=="punctuation" and t.value=="(") then local firstExpr = parseExpr() local isCompound = false local cOp = "" local nxtVal = T().value if (nxtVal=="+" or nxtVal=="-" or nxtVal=="*" or nxtVal=="/" or nxtVal=="%" or nxtVal=="^" or nxtVal=="..") and Pt(2)=="punctuation" and Pv(2)=="=" then isCompound = true cOp = nxtVal adv(); adv() end if isCompound then local rhs = { parseExpr() } while try("punctuation",",") do rhs[#rhs+1] = parseExpr() end try("punctuation",";") rhs[1] = { type="BinaryExpression", operator=cOp, left=firstExpr, right=rhs[1] } return { type="AssignmentStatement", lhs={firstExpr}, rhs=rhs } elseif chk("punctuation","=") or chk("punctuation",",") then local lhs = { firstExpr } while try("punctuation",",") do lhs[#lhs+1] = parseExpr() end eat("punctuation","=") local rhs = { parseExpr() } while try("punctuation",",") do rhs[#rhs+1] = parseExpr() end try("punctuation",";") return { type="AssignmentStatement", lhs=lhs, rhs=rhs } else try("punctuation",";") return { type="ExpressionStatement", expression=firstExpr } end elseif t.type=="punctuation" and t.value==";" then adv() else adv() end try("punctuation",";") end parseBlock = function() local block = {} while Tt()~="eof" and not (Tt()=="keyword" and ENDS[Tv()]) do local s=parseStat() if s then block[#block+1]=s end end return block end return { type="Chunk", body=parseBlock() } end local function compileAST(ast, OC) local function newP(np, parent) return {c={},k={},ki={},np=np or 0,mr=np or 0,sc={{}},lc=np or 0,pr={},va=false,sub_c={},loopStack={},upvalues={},parent=parent} end local function getOrAddStrKey(p, str) local lookup = "enc_str:"..str if p.ki[lookup] ~= nil then return p.ki[lookup], p.k[p.ki[lookup]+1].key end local k_key = math.random(1, 255) + (#str * math.random(1, 255)) local k_obj = {type="enc_string", val=str, key=k_key} local i = #p.k p.k[i+1] = k_obj p.ki[lookup] = i return i, k_key end local function addK(p,v) local key=type(v)..":"..tostring(v) if p.ki[key]~=nil then return p.ki[key] end local i=#p.k; p.k[i+1]=v; p.ki[key]=i; return i end local function emit(p,...) p.c[#p.c+1]={...}; return #p.c-1 end local function patch(p,i,t2) p.c[i+1][2]=t2 end local function aR(p) local r=p.lc; p.lc=r+1; if p.lc>p.mr then p.mr=p.lc end; return r end local function fR(p) p.lc=p.lc-1 end local function nL(p,n) local r=aR(p); p.sc[#p.sc][#p.sc[#p.sc]+1]={n=n,r=r}; return r end local function fL(p,n) for s=#p.sc,1,-1 do for i=#p.sc[s],1,-1 do if p.sc[s][i].n==n then return p.sc[s][i].r end end end return nil end local function resolveUpval(p, name) if not p.parent then return nil end local r = fL(p.parent, name) if r then for i, uv in ipairs(p.upvalues) do if uv.isLocal and uv.index == r then return i - 1 end end table.insert(p.upvalues, {isLocal = true, index = r}) return #p.upvalues - 1 end local ur = resolveUpval(p.parent, name) if ur then for i, uv in ipairs(p.upvalues) do if not uv.isLocal and uv.index == ur then return i - 1 end end table.insert(p.upvalues, {isLocal = false, index = ur}) return #p.upvalues - 1 end return nil end local function pushS(p) p.sc[#p.sc+1]={} end local function popS(p) local s=p.sc[#p.sc]; p.lc=p.lc-#s; p.sc[#p.sc]=nil end local function emitPUSH_REG(p, reg) return emit(p, OC.M_PUSH_REG, reg) end local function emitPUSH_K(p, k_idx) return emit(p, OC.M_PUSH_K, k_idx) end local function emitPUSH_LIT(p, val) return emit(p, OC.M_PUSH_LIT, val) end local function eJMP(p, target) local i=emitPUSH_LIT(p, target); emit(p, OC.M_JMP); return i end local function emitMOVE(p, dst, src) emit(p, OC.M_FETCH_REG_ID, src) emit(p, OC.M_WRITE_REG, dst) end local function emitALU(p, op, dst, src1, src2) emit(p, OC.M_PUSH_REG, src1) emit(p, OC.M_PUSH_REG, src2) emit(p, OC.M_POP_ALU_B) emit(p, OC.M_POP_ALU_A) emit(p, op) emit(p, OC.M_WRITE_REG, dst) end local function emitALU_UNARY(p, op, dst, src) emit(p, OC.M_PUSH_REG, src) emit(p, op) emit(p, OC.M_WRITE_REG, dst) end local function eCmp(p,op,dst,B,C) emitPUSH_LIT(p, 1); emitPUSH_REG(p, B); emitPUSH_REG(p, C); emit(p, op) local j1=eJMP(p, 0) emitPUSH_LIT(p, 0); emitPUSH_LIT(p, 0); emit(p, OC.M_LOADBOOL, dst) local j2=eJMP(p, 0) patch(p, j1, #p.c + 1) emitPUSH_LIT(p, 1); emitPUSH_LIT(p, 0); emit(p, OC.M_LOADBOOL, dst) patch(p, j2, #p.c + 1) end local function emitLOADK_NonLinearMBA(p, dst, val) if type(val) == "number" and val == math.floor(val) and val >= 0 and val <= 2147483647 then local xkey = math.random(1, 65535) local enc = bit32.bxor(math.floor(val), xkey) emitPUSH_LIT(p, enc) emitPUSH_LIT(p, xkey) emit(p, OC.M_POP_ALU_B) emit(p, OC.M_POP_ALU_A) emit(p, OC.M_ALU_BXOR) emit(p, OC.M_WRITE_REG, dst) else local mask = math.random(10, 9999) local enc_val = val - mask local k_idx = #p.k p.k[k_idx + 1] = enc_val p.ki["__enc_flt_" .. k_idx] = k_idx emitPUSH_K(p, k_idx) emitPUSH_LIT(p, mask) emit(p, OC.M_POP_ALU_B) emit(p, OC.M_POP_ALU_A) emit(p, OC.M_ALU_ADD) emit(p, OC.M_WRITE_REG, dst) end end local compileExpr, compileStat, compileBlock compileExpr = function(p, node, dst) if node.type == "Literal" then if node.kind == "number" then emitLOADK_NonLinearMBA(p, dst, node.value) elseif node.kind == "string" then local strID, strKey = getOrAddStrKey(p, node.value) emitPUSH_K(p, strID); emit(p, OC.M_EXEC_SUB, dst, strKey) elseif node.kind == "boolean" then emitPUSH_LIT(p, node.value and 1 or 0); emitPUSH_LIT(p, 0); emit(p, OC.M_LOADBOOL, dst) elseif node.kind == "nil" then emitPUSH_LIT(p, dst); emitPUSH_LIT(p, dst); emit(p, OC.M_LOADNIL) end elseif node.type == "VarargLiteral" then emitPUSH_LIT(p, dst); emitPUSH_LIT(p, dst); emit(p, OC.M_LOADNIL) elseif node.type == "FunctionDefinition" then local fp=newP(#node.params, p); fp.va=node.isVararg pushS(fp) for i, pn in ipairs(node.params) do local r = i - 1 fp.sc[#fp.sc][#fp.sc[#fp.sc]+1] = {n = pn, r = r} end compileBlock(fp, node.body) popS(fp) emitPUSH_LIT(fp, 0); emitPUSH_LIT(fp, 0); emit(fp, OC.M_RETURN) local pi=#p.pr; p.pr[pi+1]=fp emitPUSH_LIT(p, pi); emit(p, OC.M_CLOSURE, dst) elseif node.type == "Identifier" then local r=fL(p, node.name) if r then if dst~=r then emitMOVE(p, dst, r) end else local u = resolveUpval(p, node.name) if u then emitPUSH_LIT(p, u) emit(p, OC.M_GETUPVAL, dst) else local strID, strKey = getOrAddStrKey(p, node.name) emitPUSH_K(p, strID); emit(p, OC.M_GETGLOBAL, dst, strKey) end end elseif node.type == "UnaryExpression" then compileExpr(p, node.argument, dst) if node.operator == "not" then emitALU_UNARY(p, OC.M_ALU_NOT, dst, dst) elseif node.operator == "-" then emitALU_UNARY(p, OC.M_ALU_UNM, dst, dst) elseif node.operator == "#" then emitALU_UNARY(p, OC.M_ALU_LEN, dst, dst) elseif node.operator == "~" then emitALU_UNARY(p, OC.M_ALU_BNOT, dst, dst) end elseif node.type == "TableLiteral" then emit(p, OC.M_NEWTABLE, dst) local idx=1 for _, field in ipairs(node.fields) do if field.key then local kr=aR(p); local vr=aR(p) compileExpr(p, field.key, kr); compileExpr(p, field.value, vr) emitPUSH_REG(p, dst); emitPUSH_REG(p, kr); emitPUSH_REG(p, vr); emit(p, OC.M_SETTABLE); fR(p); fR(p) else local kr=aR(p); local vr=aR(p) emitLOADK_NonLinearMBA(p, kr, idx); compileExpr(p, field.value, vr) emitPUSH_REG(p, dst); emitPUSH_REG(p, kr); emitPUSH_REG(p, vr); emit(p, OC.M_SETTABLE); fR(p); fR(p); idx=idx+1 end end elseif node.type == "BinaryExpression" then compileExpr(p, node.left, dst) local rr=aR(p); compileExpr(p, node.right, rr) local op=node.operator if op=="+" then emitALU(p, OC.M_ALU_ADD, dst, dst, rr) elseif op=="-" then emitALU(p, OC.M_ALU_SUB, dst, dst, rr) elseif op=="*" then emitALU(p, OC.M_ALU_MUL, dst, dst, rr) elseif op=="/" then emitALU(p, OC.M_ALU_DIV, dst, dst, rr) elseif op=="%" then emitALU(p, OC.M_ALU_MOD, dst, dst, rr) elseif op=="^" then emitALU(p, OC.M_ALU_POW, dst, dst, rr) elseif op==".." then emitPUSH_LIT(p, dst); emitPUSH_LIT(p, rr); emit(p, OC.M_CONCAT, dst) elseif op=="//" then emitALU(p, OC.M_ALU_IDIV, dst, dst, rr) elseif op=="&" then emitALU(p, OC.M_ALU_BAND, dst, dst, rr) elseif op=="|" then emitALU(p, OC.M_ALU_BOR, dst, dst, rr) elseif op=="~" then emitALU(p, OC.M_ALU_BXOR, dst, dst, rr) elseif op=="<<" then emitALU(p, OC.M_ALU_SHL, dst, dst, rr) elseif op==">>" then emitALU(p, OC.M_ALU_SHR, dst, dst, rr) elseif op=="==" then eCmp(p,OC.M_EQ,dst,dst,rr) elseif op=="~=" then emitPUSH_LIT(p, 0); emitPUSH_REG(p, dst); emitPUSH_REG(p, rr); emit(p, OC.M_EQ); local j=eJMP(p, 0) emitPUSH_LIT(p, 0); emitPUSH_LIT(p, 0); emit(p, OC.M_LOADBOOL, dst); local j2=eJMP(p, 0) patch(p,j,#p.c + 1); emitPUSH_LIT(p, 1); emitPUSH_LIT(p, 0); emit(p, OC.M_LOADBOOL, dst); patch(p,j2,#p.c + 1) elseif op=="<" then eCmp(p,OC.M_LT,dst,dst,rr) elseif op=="<=" then eCmp(p,OC.M_LE,dst,dst,rr) elseif op==">" then eCmp(p,OC.M_LT,dst,rr,dst) elseif op==">=" then eCmp(p,OC.M_LE,dst,rr,dst) elseif op=="and" then emitPUSH_REG(p, dst); emitPUSH_LIT(p, 0); emit(p, OC.M_TEST); local j=eJMP(p, 0) emitMOVE(p, dst, rr); patch(p,j,#p.c + 1) elseif op=="or" then emitPUSH_REG(p, dst); emitPUSH_LIT(p, 1); emit(p, OC.M_TEST); local j=eJMP(p, 0) emitMOVE(p, dst, rr); patch(p,j,#p.c + 1) end fR(p) elseif node.type == "MemberExpression" then compileExpr(p, node.base, dst) local strID, strKey = getOrAddStrKey(p, node.identifier) local kr=aR(p); emitPUSH_K(p, strID); emit(p, OC.M_EXEC_SUB, kr, strKey) emitPUSH_REG(p, dst); emitPUSH_REG(p, kr); emit(p, OC.M_GETTABLE, dst); fR(p) elseif node.type == "IndexExpression" then compileExpr(p, node.base, dst) local kr=aR(p); compileExpr(p, node.index, kr) emitPUSH_REG(p, dst); emitPUSH_REG(p, kr); emit(p, OC.M_GETTABLE, dst); fR(p) elseif node.type == "CallExpression" then if node.isSelf then local t_base = aR(p) compileExpr(p, node.base, t_base) local sk = aR(p) local c_base = aR(p) local self_reserved = aR(p) local na = 1 local string_args = {} for _, arg in ipairs(node.arguments) do local ar = aR(p) if arg.type == "Literal" and arg.kind == "string" then table.insert(string_args, {node = arg, reg = ar}) else compileExpr(p, arg, ar) end na = na + 1 end local strID, strKey = getOrAddStrKey(p, node.method) emitPUSH_K(p, strID) emit(p, OC.M_EXEC_SUB, sk, strKey) emitPUSH_REG(p, t_base) emitPUSH_REG(p, sk) emit(p, OC.M_SELF, c_base) emit(p, OC.M_SECURE_ERASE, sk) for _, sArg in ipairs(string_args) do compileExpr(p, sArg.node, sArg.reg) end emitPUSH_LIT(p, c_base) emitPUSH_LIT(p, na) emitPUSH_LIT(p, 1) emit(p, OC.M_CALL) if dst ~= c_base then emitMOVE(p, dst, c_base) end for _, sArg in ipairs(string_args) do emit(p, OC.M_SECURE_ERASE, sArg.reg) end for _ = 1, na + 3 do fR(p) end else local c_base = aR(p) compileExpr(p, node.base, c_base) local na = 0 local string_args = {} for _, arg in ipairs(node.arguments) do local ar = aR(p) if arg.type == "Literal" and arg.kind == "string" then table.insert(string_args, {node = arg, reg = ar}) else compileExpr(p, arg, ar) end na = na + 1 end for _, sArg in ipairs(string_args) do compileExpr(p, sArg.node, sArg.reg) end emitPUSH_LIT(p, c_base) emitPUSH_LIT(p, na) emitPUSH_LIT(p, 1) emit(p, OC.M_CALL) if dst ~= c_base then emitMOVE(p, dst, c_base) end for _, sArg in ipairs(string_args) do emit(p, OC.M_SECURE_ERASE, sArg.reg) end for _ = 1, na + 1 do fR(p) end end end end compileStat = function(p, node) if node.type == "LocalDefinition" then local rs={} for _, n in ipairs(node.names) do rs[#rs+1]=nL(p, n) emitPUSH_LIT(p, rs[#rs]); emitPUSH_LIT(p, rs[#rs]); emit(p, OC.M_LOADNIL) end for i, valNode in ipairs(node.values) do if rs[i] then compileExpr(p, valNode, rs[i]) if valNode.type == "CallExpression" and i == #node.values and #rs > i then local req_nrv = #rs - i + 1 for b = #p.c, 1, -1 do if p.c[b][1] == OC.M_CALL then if p.c[b-1] and p.c[b-1][1] == OC.M_PUSH_LIT then p.c[b-1][2] = req_nrv local c_base = p.c[b-3][2] for j = 1, req_nrv - 1 do emitMOVE(p, rs[i + j], c_base + j) end end break end end else end end end elseif node.type == "LocalFunctionDefinition" then local r=nL(p, node.name) emitPUSH_LIT(p, r); emitPUSH_LIT(p, r); emit(p, OC.M_LOADNIL) compileExpr(p, node.functionDef, r) elseif node.type == "GlobalFunctionDefinition" then local chain=node.chain local tmp=aR(p); compileExpr(p, node.functionDef, tmp) if node.isMethod and p.pr[#p.pr] then p.pr[#p.pr].np = p.pr[#p.pr].np+1 end if #chain==1 then local r=fL(p, chain[1]) if r then emitMOVE(p, r, tmp) else local strID, strKey = getOrAddStrKey(p, chain[1]) emitPUSH_K(p, strID); emitPUSH_REG(p, tmp); emit(p, OC.M_SETGLOBAL, strKey) end else local tr=aR(p); local r=fL(p, chain[1]) if r then emitMOVE(p, tr, r) else local strID1, strKey1 = getOrAddStrKey(p, chain[1]) emitPUSH_K(p, strID1); emit(p, OC.M_GETGLOBAL, tr, strKey1) end for i=2,#chain-1 do local strID_i, strKey_i = getOrAddStrKey(p, chain[i]) local kr=aR(p); emitPUSH_K(p, strID_i); emit(p, OC.M_EXEC_SUB, kr, strKey_i) emitPUSH_REG(p, tr); emitPUSH_REG(p, kr); emit(p, OC.M_GETTABLE, tr); fR(p) end local strID_l, strKey_l = getOrAddStrKey(p, chain[#chain]) local kr=aR(p); emitPUSH_K(p, strID_l); emit(p, OC.M_EXEC_SUB, kr, strKey_l) emitPUSH_REG(p, tr); emitPUSH_REG(p, kr); emitPUSH_REG(p, tmp); emit(p, OC.M_SETTABLE); fR(p); fR(p) end fR(p) elseif node.type == "ReturnStatement" then local nb=#node.arguments local base=p.lc if nb > 0 then for i, arg in ipairs(node.arguments) do local r=aR(p); compileExpr(p, arg, r) end emitPUSH_LIT(p, base); emitPUSH_LIT(p, nb); emit(p, OC.M_RETURN) for _=1,nb do fR(p) end else emitPUSH_LIT(p, 0); emitPUSH_LIT(p, 0); emit(p, OC.M_RETURN) end elseif node.type == "IfStatement" then local done={} for _, clause in ipairs(node.clauses) do local cr=aR(p); compileExpr(p, clause.condition, cr) emitPUSH_REG(p, cr); emitPUSH_LIT(p, 0); emit(p, OC.M_TEST); fR(p) local jf=eJMP(p, 0); pushS(p); compileBlock(p, clause.body); popS(p) local je=eJMP(p, 0); done[#done+1]=je; patch(p, jf, #p.c + 1) end if node.elseBody then pushS(p); compileBlock(p, node.elseBody); popS(p) end for _, j in ipairs(done) do patch(p, j, #p.c + 1) end elseif node.type == "WhileStatement" then local top=#p.c; local cr=aR(p); compileExpr(p, node.condition, cr) emitPUSH_REG(p, cr); emitPUSH_LIT(p, 0); emit(p, OC.M_TEST); fR(p); local jf=eJMP(p, 0) p.loopStack = p.loopStack or {} table.insert(p.loopStack, {breaks={}, continues={}}) pushS(p); compileBlock(p, node.body); popS(p) local lctx = table.remove(p.loopStack) for _, cj in ipairs(lctx.continues) do patch(p, cj, top + 1) end eJMP(p, top + 1); patch(p, jf, #p.c + 1) for _, bj in ipairs(lctx.breaks) do patch(p, bj, #p.c + 1) end elseif node.type == "RepeatUntilStatement" then local top=#p.c; pushS(p); p.loopStack = p.loopStack or {} table.insert(p.loopStack, {breaks={}, continues={}}) compileBlock(p, node.body); popS(p) local lctx = table.remove(p.loopStack) local contTarget = #p.c + 1 for _, cj in ipairs(lctx.continues) do patch(p, cj, contTarget) end local cr=aR(p); compileExpr(p, node.condition, cr) emitPUSH_REG(p, cr); emitPUSH_LIT(p, 0); emit(p, OC.M_TEST); fR(p); eJMP(p, top + 1) for _, bj in ipairs(lctx.breaks) do patch(p, bj, #p.c + 1) end elseif node.type == "ForNumericStatement" then pushS(p) local ir=nL(p,"__i") local lr=nL(p,"__l") local sr=nL(p,"__s") local vr=nL(p, node.variable) compileExpr(p, node.start, ir); compileExpr(p, node.limit, lr) if node.step then compileExpr(p, node.step, sr) else emitLOADK_NonLinearMBA(p, sr, 1) end local p_ir1 = emitPUSH_LIT(p, ir); local pi2 = emitPUSH_LIT(p, 0); emit(p, OC.M_FORPREP) local bodyStart = #p.c + 1 emitMOVE(p, vr, ir) p.loopStack = p.loopStack or {} table.insert(p.loopStack, {breaks={}, continues={}}) compileBlock(p, node.body) local lctx = table.remove(p.loopStack) local p_ir2 = emitPUSH_LIT(p, ir); for _, cj in ipairs(lctx.continues) do patch(p, cj, p_ir2) end local li = emitPUSH_LIT(p, 0); emit(p, OC.M_FORLOOP) patch(p, pi2, p_ir2 + 1) patch(p, li, bodyStart) for _, bj in ipairs(lctx.breaks) do patch(p, bj, #p.c + 1) end popS(p) elseif node.type == "ForGenericStatement" then pushS(p) local itr=nL(p,"__it"); local str2=nL(p,"__st"); local ctl=nL(p,"__ct") compileExpr(p, node.iterators[1] or {type="Literal",kind="nil"}, itr) if node.iterators[1] and node.iterators[1].type == "CallExpression" and not node.iterators[2] then for b = #p.c, 1, -1 do if p.c[b][1] == OC.M_CALL then if p.c[b-1] and p.c[b-1][1] == OC.M_PUSH_LIT then p.c[b-1][2] = 3 local c_base = p.c[b-3][2] emitMOVE(p, str2, c_base + 1) emitMOVE(p, ctl, c_base + 2) end break end end end if node.iterators[2] then compileExpr(p, node.iterators[2], str2) end if node.iterators[3] then compileExpr(p, node.iterators[3], ctl) end local vrs={} for _, vname in ipairs(node.variables) do vrs[#vrs+1]=nL(p, vname) end local call_base = aR(p) local call_arg1 = aR(p) local call_arg2 = aR(p) local top=#p.c emitMOVE(p, call_base, itr) emitMOVE(p, call_arg1, str2) emitMOVE(p, call_arg2, ctl) emitPUSH_LIT(p, call_base) emitPUSH_LIT(p, 2) emitPUSH_LIT(p, #node.variables) emit(p, OC.M_CALL) emitMOVE(p, ctl, call_base) for i, vr in ipairs(vrs) do emitMOVE(p, vr, call_base + i - 1) end local nr=aR(p) emitPUSH_LIT(p, nr) emitPUSH_LIT(p, nr) emit(p, OC.M_LOADNIL) emitPUSH_LIT(p, 1) emitPUSH_REG(p, ctl) emitPUSH_REG(p, nr) emit(p, OC.M_EQ) fR(p) local jf=eJMP(p, 0) p.loopStack = p.loopStack or {} table.insert(p.loopStack, {breaks={}, continues={}}) compileBlock(p, node.body) local lctx = table.remove(p.loopStack) for _, cj in ipairs(lctx.continues) do patch(p, cj, top + 1) end eJMP(p, top + 1) patch(p, jf, #p.c + 1) for _, bj in ipairs(lctx.breaks) do patch(p, bj, #p.c + 1) end popS(p) elseif node.type == "DoStatement" then pushS(p); compileBlock(p, node.body); popS(p) elseif node.type == "BreakStatement" then local j = eJMP(p, 0) if p.loopStack and #p.loopStack > 0 then table.insert(p.loopStack[#p.loopStack].breaks, j) end elseif node.type == "ContinueStatement" then local j = eJMP(p, 0) if p.loopStack and #p.loopStack > 0 then table.insert(p.loopStack[#p.loopStack].continues, j) end elseif node.type == "ExpressionStatement" then local dr=aR(p); compileExpr(p, node.expression, dr); fR(p) elseif node.type == "AssignmentStatement" then local compiledRhs={} for i, rhsNode in ipairs(node.rhs) do local rr=aR(p) compileExpr(p, rhsNode, rr) compiledRhs[#compiledRhs+1]=rr if rhsNode.type == "CallExpression" and i == #node.rhs and #node.lhs > i then local req_nrv = #node.lhs - i + 1 for b = #p.c, 1, -1 do if p.c[b][1] == OC.M_CALL then if p.c[b-1] and p.c[b-1][1] == OC.M_PUSH_LIT then p.c[b-1][2] = req_nrv local c_base = p.c[b-3][2] for j = 1, req_nrv - 1 do local evr = aR(p) emitMOVE(p, evr, c_base + j) compiledRhs[#compiledRhs+1] = evr end end break end end end end for i, lhsNode in ipairs(node.lhs) do local vr=compiledRhs[i] if not vr then break end if lhsNode.type == "Identifier" then local r=fL(p, lhsNode.name) if r then emitMOVE(p, r, vr) else local u = resolveUpval(p, lhsNode.name) if u then emitPUSH_LIT(p, u) emitPUSH_REG(p, vr) emit(p, OC.M_SETUPVAL) else local strID, strKey = getOrAddStrKey(p, lhsNode.name) emitPUSH_K(p, strID); emitPUSH_REG(p, vr); emit(p, OC.M_SETGLOBAL, strKey) end end elseif lhsNode.type == "MemberExpression" then local tr=aR(p); compileExpr(p, lhsNode.base, tr) local strID, strKey = getOrAddStrKey(p, lhsNode.identifier) local kr=aR(p); emitPUSH_K(p, strID); emit(p, OC.M_EXEC_SUB, kr, strKey) emitPUSH_REG(p, tr); emitPUSH_REG(p, kr); emitPUSH_REG(p, vr); emit(p, OC.M_SETTABLE); fR(p); fR(p) elseif lhsNode.type == "IndexExpression" then local tr=aR(p); compileExpr(p, lhsNode.base, tr) local kr=aR(p); compileExpr(p, lhsNode.index, kr) emitPUSH_REG(p, tr); emitPUSH_REG(p, kr); emitPUSH_REG(p, vr); emit(p, OC.M_SETTABLE); fR(p); fR(p) end end for _=1, #compiledRhs do fR(p) end end end compileBlock = function(p, block) for _, stat in ipairs(block) do compileStat(p, stat) end end local root=newP(0) root.va=true pushS(root) compileBlock(root, ast.body) emit(root, OC.M_HALT) return root end local function peepholeOptimize(proto, OC) local superMap = {} local superCount = 0 local usedOpcodes = {} for _, val in pairs(OC) do usedOpcodes[val] = true end local function fop() local val repeat val = math.random(1, 65535) until not usedOpcodes[val] usedOpcodes[val] = true return val end local reverseOC = {} for k, v in pairs(OC) do reverseOC[v] = k end local function getName(val) return reverseOC[val] end local safeOpMap = {} local function isSafeFast(op) if safeOpMap[op] ~= nil then return safeOpMap[op] end local opName = reverseOC[op] if opName and string.sub(opName, 1, 8) == "M_SUPER_" then safeOpMap[op] = false return false end local safe = op ~= OC.M_JMP and op ~= OC.M_TEST and op ~= OC.M_EQ and op ~= OC.M_LT and op ~= OC.M_LE and op ~= OC.M_FORPREP and op ~= OC.M_FORLOOP and op ~= OC.M_CALL and op ~= OC.M_RETURN and op ~= OC.M_HALT and op ~= OC.M_EXEC_SUB and op ~= OC.M_GETGLOBAL and op ~= OC.M_SETGLOBAL and op ~= OC.M_LOADBOOL safeOpMap[op] = safe return safe end local function findAndApply(p) local pairsCount = {} local function count(p_inner) for i = 1, #p_inner.c - 1 do local op1 = p_inner.c[i][1] local op2 = p_inner.c[i+1][1] if isSafeFast(op1) and isSafeFast(op2) then local key = (op1 * 256) + op2 pairsCount[key] = (pairsCount[key] or 0) + 1 end end for _, sp in ipairs(p_inner.pr) do count(sp) end end count(p) local bestPair, maxCount = nil, 0 for k, c in pairs(pairsCount) do if c > maxCount then maxCount = c; bestPair = k end end if maxCount >= 2 then local o2 = bestPair % 256 local o1 = math.floor(bestPair / 256) superCount = superCount + 1 local superName = "M_SUPER_" .. superCount local superVal = fop() OC[superName] = superVal reverseOC[superVal] = superName superMap[superName] = {getName(o1), getName(o2)} local function apply(p_inner) local _skip_next = false for i = 1, #p_inner.c - 1 do if _skip_next then _skip_next = false elseif p_inner.c[i][1] == o1 and p_inner.c[i+1][1] == o2 then p_inner.c[i][1] = superVal _skip_next = true end end for _, sp in ipairs(p_inner.pr) do apply(sp) end end apply(p) return true end return false end for iter = 1, 15 do if not findAndApply(proto) then break end end return superMap end local function serialize(proto, OC, opMap, pk, mathProxy, stringChar, genMathCall, numKey) local function sNum(v) if v==math.floor(v) and v>=0 and v<=0xFFFF then return "("..genMathCall(v, mathProxy)..")" end return tostring(v) end local function sK(v) if type(v)=="number" then return sNum(v) elseif type(v)=="boolean" then return tostring(v) elseif v==nil then return "nil" elseif type(v)=="table" and v.type=="enc_string" then local nums={} for i=1,#v.val do nums[i] = bit32.bxor(string.byte(v.val,i), v.key) end return "{"..pk.dKey.."={"..table.concat(nums,",").."}}" elseif type(v)=="string" then if v == "" then return "''" end local chunkSize = (#v > 500) and math.random(50, 100) or math.random(2, 4) local chunks = {} local i = 1 while i <= #v do chunks[#chunks+1] = string.sub(v, i, i + chunkSize - 1) i = i + chunkSize end local memKeys = {} local usedKeys = {} for _ = 1, #chunks do local k repeat k = math.random(10000, 99999) until not usedKeys[k] usedKeys[k] = true memKeys[#memKeys+1] = k end local insertOrder = {} for idx = 1, #chunks do insertOrder[idx] = idx end for idx = #insertOrder, 2, -1 do local rand = math.random(idx) insertOrder[idx], insertOrder[rand] = insertOrder[rand], insertOrder[idx] end local masterXor = math.random(1, 255) local memInit = {} for _, idx in ipairs(insertOrder) do local chunk = chunks[idx] local mKey = memKeys[idx] local bytes = {} for j = 1, #chunk do bytes[#bytes+1] = bit32.bxor(string.byte(chunk, j), masterXor) end memInit[#memInit+1] = "["..mKey.."]={"..table.concat(bytes,",").."}" end local memVar, ptrVar = newVar(), newVar() local genFunc, stateVar, kVar = newVar(), newVar(), newVar() local chunkVar, jVar, sVar = newVar(), newVar(), newVar() local encK = genMathCall(masterXor, mathProxy) return "(function() local "..memVar.."={"..table.concat(memInit, ",").."}; local "..ptrVar.."={"..table.concat(memKeys, ",").."}; local _k="..encK.."; local function "..genFunc.."("..stateVar..") if "..stateVar..">#"..ptrVar.." then return '' end; local "..kVar.."="..ptrVar.."["..stateVar.."]; local "..chunkVar.."="..memVar.."["..kVar.."]; local "..sVar.."=''; for "..jVar.."=1,#"..chunkVar.." do "..sVar.."="..sVar.."..string.char(bit32.bxor("..chunkVar.."["..jVar.."],_k)); end; "..memVar.."["..kVar.."]=nil; local _ret="..sVar..".."..genFunc.."("..stateVar.."+1); "..sVar.."=nil; return _ret; end; return "..genFunc.."(1) end)()" else return "nil" end end local function sProto(p) local cp={} local order={} local expH = 0 local secret_seed = math.random(1000, 9999) for i = 1, #p.c do local poly_key = ( (i * i * 197) + (i * 83) + secret_seed ) % 4294967296 local ins = p.c[i] local orig_op = ins[1] if orig_op == OC.M_EXEC_SUB or orig_op == OC.M_GETGLOBAL then local K_D = bit32.bxor(i, bit32.bxor(bit32.rshift(poly_key, 2), orig_op)) ins[3] = bit32.bxor(ins[3], K_D) elseif orig_op == OC.M_SETGLOBAL then local K_D = bit32.bxor(i, bit32.bxor(bit32.rshift(poly_key, 2), orig_op)) ins[2] = bit32.bxor(ins[2], K_D) end ins[1] = bit32.bxor(ins[1], poly_key) if ins[2] then ins[2] = bit32.bxor(ins[2], poly_key) end if ins[3] then ins[3] = bit32.bxor(ins[3], poly_key) end for j=1, #ins do expH = (expH + ins[j]) % 4294967296 end end local bcFingerprint = 0 for i = 1, #p.c do local ins = p.c[i] for j = 1, #ins do bcFingerprint = bit32.bxor(bcFingerprint, ins[j] or 0) bcFingerprint = (bcFingerprint * 16777619 + 1) % 4294967296 end end local constKey = ( (bcFingerprint * bcFingerprint * 197) + (bcFingerprint * 83) + secret_seed ) % 4294967296 local ec1v = bit32.bxor(256, constKey) local ec2v = bit32.bxor(9, bit32.bxor(constKey, 0x11)) local ec3v = bit32.bxor(36, bit32.bxor(constKey, 0x22)) for i=1,#p.c do order[i]=i end for i=#order,2,-1 do local j=math.random(i) order[i],order[j]=order[j],order[i] end local b92 = " !#$%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~" local function toB92(num) if num == 0 then return string.sub(b92, 1, 1) end local res = "" while num > 0 do local rem = num % 92 res = string.sub(b92, rem + 1, rem + 1) .. res num = math.floor(num / 92) end return res end for _,orig_idx in ipairs(order) do local ins=p.c[orig_idx] local ip={toB92(orig_idx), toB92(ins[1])} if ins[2] then ip[#ip+1]=toB92(ins[2]) end if ins[3] then ip[#ip+1]=toB92(ins[3]) end cp[#cp+1]=table.concat(ip,"'") end local kp={} for i=1, #p.k do local kv = p.k[i] local val_expr = sK(kv) if i == 1 then kp[#kp+1]="if _c_id == "..(i-1).." then return "..val_expr else kp[#kp+1]="elseif _c_id == "..(i-1).." then return "..val_expr end end local pool_func = "" if #kp > 0 then pool_func = "function(_c_id) "..table.concat(kp, " ").." else return nil end end" else pool_func = "function(_c_id) return nil end" end local sub_p = {} if not p.sub_c or #p.sub_c == 0 then p.sub_c = { {OC.SUB_OP_DEC, 0}, {OC.SUB_OP_RET, 0} } end for _, ins in ipairs(p.sub_c) do sub_p[#sub_p+1] = "{"..bit32.bxor(ins[1], secret_seed % 256)..","..bit32.bxor(ins[2] or 0, secret_seed % 256).."}" end local pp={} for _,sp in ipairs(p.pr) do pp[#pp+1]=sProto(sp) end local uv_p = {} if p.upvalues then for _, uv in ipairs(p.upvalues) do uv_p[#uv_p+1] = "{"..(uv.isLocal and "1" or "0")..","..uv.index.."}" end end local encoded_seed = bit32.bxor(secret_seed, expH % 65536) local b92Decoder = "(function(s) local b=' !#$%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~' local m={} for i=1,92 do m[string.sub(b,i,i)]=i-1 end local function f(str) local num=0 for i=1,#str do num=num*92+m[string.sub(str,i,i)] end return num end local t={} for p in string.gmatch(s,'([^\"]+)') do local g=string.gmatch(p,\"([^']+)\") local idx=f(g()) local r={} for v in g do r[#r+1]=f(v) end t[idx]=r end return t end)" local safe_payload = table.concat(cp, "\""):gsub("\"", "\\\"") return "{"..pk.c.."="..b92Decoder.."(\""..safe_payload.."\"),sub_c={"..table.concat(sub_p,",").."},"..pk.k.."="..pool_func ..","..pk.np.."="..p.np..",upvalues={"..table.concat(uv_p,",").."},"..pk.va.."="..(p.va and 1 or 0) ..","..pk.pr.."={"..table.concat(pp,",").."},"..pk.mr.."="..(p.mr or 0)..","..pk.hash.."="..expH..","..pk.seed.."="..encoded_seed..","..pk.ec1.."="..ec1v..","..pk.ec2.."="..ec2v..","..pk.ec3.."="..ec3v.."}" end return sProto(proto) end local function buildVM(opVarNames, vmName, v, pk, OC, stringChar, numKey, superMap, mathProxy) local L={} local function A(s) L[#L+1]=s end local function ov(n) return opVarNames[n] end local rV = { subVMName = newVar(), opaqueTrue = newVar(), pipelineLockVar = newVar(), alu_a = newVar(), alu_b = newVar(), alu_id = newVar(), alu_res = newVar(), dispatch_next = newVar(), has_returned = newVar(), return_values = newVar(), Central_Dispatcher = newVar(), State_Variable = newVar(), Opaque_Transition = newVar(), sub_cache = newVar(), encObj = newVar(), sub_bc = newVar(), c = newVar(), s = newVar(), _p = newVar(), b = newVar(), a = newVar(), k = newVar(), gk = newVar(), t = newVar(), v = newVar(), ps = newVar(), ci = newVar(), nrv = newVar(), na = newVar(), dst = newVar(), fn = newVar(), a2 = newVar(), ai = newVar(), rv = newVar(), ri = newVar(), n = newVar(), base = newVar(), ir = newVar(), idx = newVar(), p_idx = newVar(), x = newVar(), mip = newVar(), rt_seed = newVar(), chain_key = newVar(), env = newVar(), math = newVar(), bit = newVar(), floor = newVar(), cos = newVar(), sin = newVar(), pi = newVar(), band = newVar(), lshift = newVar(), rshift = newVar(), op_val = newVar(), cff_state = newVar(), realBc = newVar(), realK = newVar(), mt = newVar(), self = newVar(), key = newVar(), val = newVar(), crash = newVar(), safe_iscc = newVar(), safe_newcc = newVar(), poly_seed = newVar(), cff_st = newVar(), max_pc = newVar(), gm = newVar(), tp = newVar(), pc = newVar(), isc = newVar(), is_safe = newVar(), fake_prop_pre = newVar(), tof_pre = newVar(), g_pre = newVar(), v3_pre = newVar(), env_probe_mt = newVar(), mt_bc_pre = newVar(), mt_h_pre = newVar(), is_inst_pre = newVar(), s_pre = newVar(), e_pre = newVar(), err_valid_pre = newVar(), v3_valid_pre = newVar(), s2_pre = newVar(), r2_pre = newVar(), rg = newVar(), sf = newVar(), poly_share = newVar(), vmTrusted = newVar(), clPr = newVar(), clUvs = newVar(), clIdx = newVar(), clUv = newVar(), clVal = newVar(), clSet = newVar(), clInner = newVar(), clWrapped = newVar(), upIdx = newVar(), upVal = newVar(), l4_cor = newVar(), l4_cc = newVar(), l4_cr = newVar(), l4_cy = newVar(), l4_np = newVar(), l4_gmt = newVar(), l4_pc = newVar(), l4_ts = newVar(), l4_sf = newVar(), l4_trap = newVar(), l4_thr = newVar(), l4_frac = newVar(), l4_pkey = newVar(), l4_s = newVar(), l4_r = newVar(), bcFp = newVar(), ckR = newVar(), dc1 = newVar(), dc2 = newVar(), dc3 = newVar(), passed = newVar(), cM = newVar(), cMem = newVar(), cG = newVar(), cE = newVar(), cR = newVar(), rcStore = newVar(), rcKey = newVar(), rcGet = newVar(), rcSet = newVar(), pushReg_idx = newVar(), pushK_id = newVar(), pushLit_val = newVar(), writeReg_idx = newVar(), fetchReg_idx = newVar(), loadBool_idx = newVar(), getGlobal_dst = newVar(), getGlobal_kid = newVar(), setGlobal_kid = newVar(), getTable_dst = newVar(), newTable_dst = newVar(), self_dst = newVar(), concat_dst = newVar(), closure_dst = newVar(), getUpval_dst = newVar(), execSub_dst = newVar(), execSub_kid = newVar() } v.dynState = newVar() v.handlers = newVar() v.res = newVar() v.rk = newVar() v.rks = newVar() v.tmp = newVar() v.top = newVar() local function bStr(str) if not str or str == "" then return "''" end local chunkSize = (#str > 500) and math.random(50, 100) or math.random(2, 4) local chunks = {} local i = 1 while i <= #str do chunks[#chunks+1] = string.sub(str, i, i + chunkSize - 1) i = i + chunkSize end local memKeys = {} local usedKeys = {} for _ = 1, #chunks do local k repeat k = math.random(10000, 99999) until not usedKeys[k] usedKeys[k] = true memKeys[#memKeys+1] = k end local insertOrder = {} for idx = 1, #chunks do insertOrder[idx] = idx end for idx = #insertOrder, 2, -1 do local rand = math.random(idx) insertOrder[idx], insertOrder[rand] = insertOrder[rand], insertOrder[idx] end local masterXor = math.random(1, 255) local memInit = {} for _, idx in ipairs(insertOrder) do local chunk = chunks[idx] local mKey = memKeys[idx] local bytes = {} for j = 1, #chunk do bytes[#bytes+1] = bit32.bxor(string.byte(chunk, j), masterXor) end memInit[#memInit+1] = "["..mKey.."]={"..table.concat(bytes,",").."}" end local memVar, ptrVar = newVar(), newVar() local genFunc, stateVar, kVar = newVar(), newVar(), newVar() local chunkVar, jVar, sVar = newVar(), newVar(), newVar() return "(function() local "..memVar.."={"..table.concat(memInit, ",").."}; local "..ptrVar.."={"..table.concat(memKeys, ",").."}; local function "..genFunc.."("..stateVar..") if "..stateVar..">#"..ptrVar.." then return '' end; local "..kVar.."="..ptrVar.."["..stateVar.."]; local "..chunkVar.."="..memVar.."["..kVar.."]; local "..sVar.."=''; for "..jVar.."=1,#"..chunkVar.." do "..sVar.."="..sVar.."..string.char(bit32.bxor("..chunkVar.."["..jVar.."],"..masterXor..")); end; "..memVar.."["..kVar.."]=nil; local _ret="..sVar..".."..genFunc.."("..stateVar.."+1); "..sVar.."=nil; return _ret; end; return "..genFunc.."(1) end)()" end A(" local "..rV.env.." = getfenv and getfenv() or _ENV or _G") A(" local "..rV.math.." = "..rV.env.."["..bStr("math").."]") A(" local "..rV.bit.." = "..rV.env.."["..bStr("bit32").."] or "..rV.math.."") A(" local "..rV.floor.." = "..rV.math.."["..bStr("floor").."]") A(" local "..rV.cos.." = "..rV.math.."["..bStr("cos").."]") A(" local "..rV.sin.." = "..rV.math.."["..bStr("sin").."]") A(" local "..rV.pi.." = "..rV.math.."["..bStr("pi").."]") A(" local "..rV.band.." = "..rV.bit.."["..bStr("band").."] or function(a,b) return a end") A(" local "..rV.lshift.." = "..rV.bit.."["..bStr("lshift").."] or function(a,b) return a*(2^b) end") A(" local "..rV.rshift.." = "..rV.bit.."["..bStr("rshift").."] or function(a,b) return "..rV.floor.."(a/(2^b)) end") local function genCollatzCheck(varName) local choice = math.random(1, 4) if choice == 1 then return "((("..varName.." * "..varName..") - "..varName..") % 2 == 0)" elseif choice == 2 then return "(math.abs(math.sin("..varName..")^2 + math.cos("..varName..")^2 - 1) < 0.05)" elseif choice == 3 then return "((math.floor("..varName.." * 0.5) * 2) <= "..varName..")" else return "(math.abs(("..varName.." * 0.333333) * 3 - "..varName..") < 0.05)" end end local v_mba_t = { x = newVar(), y = newVar(), mba = newVar(), dec = newVar() } A(" local function "..rV.opaqueTrue.."()") A(" local "..v_mba_t.x.." = (("..v.dynState.." or 1) * 0.84147098) % 9999") A(" local "..v_mba_t.y.." = math.floor("..v_mba_t.x..")") A(" local "..v_mba_t.mba.." = (("..v_mba_t.y.." * "..v_mba_t.y..") - "..v_mba_t.y..") % 2") A(" local "..v_mba_t.dec.." = math.abs(math.sin("..v_mba_t.x..")^2 + math.cos("..v_mba_t.x..")^2 - 1)") A(" return ("..v_mba_t.mba.." == 0 and "..v_mba_t.dec.." < 0.05) and 1 or 0") A(" end") local sV = { mem = newVar(), spc = newVar(), ds = newVar(), hnd = newVar(), sc = newVar(), opv = newVar(), raw = newVar(), sop = newVar(), res = newVar(), mba_a = newVar(), mba_s = newVar(), sec_bc = newVar(), p_key = newVar(), a_key = newVar(), rt_pc = newVar(), rt_rk = newVar(), rt_op = newVar(), k_d = newVar(), dx = newVar(), c_state = newVar(), rss = newVar(), sub_h = newVar(), ret = newVar(), trap = newVar(), nxt_rk = newVar() } A(" local "..rV.sub_cache.." = setmetatable({}, {__mode = 'kv'})") A(" local function "..rV.subVMName.."("..rV.encObj..", "..sV.p_key..", "..sV.sec_bc..", "..sV.rt_pc..", "..sV.rt_rk..", "..sV.rt_op..")") A(" if type("..rV.encObj..") ~= 'table' and not "..sV.sec_bc.." then return "..rV.encObj.." end") A(" if not "..sV.sec_bc.." and "..rV.sub_cache.."["..rV.encObj.."] then return "..rV.sub_cache.."["..rV.encObj.."] end") A(" local "..sV.mem.." = setmetatable({}, {") A(" __index = function(t, k) return rawget(t, k) end,") A(" __newindex = function(t, k, v) rawset(t, k, v) end,") A(" __metatable = 'LOCKED_MEM'") A(" })") A(" local "..rV.sub_bc.." = "..sV.sec_bc.." or "..v.P..".sub_c") A(" local "..sV.ds.." = 0") A(" local "..sV.hnd.." = {}") A(" local "..sV.sc.." = string.char") A(" local "..sV.k_d.." = bit32.bxor("..sV.rt_pc.." or 0, bit32.bxor(bit32.rshift("..sV.rt_rk.." or 0, 2), "..sV.rt_op.." or 0))") A(" local "..sV.a_key.." = bit32.bxor("..sV.p_key..", "..sV.k_d..")") A(" local function "..sV.mba_a.."(a, b) return bit32.bxor(a, b) + bit32.lshift(bit32.band(a, b), 1) end") A(" local function "..sV.mba_s.."(a, b) return bit32.bxor(a, bit32.bnot(b)) + bit32.lshift(bit32.band(a, bit32.bnot(b)), 1) + 1 end") local sub_hBody1 = sV.ds.." = math.floor("..sV.mba_a.."("..sV.ds..", "..sV.sop.."[1]) % 256);" local sub_dCheck1 = genCollatzCheck(sV.ds) A(" "..sV.hnd.."["..ov("SUB_OP_DEC").."] = function("..sV.sop..") ") A(" "..sub_hBody1) A(" if "..rV.opaqueTrue.."() == 1 then") A(" if "..sub_dCheck1.." then ") A(" if type("..rV.encObj..") == 'table' and "..rV.encObj.."."..pk.dKey.." then") A(" "..sV.mem.."[1] = ("..sV.mem.."[1] or '')") A(" for "..rV.idx.."=1,#"..rV.encObj.."."..pk.dKey.." do ") A(" local "..sV.dx.." = bit32.bxor("..rV.encObj.."."..pk.dKey.."["..rV.idx.."], "..sV.a_key..")") A(" "..sV.mem.."[1] = "..sV.mem.."[1] .. "..sV.sc.."("..sV.dx..")") A(" end") A(" end") A(" end") A(" else") A(" "..sV.p_key.." = bit32.bxor("..sV.p_key..", 0x1B)") A(" end") A(" end") local sub_hBody2 = sV.ds.." = math.floor("..sV.mba_s.."("..sV.ds..", "..sV.sop.."[1]) % 256);" local sub_dCheck2 = genCollatzCheck(sV.ds) A(" "..sV.hnd.."["..ov("SUB_OP_RET").."] = function("..sV.sop..") ") A(" "..sub_hBody2) A(" if "..rV.opaqueTrue.."() == 1 then") A(" if "..sub_dCheck2.." then ") A(" local "..sV.res.." = "..sV.mem.."[1]; "..sV.mem.."[1] = nil") A(" "..sV.mem.." = nil") A(" return "..sV.res.."") A(" end") A(" end") A(" end") A(" "..sV.hnd.."[0xDEAD] = function("..sV.sop..") ") A(" "..sV.mem.."[1] = "..sV.mba_s.."((bit32.bxor("..v.P.."."..pk.seed..", "..v.P.."."..pk.hash.." % 65536) % 256), "..sV.sop.."[2] or 0)") A(" if "..sV.mem.."[1] ~= 0 then "..sV.p_key.." = bit32.bxor("..sV.p_key..", 0x2C) end") A(" end") A(" local "..rV.cff_state.." = 1") A(" local "..sV.spc.." = 1") A(" while true do") A(" local "..sV.opv.." = "..rV.opaqueTrue.."()") A(" local "..sV.c_state.." = "..rV.cff_state.." * "..sV.opv.."") A(" if "..sV.c_state.." == 1 then") A(" local "..sV.raw.." = "..rV.sub_bc.."["..sV.spc.." * "..sV.opv.."] or {0, 0}") A(" local "..sV.rss.." = bit32.bxor("..v.P.."."..pk.seed..", "..v.P.."."..pk.hash.." % 65536) % 256") A(" local "..sV.sop.." = {bit32.bxor("..sV.raw.."[1], "..sV.rss.."), bit32.bxor("..sV.raw.."[2] or 0, "..sV.rss..")}") A(" local "..sV.sub_h.." = "..sV.hnd.."["..sV.sop.."[1]]") A(" if "..sV.sub_h.." then") A(" local "..sV.ret.." = "..sV.sub_h.."("..sV.sop..")") A(" if "..sV.ret.." then return "..sV.ret.." end") A(" else") A(" local "..sV.trap.." = "..sV.hnd.."[0xDEAD]") A(" if "..sV.trap.." then "..sV.trap.."("..sV.sop..") end") A(" end") A(" "..rV.cff_state.." = 2 * "..sV.opv.."") A(" elseif "..sV.c_state.." == 2 then") A(" "..sV.spc.." = "..sV.spc.." + "..sV.opv.."") A(" if "..sV.spc.." > #"..rV.sub_bc.." then break end") A(" "..rV.cff_state.." = 1 * "..sV.opv.."") A(" else") A(" break") A(" end") A(" end") A(" end") A("local function "..vmName.."("..v.P..","..v.E..","..v.a..","..v.U..")") local randLockStr = string.char(math.random(97,122), math.random(97,122), math.random(97,122), math.random(97,122), math.random(97,122)) local rt_mulConst = math.random(100000000, 999999999) local rt_modConst = math.random(0x100000, 0xFFFFFF) A(" local "..rV.rt_seed.." = math.floor(os.clock() * "..rt_mulConst..") % "..rt_modConst.."") A(" local "..rV.chain_key.." = bit32.bxor("..rV.rt_seed..", " .. math.random(0x1000, 0xFFFF) .. ")") A(" local "..rV.l4_cor.." = "..rV.env.."["..bStr("coroutine").."]") A(" local "..rV.l4_cc.." = "..rV.l4_cor.."["..bStr("create").."]") A(" local "..rV.l4_cr.." = "..rV.l4_cor.."["..bStr("resume").."]") A(" local "..rV.l4_cy.." = "..rV.l4_cor.."["..bStr("yield").."]") A(" local "..rV.l4_np.." = "..rV.env.."["..bStr("newproxy").."]") A(" local "..rV.l4_gmt.." = "..rV.env.."["..bStr("getmetatable").."]") A(" local "..rV.l4_pc.." = "..rV.env.."["..bStr("pcall").."]") A(" local "..rV.l4_ts.." = "..rV.env.."["..bStr("tostring").."]") A(" local "..rV.l4_sf.." = "..rV.env.."["..bStr("string").."]["..bStr("find").."]") A(" local "..rV.l4_frac.." = false") A(" if "..rV.l4_np.." and "..rV.l4_cc.." and "..rV.l4_cr.." and "..rV.l4_cy.." then") A(" local "..rV.l4_trap.." = "..rV.l4_np.."(true)") A(" "..rV.l4_gmt.."("..rV.l4_trap..")["..bStr("__tostring").."] = function() "..rV.l4_cy.."() return "..bStr(" ").." end") A(" local "..rV.l4_thr.." = "..rV.l4_cc.."(function()") A(" local "..rV.l4_s..", "..rV.l4_r.." = "..rV.l4_pc.."("..rV.l4_ts..", "..rV.l4_trap..")") A(" if not "..rV.l4_s.." and "..rV.l4_sf.."("..rV.l4_ts.."("..rV.l4_r.." or "..bStr(" ").."), "..bStr("yield")..") then") A(" "..rV.l4_frac.." = true") A(" end") A(" end)") A(" "..rV.l4_cr.."("..rV.l4_thr..")") A(" "..rV.l4_trap.." = nil; "..rV.l4_thr.." = nil") A(" end") A(" if not "..rV.l4_frac.." then") A(" local "..rV.l4_pkey.." = ("..v.P.."."..pk.hash.." % 254) + 1") A(" "..rV.chain_key.." = bit32.bxor("..rV.chain_key..", "..rV.l4_pkey..")") A(" "..rV.l4_pkey.." = nil") A(" end") A(" "..rV.l4_cor.."=nil; "..rV.l4_cc.."=nil; "..rV.l4_cr.."=nil; "..rV.l4_cy.."=nil") A(" "..rV.l4_np.."=nil; "..rV.l4_gmt.."=nil; "..rV.l4_pc.."=nil; "..rV.l4_ts.."=nil; "..rV.l4_sf.."=nil; "..rV.l4_frac.."=nil") A(" local "..rV.rcStore.."={}; local "..v.pr.."="..v.P.."."..pk.pr) A(" local "..rV.rcKey.." = bit32.bxor("..rV.rt_seed..", "..rV.chain_key..")") A(" setmetatable("..rV.rcStore..", {") A(" __pairs = function() "..v.dynState.." = bit32.bxor("..v.dynState..", 0xDEAD); return function() end end,") A(" __tostring = function() "..v.dynState.." = bit32.bxor("..v.dynState..", 0xDEAD); return 'Memory' end") A(" })") A(" local function "..rV.rcGet.."("..rV.key..") return "..rV.rcStore.."[bit32.bxor("..rV.key..", "..rV.rcKey..")] end") A(" local function "..rV.rcSet.."("..rV.key..", "..rV.val..") "..rV.rcStore.."[bit32.bxor("..rV.key..", "..rV.rcKey..")] = "..rV.val.." end") A(" local "..rV.realBc.."="..v.P.."."..pk.c) A(" local "..rV.realK.."="..v.P.."."..pk.k) A(" local function "..rV.crash.."() "..v.rk.." = bit32.bxor("..v.rk..", 0x5A); "..v.rks.." = bit32.bxor("..v.rks..", 0x5A) end") A(" local "..rV.mt.." = {") A(" __index = function("..rV.self..", "..rV.key..")") A(" return "..rV.realBc.."["..rV.key.."]") A(" end,") A(" __newindex = function("..rV.self..", "..rV.key..", "..rV.val..") "..rV.crash.."() end,") A(" __metatable = '"..randLockStr.."'") A(" }") A(" local "..v.bc.." = setmetatable({}, "..rV.mt..")") A(" local function "..v.mk.."("..v.p..","..v.e..") return{"..pk.p.."="..v.p..","..pk.e.."="..v.e..","..pk.cl.."=true}end") A(" if "..v.a.." then for "..rV.x.."=1, "..v.a..".n or 0 do "..rV.rcSet.."("..rV.x.."-1, "..v.a.."["..rV.x.."]) end end") A(" local "..rV.pipelineLockVar.." = ("..rV.opaqueTrue.."() == 1)") A(" local "..rV.vmTrusted.." = setmetatable({}, {__mode='k'})") A(" local "..v.dynState.." = 0") local tV3 = { e1 = newVar(), s1 = newVar(), r1 = newVar(), e2 = newVar(), ok = newVar(), fn = newVar() } A(" local "..rV.safe_iscc.." = (function()") A(" local "..tV3.e1.." = "..rV.env) A(" return "..tV3.e1.."["..bStr("iscclosure").."] or function(f) local "..tV3.s1..", "..tV3.r1.." = pcall(function() return "..tV3.e1..".debug.info(f, 's') == '[C]' end) return "..tV3.s1.." and "..tV3.r1.." or false end") A(" end)()") A(" local "..rV.safe_iscc.." = function(f) return type(f) == " .. bStr("function") .. " end") A(" local "..v.tmp.." = {}") A(" local "..v.top.." = 0") A(" local "..v.i..", "..v.op) A(" local "..v.rk.." = 0") A(" local "..rV.poly_seed.." = bit32.bxor("..v.P.."."..pk.seed..", "..v.P.."."..pk.hash.." % 65536)") local cv = { H = newVar(), i = newVar(), t = newVar(), j = newVar(), tbO = newVar(), tbR = newVar(), hk = newVar(), ln = newVar(), m = newVar() } local maskKey = math.random(100000, 999999) A(" do") A(" local "..cv.H.." = 0") A(" for "..cv.i.."=1, #"..rV.realBc.." do") A(" local "..cv.t.." = "..v.bc.."["..cv.i.."]") A(" if "..cv.t.." then") A(" for "..cv.j.."=1, #"..cv.t.." do "..cv.H.." = ("..cv.H.." + "..cv.t.."["..cv.j.."]) % 4294967296 end") A(" end") A(" end") local st_1 = math.random(1000, 9999) local st_2 = math.random(1000, 9999) local st_3 = math.random(1000, 9999) local st_4 = math.random(1000, 9999) local st_end = math.random(1000, 9999) local cff_nodes = { { st = st_1, cd = cv.tbO..", "..cv.tbR.." = pcall(function() return "..rV.env.."["..bStr("debug").."]["..bStr("traceback").."]() end); "..rV.cff_st.." = "..st_2 }, { st = st_2, cd = "if "..cv.tbO.." and type("..cv.tbR..") == "..bStr("string").." then "..rV.cff_st.." = "..st_3.." else "..rV.cff_st.." = "..st_end.." end" }, { st = st_3, cd = "for "..cv.m.." in getfenv()["..bStr("string").."]["..bStr("gmatch").."]("..cv.tbR..", "..bStr("\n")..") do "..cv.ln.." = "..cv.ln.." + 1 end; "..rV.cff_st.." = "..st_4 }, { st = st_4, cd = "if "..cv.ln.." > 150000 then "..cv.hk.." = true end; "..rV.cff_st.." = "..st_end } } for i = #cff_nodes, 2, -1 do local j = math.random(i) cff_nodes[i], cff_nodes[j] = cff_nodes[j], cff_nodes[i] end A(" local "..cv.hk.." = false") A(" local "..cv.ln.." = 0") A(" local "..cv.tbO..", "..cv.tbR) A(" local "..rV.cff_st.." = "..st_1) A(" while "..rV.cff_st.." ~= "..st_end.." do") for i, node in ipairs(cff_nodes) do if i == 1 then A(" if "..rV.cff_st.." == "..node.st.." then") else A(" elseif "..rV.cff_st.." == "..node.st.." then") end A(" "..node.cd) end A(" end") A(" end") local tV1 = { encAct = newVar(), encExp = newVar() } A(" local "..tV1.encAct.." = bit32.bxor("..cv.H..", "..maskKey..")") A(" local "..tV1.encExp.." = bit32.bxor("..v.P.."."..pk.hash.." or 0, "..maskKey..")") A(" if "..tV1.encAct.." ~= "..tV1.encExp.." or "..cv.hk.." then ") A(" "..v.dynState.." = bit32.bxor("..v.dynState..", 0xDEADBEEF)") A(" "..v.rk.." = bit32.bxor("..v.rk..", 0x1A2B3C); "..v.rks.." = bit32.bxor("..v.rks..", 0x1A2B3C)") A(" "..rV.Central_Dispatcher.." = false") A(" end") A(" end") local tV2 = { hkey = newVar(), h_raw = newVar(), xk = newVar() } A(" local "..tV2.hkey.." = math.random(100, 9999)") A(" local "..tV2.h_raw.." = {}") A(" local "..v.handlers.." = setmetatable({}, {") A(" __index = function(_, k)") A(" if type(k) ~= 'number' then "..v.rk.." = bit32.bxor("..v.rk..", 0x3D); "..v.rks.." = bit32.bxor("..v.rks..", 0x3D) return function() end end") A(" return "..tV2.h_raw.."[bit32.bxor(k, "..tV2.hkey..")] or function() end") A(" end,") A(" __newindex = function(_, k, v)") A(" local "..tV2.xk.." = bit32.bxor(k, "..tV2.hkey..")") A(" if "..tV2.h_raw.."["..tV2.xk.."] then "..v.rk.." = bit32.bxor("..v.rk..", 0x4E); "..v.rks.." = bit32.bxor("..v.rks..", 0x4E) return end") A(" "..tV2.h_raw.."["..tV2.xk.."] = v") A(" end,") A(" __metatable = 'Locked'") A(" })") A(" local "..rV.alu_a..", "..rV.alu_b..", "..rV.alu_id..", "..rV.alu_res.."") A(" local "..rV.dispatch_next.."") A(" local "..rV.has_returned.." = false") A(" local "..rV.return_values.." = {}") A(" local "..rV.Central_Dispatcher.." = true") A(" local "..rV.State_Variable.." = 1") local mk1 = math.random(100000, 999999) local mk2 = bit32.bxor(numKey, mk1) local encNumKey = "bit32.bxor("..mk1..", "..mk2..")" local zV = { idx = newVar(), s = newVar(), len = newVar(), z = newVar(), i = newVar() } local opLogic = { { "M_SECURE_ERASE", "local "..zV.idx.."="..v.i.."[2]; "..zV.idx.."="..zV.idx.." and bit32.bxor("..zV.idx..","..v.rks..") or nil; if "..zV.idx.." and "..zV.idx..">2147483647 then "..zV.idx.."="..zV.idx.."-4294967296 end; if type("..rV.rcGet.."("..zV.idx.."))=='string' then local "..zV.s.."="..rV.rcGet.."("..zV.idx.."); local "..zV.len.."=#"..zV.s.."; for _erase_loop=1,4 do local "..zV.z.."={}; for "..zV.i.."=1,"..zV.len.." do "..zV.z.."["..zV.i.."]=string.char(math.random(0,255)) end; "..rV.rcSet.."("..zV.idx..", table.concat("..zV.z..")); end; end; "..rV.rcSet.."("..zV.idx..", nil);" }, { "M_PUSH_REG", "local "..rV.pushReg_idx.."="..v.i.."[2]; "..rV.pushReg_idx.."="..rV.pushReg_idx.." and bit32.bxor("..rV.pushReg_idx..","..v.rks..") or nil; if "..rV.pushReg_idx.." and "..rV.pushReg_idx..">2147483647 then "..rV.pushReg_idx.."="..rV.pushReg_idx.."-4294967296 end; "..v.top.."="..v.top.."+1;"..v.tmp.."["..v.top.."]="..rV.rcGet.."("..rV.pushReg_idx..")" }, { "M_PUSH_K", "local "..rV.pushK_id.."="..v.i.."[2]; "..rV.pushK_id.."="..rV.pushK_id.." and bit32.bxor("..rV.pushK_id..","..v.rks..") or nil; if "..rV.pushK_id.." and "..rV.pushK_id..">2147483647 then "..rV.pushK_id.."="..rV.pushK_id.."-4294967296 end; "..v.top.."="..v.top.."+1;"..v.tmp.."["..v.top.."]="..rV.realK.."("..rV.pushK_id..")" }, { "M_PUSH_LIT", "local "..rV.pushLit_val.."="..v.i.."[2]; "..rV.pushLit_val.."="..rV.pushLit_val.." and bit32.bxor("..rV.pushLit_val..","..v.rks..") or nil; if "..rV.pushLit_val.." and "..rV.pushLit_val..">2147483647 then "..rV.pushLit_val.."="..rV.pushLit_val.."-4294967296 end; "..v.top.."="..v.top.."+1;"..v.tmp.."["..v.top.."]="..rV.pushLit_val.."" }, { "M_WRITE_REG", "local "..rV.writeReg_idx.."="..v.i.."[2]; "..rV.writeReg_idx.."="..rV.writeReg_idx.." and bit32.bxor("..rV.writeReg_idx..","..v.rks..") or nil; if "..rV.writeReg_idx.." and "..rV.writeReg_idx..">2147483647 then "..rV.writeReg_idx.."="..rV.writeReg_idx.."-4294967296 end; "..rV.rcSet.."("..rV.writeReg_idx..", "..rV.alu_res..")" }, { "M_FETCH_REG_ID", "local "..rV.fetchReg_idx.."="..v.i.."[2]; "..rV.fetchReg_idx.."="..rV.fetchReg_idx.." and bit32.bxor("..rV.fetchReg_idx..","..v.rks..") or nil; if "..rV.fetchReg_idx.." and "..rV.fetchReg_idx..">2147483647 then "..rV.fetchReg_idx.."="..rV.fetchReg_idx.."-4294967296 end; "..rV.alu_res.."="..rV.rcGet.."("..rV.fetchReg_idx..")" }, { "M_POP_ALU_B", rV.alu_b.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1" }, { "M_POP_ALU_A", rV.alu_a.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1" }, { "M_ALU_ADD", "if type("..rV.alu_a..")=='number' and type("..rV.alu_b..")=='number' then local "..rV._p.."="..v.dynState.."%3;if "..rV._p.."==0 then "..rV.alu_res.."="..rV.alu_a.."+"..rV.alu_b.." elseif "..rV._p.."==1 then "..rV.alu_res.."=("..rV.alu_a.."*2+"..rV.alu_b.."*2)/2 else "..rV.alu_res.."=("..rV.alu_a.."+"..v.rk..")+("..rV.alu_b.."-"..v.rk..") end else "..rV.alu_res.."="..rV.alu_a.."+"..rV.alu_b.." end" }, { "M_ALU_SUB", "if type("..rV.alu_a..")=='number' and type("..rV.alu_b..")=='number' then local "..rV._p.."="..v.dynState.."%3;if "..rV._p.."==0 then "..rV.alu_res.."="..rV.alu_a.."-"..rV.alu_b.." elseif "..rV._p.."==1 then "..rV.alu_res.."=("..rV.alu_a.."*2-"..rV.alu_b.."*2)/2 else "..rV.alu_res.."=("..rV.alu_a.."+"..v.rk..")-("..rV.alu_b.."+"..v.rk..") end else "..rV.alu_res.."="..rV.alu_a.."-"..rV.alu_b.." end" }, { "M_ALU_MUL", "local "..rV._p.."="..v.dynState.."%2;if "..rV._p.."==0 then "..rV.alu_res.."="..rV.alu_a.."*"..rV.alu_b.." else "..rV.alu_res.."="..rV.alu_b.."*"..rV.alu_a.." end" }, { "M_ALU_BXOR", "local "..rV._p.."="..v.dynState.."%3;if "..rV._p.."==0 then "..rV.alu_res.."=bit32.bxor("..rV.alu_a..","..rV.alu_b..") elseif "..rV._p.."==1 then "..rV.alu_res.."=bit32.bor("..rV.alu_a..","..rV.alu_b..")-bit32.band("..rV.alu_a..","..rV.alu_b..") else "..rV.alu_res.."=bit32.bnot(bit32.bxor(bit32.bnot("..rV.alu_a.."),"..rV.alu_b..")) end" }, { "M_ALU_DIV", rV.alu_res.."="..rV.alu_b.."~=0 and "..rV.alu_a.."/"..rV.alu_b.." or 0" }, { "M_ALU_MOD", rV.alu_res.."="..rV.alu_b.."~=0 and "..rV.alu_a.."%"..rV.alu_b.." or 0" }, { "M_ALU_POW", rV.alu_res.."="..rV.alu_a.."^"..rV.alu_b.."" }, { "M_ALU_IDIV", rV.alu_res.."="..rV.alu_b.."~=0 and math.floor("..rV.alu_a.."/"..rV.alu_b..") or 0" }, { "M_ALU_BAND", "local "..rV._p.."="..v.dynState.."%2;if "..rV._p.."==0 then "..rV.alu_res.."=bit32.band("..rV.alu_a..","..rV.alu_b..") else "..rV.alu_res.."=bit32.bnot(bit32.bor(bit32.bnot("..rV.alu_a.."),bit32.bnot("..rV.alu_b.."))) end" }, { "M_ALU_BOR", "local "..rV._p.."="..v.dynState.."%2;if "..rV._p.."==0 then "..rV.alu_res.."=bit32.bor("..rV.alu_a..","..rV.alu_b..") else "..rV.alu_res.."=bit32.bnot(bit32.band(bit32.bnot("..rV.alu_a.."),bit32.bnot("..rV.alu_b.."))) end" }, { "M_ALU_SHL", rV.alu_res.."=bit32.lshift("..rV.alu_a..","..rV.alu_b..")" }, { "M_ALU_SHR", rV.alu_res.."=bit32.rshift("..rV.alu_a..","..rV.alu_b..")" }, { "M_ALU_UNM", rV.alu_a.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;"..rV.alu_res.."=-"..rV.alu_a.."" }, { "M_ALU_BNOT", rV.alu_a.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;"..rV.alu_res.."=bit32.bnot("..rV.alu_a..")" }, { "M_ALU_NOT", rV.alu_a.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;"..rV.alu_res.."=not "..rV.alu_a.."" }, { "M_ALU_LEN", rV.alu_a.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;"..rV.alu_res.."=type("..rV.alu_a..")=='string' and #"..rV.alu_a.." or (type("..rV.alu_a..")=='table' and #"..rV.alu_a.." or 0)" }, { "M_LOADBOOL", "local "..rV.c.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.b.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.loadBool_idx.."="..v.i.."[2]; "..rV.loadBool_idx.."="..rV.loadBool_idx.." and bit32.bxor("..rV.loadBool_idx..","..v.rks..") or nil; if "..rV.loadBool_idx.." and "..rV.loadBool_idx..">2147483647 then "..rV.loadBool_idx.."="..rV.loadBool_idx.."-4294967296 end; "..rV.rcSet.."("..rV.loadBool_idx..", ("..rV.b.."~=0));if "..rV.c.."~=0 then "..rV.dispatch_next.."="..rV.dispatch_next.."+2 end" }, { "M_LOADNIL", "local "..rV.b.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.a.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;for "..rV.x.."="..rV.a..","..rV.b.." do "..rV.rcSet.."("..rV.x..", nil) end" }, { "M_GETGLOBAL", "local "..rV.k.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.getGlobal_dst.."="..v.i.."[2]; "..rV.getGlobal_dst.."="..rV.getGlobal_dst.." and bit32.bxor("..rV.getGlobal_dst..","..v.rks..") or nil; if "..rV.getGlobal_dst.." and "..rV.getGlobal_dst..">2147483647 then "..rV.getGlobal_dst.."="..rV.getGlobal_dst.."-4294967296 end; local "..rV.getGlobal_kid.."="..v.i.."[3]; "..rV.getGlobal_kid.."="..rV.getGlobal_kid.." and bit32.bxor("..rV.getGlobal_kid..","..v.rks..") or nil; if "..rV.getGlobal_kid.." and "..rV.getGlobal_kid..">2147483647 then "..rV.getGlobal_kid.."="..rV.getGlobal_kid.."-4294967296 end; "..rV.rcSet.."("..rV.getGlobal_dst..", "..v.E.."["..rV.subVMName.."("..rV.k..", "..rV.getGlobal_kid..", nil, "..rV.State_Variable..", "..v.rks..", "..v.op..")])" }, { "M_SETGLOBAL", "local "..rV.s.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.gk.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.setGlobal_kid.."="..v.i.."[2]; "..rV.setGlobal_kid.."="..rV.setGlobal_kid.." and bit32.bxor("..rV.setGlobal_kid..","..v.rks..") or nil; if "..rV.setGlobal_kid.." and "..rV.setGlobal_kid..">2147483647 then "..rV.setGlobal_kid.."="..rV.setGlobal_kid.."-4294967296 end; "..v.E.."["..rV.subVMName.."("..rV.gk..", "..rV.setGlobal_kid..", nil, "..rV.State_Variable..", "..v.rks..", "..v.op..")]="..rV.s.."" }, { "M_GETTABLE", "local "..rV.k.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.t.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1; local "..rV.getTable_dst.."="..v.i.."[2]; "..rV.getTable_dst.."="..rV.getTable_dst.." and bit32.bxor("..rV.getTable_dst..","..v.rks..") or nil; if "..rV.getTable_dst.." and "..rV.getTable_dst..">2147483647 then "..rV.getTable_dst.."="..rV.getTable_dst.."-4294967296 end; "..rV.rcSet.."("..rV.getTable_dst..", "..rV.t.."["..rV.k.."])" }, { "M_SETTABLE", "local "..rV.v.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.k.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.t.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1; "..rV.t.."["..rV.k.."]="..rV.v.."" }, { "M_NEWTABLE", "local "..rV.newTable_dst.."="..v.i.."[2]; "..rV.newTable_dst.."="..rV.newTable_dst.." and bit32.bxor("..rV.newTable_dst..","..v.rks..") or nil; if "..rV.newTable_dst.." and "..rV.newTable_dst..">2147483647 then "..rV.newTable_dst.."="..rV.newTable_dst.."-4294967296 end; "..rV.rcSet.."("..rV.newTable_dst..", {})" }, { "M_SELF", "local "..rV.k.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.t.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.self_dst.."="..v.i.."[2]; "..rV.self_dst.."="..rV.self_dst.." and bit32.bxor("..rV.self_dst..","..v.rks..") or nil; if "..rV.self_dst.." and "..rV.self_dst..">2147483647 then "..rV.self_dst.."="..rV.self_dst.."-4294967296 end; "..rV.rcSet.."("..rV.self_dst.."+1, "..rV.t..");"..rV.rcSet.."("..rV.self_dst..", "..rV.t.."["..rV.k.."])" }, { "M_CONCAT", "local "..rV.b.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.a.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.ps.."={};for "..rV.ci.."="..rV.a..","..rV.b.." do "..rV.ps.."[#"..rV.ps.."+1]=tostring("..rV.rcGet.."("..rV.ci..")) end;local "..rV.concat_dst.."="..v.i.."[2]; "..rV.concat_dst.."="..rV.concat_dst.." and bit32.bxor("..rV.concat_dst..","..v.rks..") or nil; if "..rV.concat_dst.." and "..rV.concat_dst..">2147483647 then "..rV.concat_dst.."="..rV.concat_dst.."-4294967296 end; "..rV.rcSet.."("..rV.concat_dst..", table.concat("..rV.ps.."))" }, { "M_JMP", rV.dispatch_next.."=(("..v.tmp.."["..v.top.."]) or ("..rV.dispatch_next.."));"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1" }, { "M_EQ", "local "..rV.c.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.b.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.a.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;if("..rV.b.."=="..rV.c..")~=("..rV.a.."~=0)then "..rV.dispatch_next.."="..rV.dispatch_next.."+2 end" }, { "M_LT", "local "..rV.c.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.b.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.a.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;if("..rV.b.."<"..rV.c..")~=("..rV.a.."~=0)then "..rV.dispatch_next.."="..rV.dispatch_next.."+2 end" }, { "M_LE", "local "..rV.c.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.b.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.a.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;if("..rV.b.."<="..rV.c..")~=("..rV.a.."~=0)then "..rV.dispatch_next.."="..rV.dispatch_next.."+2 end" }, { "M_TEST", "local "..rV.b.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.a.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;if(not not "..rV.a..")~=("..rV.b.."~=0)then "..rV.dispatch_next.."="..rV.dispatch_next.."+2 end" }, { "M_CALL", "local "..rV.nrv.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.na.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.dst.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.fn.."="..rV.rcGet.."("..rV.dst..");local "..rV.a2.."={};for "..rV.ai.."=1,"..rV.na.." do "..rV.a2.."["..rV.ai.."]="..rV.rcGet.."("..rV.dst.."+"..rV.ai..") end;local "..rV.rv.."; if type("..rV.fn..")=="..bStr("table").." and rawget("..rV.fn..",'"..pk.cl.."') then "..rV.rv.." = {"..vmName.."("..rV.fn.."."..pk.p..","..rV.fn.."."..pk.e..","..rV.a2..")} else "..rV.rv.." = {"..rV.fn.."((unpack or table.unpack)("..rV.a2..", 1, "..rV.na.."))} end; for "..rV.ri.."=1,"..rV.nrv.." do "..rV.rcSet.."("..rV.dst.."+"..rV.ri.."-1, "..rV.rv.."["..rV.ri.."]) end" }, { "M_RETURN", "local "..rV.n.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.base.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;"..rV.has_returned.."=true;if "..rV.n.."==0 then "..rV.return_values.."={}; "..rV.rcStore.."={}; return end;local "..rV.rv.."={};for "..rV.ri.."=0,"..rV.n.."-1 do "..rV.rv.."["..rV.ri.."+1]="..rV.rcGet.."("..rV.base.."+"..rV.ri..") end;"..rV.return_values.."="..rV.rv..";"..rV.rcStore.."={};return" }, { "M_FORPREP", "local "..rV.t.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.ir.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;"..rV.rcSet.."("..rV.ir..", ("..rV.rcGet.."("..rV.ir..") or 0)-("..rV.rcGet.."("..rV.ir.."+2) or 1)); "..rV.dispatch_next.."="..rV.t }, { "M_FORLOOP", "local "..rV.t.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.ir.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.idx.."="..rV.rcGet.."("..rV.ir..")+("..rV.rcGet.."("..rV.ir.."+2) or 1);"..rV.rcSet.."("..rV.ir..", "..rV.idx..");if "..rV.idx.."<="..rV.rcGet.."("..rV.ir.."+1) then "..rV.rcSet.."("..rV.ir.."+3, "..rV.idx..");"..rV.dispatch_next.."="..rV.t.." end" }, { "M_CLOSURE", "local "..rV.p_idx.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1; local "..rV.clPr.."="..v.pr.."["..rV.p_idx.."+1]; local "..rV.clUvs.."={}; for "..rV.clIdx..","..rV.clUv.." in ipairs("..rV.clPr..".upvalues or {}) do if "..rV.clUv.."[1]==1 then "..rV.clUvs.."["..rV.clIdx.."]=function("..rV.clVal..","..rV.clSet..") if "..rV.clSet.." then "..rV.rcSet.."("..rV.clUv.."[2], "..rV.clVal..") else return "..rV.rcGet.."("..rV.clUv.."[2]) end end else "..rV.clUvs.."["..rV.clIdx.."]="..v.U.."["..rV.clUv.."[2]+1] end end; local "..rV.clInner.." = function(...) return "..vmName.."("..rV.clPr..","..v.E..",{n=select('#', ...), ...},"..rV.clUvs..") end; local "..rV.clWrapped.."; if "..rV.safe_newcc.." then "..rV.clWrapped.." = "..rV.safe_newcc.."("..rV.clInner..") else "..rV.clWrapped.." = "..rV.clInner.." end; "..rV.vmTrusted.."["..rV.clWrapped.."] = true; local "..rV.closure_dst.."="..v.i.."[2]; "..rV.closure_dst.."="..rV.closure_dst.." and bit32.bxor("..rV.closure_dst..","..v.rks..") or nil; if "..rV.closure_dst.." and "..rV.closure_dst..">2147483647 then "..rV.closure_dst.."="..rV.closure_dst.."-4294967296 end; "..rV.rcSet.."("..rV.closure_dst..", "..rV.clWrapped..")" }, { "M_GETUPVAL", "local "..rV.upIdx.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1; local "..rV.getUpval_dst.."="..v.i.."[2]; "..rV.getUpval_dst.."="..rV.getUpval_dst.." and bit32.bxor("..rV.getUpval_dst..","..v.rks..") or nil; if "..rV.getUpval_dst.." and "..rV.getUpval_dst..">2147483647 then "..rV.getUpval_dst.."="..rV.getUpval_dst.."-4294967296 end; "..rV.rcSet.."("..rV.getUpval_dst..", "..v.U.."["..rV.upIdx.."+1]())" }, { "M_SETUPVAL", "local "..rV.upVal.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1; local "..rV.upIdx.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1; "..v.U.."["..rV.upIdx.."+1]("..rV.upVal..", true)" }, { "M_HALT", ""..rV.Central_Dispatcher.."=false; "..rV.rcStore.."={}" }, { "M_NOP", "" }, { "M_EXEC_SUB", "local "..rV.k.."="..v.tmp.."["..v.top.."];"..v.tmp.."["..v.top.."]=nil;"..v.top.."="..v.top.."-1;local "..rV.execSub_dst.."="..v.i.."[2]; "..rV.execSub_dst.."="..rV.execSub_dst.." and bit32.bxor("..rV.execSub_dst..","..v.rks..") or nil; if "..rV.execSub_dst.." and "..rV.execSub_dst..">2147483647 then "..rV.execSub_dst.."="..rV.execSub_dst.."-4294967296 end; local "..rV.execSub_kid.."="..v.i.."[3]; "..rV.execSub_kid.."="..rV.execSub_kid.." and bit32.bxor("..rV.execSub_kid..","..v.rks..") or nil; if "..rV.execSub_kid.." and "..rV.execSub_kid..">2147483647 then "..rV.execSub_kid.."="..rV.execSub_kid.."-4294967296 end; "..rV.rcSet.."("..rV.execSub_dst..", "..rV.subVMName.."("..rV.k..", "..rV.execSub_kid..", nil, "..rV.State_Variable..", "..v.rks..", "..v.op..")) " } } local function getLogicString(opName) for _, def in ipairs(opLogic) do if def[1] == opName then return def[2] end end return "" end for superName, ops in pairs(superMap) do local logic1 = getLogicString(ops[1]) local logic2 = getLogicString(ops[2]) local v_nxt = "nxt_"..math.random(1000,9999) local fake_path = v.dynState.." = bit32.bxor("..v.dynState..", 0xDEADBEEF);" local combinedLogic = logic1 .. " " .. "local "..v_nxt.." = " .. v.bc .. "[" .. rV.dispatch_next .. "]; " .. "if "..v_nxt.." then " .. "local "..sV.nxt_rk.." = ((("..rV.dispatch_next.." * "..rV.dispatch_next.." * 197) + ("..rV.dispatch_next.." * 83) + "..rV.poly_seed..") % 4294967296); " .. "if ("..v.dynState.." % 256) == 0xDEAD then "..sV.nxt_rk.." = 0 end; " .. v.dynState.." = bit32.bxor("..v.dynState..", "..v_nxt.."[1]); " .. v.dynState.." = math.floor(("..v.dynState.." + ("..v_nxt.."[1] or 0)) % 256); " .. v.i.." = "..v_nxt.."; " .. v.rks.." = "..sV.nxt_rk.."; " .. v.rk.." = "..v_nxt.."[2] or 0; " .. "if "..rV.opaqueTrue.."() == 1 then " .. logic2 .. " else " .. fake_path .. " end " .. rV.dispatch_next .. " = " .. rV.dispatch_next .. " + 1; " .. "end" opLogic[#opLogic+1] = { superName, combinedLogic } end for i = #opLogic, 2, -1 do local j = math.random(i) opLogic[i], opLogic[j] = opLogic[j], opLogic[i] end for _, opDef in ipairs(opLogic) do local op = opDef[1] local logic = opDef[2] local jv = newVar() local opq_val = math.random(10, 9999) local junk_logic = "local "..jv.." = "..opq_val.."; if bit32.band("..jv..", bit32.bnot("..jv..")) ~= 0 then "..v.rk.." = bit32.bxor("..v.rk..", "..jv..") end; " local mut_key = math.random(100, 999) local v_tmp_d = newVar() local dyn_mutation = "local "..v_tmp_d.." = bit32.bxor("..v.dynState..", "..mut_key..") + (bit32.band("..v.dynState..", "..mut_key..") * 2); "..v.dynState.." = "..v_tmp_d.." - "..mut_key.."; " logic = junk_logic .. dyn_mutation .. logic local hBody = v.dynState.." = math.floor(("..v.dynState.." + ("..v.i.."[1] or 0)) % 256);" local dCheck = genCollatzCheck(v.dynState) if op == "M_HALT" or op == "M_RETURN" then hBody = hBody .. "if "..rV.pipelineLockVar.." or "..rV.opaqueTrue.."() then if "..rV.pipelineLockVar.." or " .. dCheck .. " then " .. logic .. " else return end else return end" else hBody = hBody .. "if "..rV.pipelineLockVar.." or "..rV.opaqueTrue.."() then if "..rV.pipelineLockVar.." or " .. dCheck .. " then " .. logic .. " else "..rV.dispatch_next.."="..rV.dispatch_next.."-"..math.random(1,10).." end else "..rV.dispatch_next.."="..rV.dispatch_next.."+"..math.random(1,10).." end" end A(" "..v.handlers.."["..ov(op).."] = function() " .. hBody .. " end") end A(" local "..rV.max_pc.." = 0") A(" for k in pairs("..rV.realBc..") do if type(k) == 'number' and k > "..rV.max_pc.." then "..rV.max_pc.." = k end end") A(" local "..rV.gm.." = "..rV.env.."["..bStr("getmetatable").."]") A(" local "..rV.tp.." = "..rV.env.."["..bStr("type").."]") A(" local "..rV.pc.." = "..rV.env.."["..bStr("pcall").."]") A(" local "..rV.rg.." = "..rV.env.."["..bStr("rawget").."]") A(" local "..rV.isc.." = function(f) return type(f) == " .. bStr("function") .. " end") A(" local "..rV.tof_pre.." = "..rV.env.."["..bStr("typeof").."]") A(" local "..rV.g_pre.." = "..rV.env.."["..bStr("game").."]") A(" local "..rV.v3_pre.." = "..rV.env.."["..bStr("Vector3").."]") A(" local "..rV.sf.." = "..rV.env.."["..bStr("string").."] and "..rV.env.."["..bStr("string").."]["..bStr("find").."] or function() return nil end") A(" do") A(" local "..rV.env_probe_mt.." = ("..rV.tp.."("..rV.gm..") == "..bStr("function")..") and "..rV.gm.."("..v.E..") or nil") A(" if "..rV.tp.."("..rV.env_probe_mt..") == "..bStr("table").." and "..rV.rg.."("..rV.env_probe_mt..", "..bStr("__newindex")..") ~= nil then") A(" "..v.dynState.." = bit32.bxor("..v.dynState..", "..rV.rt_seed..")") A(" "..v.rk.." = bit32.bxor("..v.rk..", "..rV.chain_key.."); "..v.rks.." = bit32.bxor("..v.rks..", "..rV.chain_key..")") A(" "..rV.Central_Dispatcher.." = false") A(" end") A(" end") A(" local "..rV.mt_bc_pre.." = ("..rV.tp.."("..rV.gm..") == "..bStr("function")..") and "..rV.gm.."("..v.bc..") or "..bStr("nil").."") A(" local "..rV.mt_h_pre.." = ("..rV.tp.."("..rV.gm..") == "..bStr("function")..") and "..rV.gm.."("..v.handlers..") or "..bStr("nil").."") A(" local "..rV.is_inst_pre.." = ("..rV.tof_pre.." and "..rV.g_pre.." and "..rV.tof_pre.."("..rV.g_pre..") == "..bStr("Instance")..") and true or false") A(" local "..rV.s_pre..", "..rV.e_pre.." = "..rV.pc.."(function() return "..rV.g_pre.."."..rV.fake_prop_pre.." end)") A(" local "..rV.err_valid_pre.." = (not "..rV.s_pre.." and "..rV.tp.."("..rV.e_pre..") == "..bStr("string").." and "..rV.sf.."("..rV.e_pre..", "..bStr("valid member")..")) and true or false") A(" local "..rV.v3_valid_pre.." = false") A(" if "..rV.v3_pre.." and "..rV.v3_pre.."["..bStr("new").."] then") A(" local "..rV.s2_pre..", "..rV.r2_pre.." = "..rV.pc.."(function() local _v1 = "..rV.v3_pre.."["..bStr("new").."](1,0,0); local _v2 = "..rV.v3_pre.."["..bStr("new").."](0,1,0); return _v1["..bStr("Cross").."](_v1, _v2)["..bStr("Z").."] end)") A(" "..rV.v3_valid_pre.." = ("..rV.s2_pre.." and "..rV.r2_pre.." == 1)") A(" end") A(" local "..rV.bcFp.." = 0") A(" for "..rV.ci.."=1,"..rV.max_pc.." do local "..rV.t.."="..rV.realBc.."["..rV.ci.."]; if "..rV.t.." then for "..rV.x.."=1,#"..rV.t.." do "..rV.bcFp.."=bit32.bxor("..rV.bcFp..","..rV.t.."["..rV.x.."] or 0); "..rV.bcFp.."=("..rV.bcFp.."*16777619+1)%4294967296 end end end") A(" local "..rV.ckR.." = ( ("..rV.bcFp.." * "..rV.bcFp.." * 197) + ("..rV.bcFp.." * 83) + "..rV.poly_seed..") % 4294967296") A(" local "..rV.dc1.." = bit32.bxor("..v.P.."."..pk.ec1..", "..rV.ckR..")") A(" local "..rV.dc2.." = bit32.bxor("..v.P.."."..pk.ec2..", bit32.bxor("..rV.ckR..", 0x11))") A(" local "..rV.dc3.." = bit32.bxor("..v.P.."."..pk.ec3..", bit32.bxor("..rV.ckR..", 0x22))") A(" local "..rV.cM.." = (math.abs(math.log(100,10)-2) < 1e-6) and (math.sin(0) == 0) and (math.abs((123.456*math.pi)/math.pi - 123.456) < 1e-6)") A(" local "..rV.cMem.." = "..rV.pc.."(function() local "..rV.fn.." = "..rV.g_pre..":GetService("..bStr("MemStorageService").."); local "..rV.s_pre.." = tostring(math.log(100,10)); "..rV.fn..":SetItem("..bStr("nv_chk")..", "..rV.s_pre.."); local "..rV.e_pre.." = tonumber("..rV.fn..":GetItem("..bStr("nv_chk")..")); if not ("..rV.e_pre.." and math.abs("..rV.e_pre.."-2)<1e-6) then error() end end)") A(" local "..rV.cG.." = "..rV.pc.."(function() local "..rV.fn.." = "..rV.g_pre..":GetService("..bStr("HttpService").."):GenerateGUID(false); if not (type("..rV.fn..")=="..bStr("string").." and #"..rV.fn.."=="..rV.dc3.." and "..rV.fn..":sub("..rV.dc2..","..rV.dc2..")=="..bStr("-")..") then error() end end)") A(" local "..rV.cE.." = "..rV.pc.."(function() if "..rV.env.."["..bStr("Enum").."]["..bStr("Material").."]["..bStr("Plastic").."].Value ~= "..rV.dc1.." then error() end end)") A(" local "..rV.cR.." = "..rV.pc.."(function() local "..rV.fn.." = "..rV.g_pre..":GetService("..bStr("RunService").."); if not ("..rV.fn..":IsClient() ~= "..rV.fn..":IsServer()) then error() end if "..rV.tof_pre.."("..rV.fn..".Heartbeat) ~= "..bStr("RBXScriptSignal").." then error() end end)") A(" local "..rV.passed.." = 0") A(" "..rV.passed.." = "..rV.passed.." + (("..rV.mt_bc_pre.." == '"..randLockStr.."') and 1 or 0)") A(" "..rV.passed.." = "..rV.passed.." + (("..rV.mt_h_pre.." == "..bStr("Locked")..") and 1 or 0)") A(" "..rV.passed.." = "..rV.passed.." + ("..rV.isc.."("..rV.pc..") and 1 or 0)") A(" "..rV.passed.." = "..rV.passed.." + ("..rV.is_inst_pre.." and 1 or 0)") A(" "..rV.passed.." = "..rV.passed.." + ("..rV.err_valid_pre.." and 1 or 0)") A(" "..rV.passed.." = "..rV.passed.." + ("..rV.v3_valid_pre.." and 1 or 0)") A(" "..rV.passed.." = "..rV.passed.." + ("..rV.cM.." and 1 or 0)") A(" "..rV.passed.." = "..rV.passed.." + ("..rV.cMem.." and 1 or 0)") A(" "..rV.passed.." = "..rV.passed.." + ("..rV.cG.." and 1 or 0)") A(" "..rV.passed.." = "..rV.passed.." + ("..rV.cE.." and 1 or 0)") A(" "..rV.passed.." = "..rV.passed.." + ("..rV.cR.." and 1 or 0)") A(" local "..rV.is_safe.." = ("..rV.passed.." >= 11) and 1 or 0") A(" if ("..rV.is_safe.." + 0) == 0 then") A(" "..v.dynState.." = bit32.bxor("..v.dynState..", bit32.bxor("..rV.rt_seed..", "..rV.chain_key.."))") A(" "..v.rk.." = bit32.bxor("..v.rk..", bit32.bxor("..rV.chain_key..", "..rV.rt_seed.." + 1)); "..v.rks.." = bit32.bxor("..v.rks..", bit32.bxor("..rV.chain_key..", "..rV.rt_seed.." + 1))") A(" "..rV.State_Variable.." = "..rV.max_pc.." + math.random(1000, 9999)") A(" end") A(" while "..rV.Central_Dispatcher.." do") A(" if "..rV.State_Variable.." > "..rV.max_pc.." or "..rV.State_Variable.." < 1 then break end") A(" local "..rV.op_val.." = "..rV.opaqueTrue.."()") A(" if "..rV.op_val.." == 1 then") A(" "..v.i.."="..v.bc.."["..rV.State_Variable.." * "..rV.op_val.."]") A(" local "..rV.poly_share.." = ( ("..rV.State_Variable.." * "..rV.State_Variable.." * 197) + ("..rV.State_Variable.." * 83) + "..rV.poly_seed.." ) % 4294967296") A(" if ("..v.dynState.." % 256) == 0xDEAD then "..rV.poly_share.." = 0 end") A(" "..v.rks.." = "..rV.poly_share.."") A(" "..v.dynState.." = bit32.bxor("..v.dynState..", "..v.i.."[1])") A(" "..v.op.." = bit32.bxor("..v.i.."[1], "..v.rks..")") A(" "..v.rk.." = "..v.i.."[2] or 0") local pc_obfuscation = "bit32.bxor("..rV.State_Variable..", 1) + (bit32.band("..rV.State_Variable..", 1) * 2)" A(" "..rV.dispatch_next.." = "..pc_obfuscation) A(" "..v.handlers.."["..v.op.."]()") A(" if "..rV.has_returned.." then return table.unpack("..rV.return_values..") end") local dV = { d1 = newVar(), d2 = newVar(), df1_1 = newVar(), df2_1 = newVar(), df3_1 = newVar(), df1_2 = newVar(), df2_2 = newVar(), df3_2 = newVar(), mix = newVar(), tp1 = newVar(), sf1 = newVar(), tp2 = newVar(), sf2 = newVar(), oq = newVar(), op1_1 = newVar(), op2_1 = newVar(), op1_2 = newVar(), op2_2 = newVar() } local st1_start = math.random(10000, 99999) local st1_trap = math.random(10000, 99999) local st1_calc = math.random(10000, 99999) local st1_opaque = math.random(10000, 99999) local st1_final = math.random(10000, 99999) local st1_end = math.random(10000, 99999) local st2_start = math.random(10000, 99999) local st2_trap = math.random(10000, 99999) local st2_calc = math.random(10000, 99999) local st2_opaque = math.random(10000, 99999) local st2_final = math.random(10000, 99999) local st2_end = math.random(10000, 99999) local xor_key = math.random(100, 999) local base_start_trap_1 = bit32.bxor(st1_start, st1_trap) local base_start_calc_1 = bit32.bxor(st1_start, st1_calc) local base_trap_end_1 = bit32.bxor(st1_trap, st1_end) local base_calc_opaque_1 = bit32.bxor(st1_calc, st1_opaque) local base_opaque_trap_1 = bit32.bxor(st1_opaque, st1_trap) local base_opaque_final_1 = bit32.bxor(st1_opaque, st1_final) local base_final_end_1 = bit32.bxor(st1_final, st1_end) local base_start_trap_2 = bit32.bxor(st2_start, st2_trap) local base_start_calc_2 = bit32.bxor(st2_start, st2_calc) local base_trap_end_2 = bit32.bxor(st2_trap, st2_end) local base_calc_opaque_2 = bit32.bxor(st2_calc, st2_opaque) local base_opaque_trap_2 = bit32.bxor(st2_opaque, st2_trap) local base_opaque_final_2 = bit32.bxor(st2_opaque, st2_final) local base_final_end_2 = bit32.bxor(st2_final, st2_end) A(" local "..dV.mix.." = 0") A(" local "..dV.df1_1.." = bit32.bxor("..base_start_trap_1..", "..dV.mix..")") A(" local "..dV.df2_1.." = bit32.bxor("..base_start_calc_1..", "..dV.mix..")") A(" local "..dV.df3_1.." = bit32.bxor("..base_trap_end_1..", "..dV.mix..")") A(" local "..dV.df1_2.." = bit32.bxor("..base_start_trap_2..", "..dV.mix..")") A(" local "..dV.df2_2.." = bit32.bxor("..base_start_calc_2..", "..dV.mix..")") A(" local "..dV.df3_2.." = bit32.bxor("..base_trap_end_2..", "..dV.mix..")") A(" local "..dV.tp1.." = (1 - "..rV.is_safe..") * bit32.bxor("..dV.df1_1..", "..dV.mix..");") A(" local "..dV.sf1.." = "..rV.is_safe.." * bit32.bxor("..dV.df2_1..", "..dV.mix..");") A(" local "..dV.tp2.." = (1 - "..rV.is_safe..") * bit32.bxor("..dV.df1_2..", "..dV.mix..");") A(" local "..dV.sf2.." = "..rV.is_safe.." * bit32.bxor("..dV.df2_2..", "..dV.mix..");") A(" local "..rV.Opaque_Transition.." = "..rV.dispatch_next.."; ") A(" local "..dV.d1.." = "..st1_start.."; ") A(" local "..dV.d2.." = "..st2_start.."; ") A(" while bit32.bor(bit32.bxor("..dV.d1..", "..st1_end.."), bit32.bxor("..dV.d2..", "..st2_end..")) ~= 0 do ") local cff_blocks = { { st1 = st1_start, st2 = st2_start, cd = dV.d1.." = bit32.bxor("..dV.d1..", bit32.bor("..dV.tp1..", "..dV.sf1..")); "..dV.d2.." = bit32.bxor("..dV.d2..", bit32.bor("..dV.tp2..", "..dV.sf2..")); " }, { st1 = st1_trap, st2 = st2_trap, cd = v.dynState.." = bit32.bxor("..v.dynState..", bit32.bxor("..rV.rt_seed..", "..rV.chain_key..")); "..v.rk.." = bit32.bxor("..v.rk..", bit32.bxor("..rV.chain_key..", "..rV.rt_seed..")); "..v.rks.." = bit32.bxor("..v.rks..", bit32.bxor("..rV.chain_key..", "..rV.rt_seed..")); "..rV.State_Variable.." = "..rV.max_pc.." + math.random(1000, 9999); "..dV.d1.." = bit32.bxor("..dV.d1..", bit32.bxor("..dV.df3_1..", "..dV.mix..")); "..dV.d2.." = bit32.bxor("..dV.d2..", bit32.bxor("..dV.df3_2..", "..dV.mix..")); " }, { st1 = st1_calc, st2 = st2_calc, cd = rV.mip.." = bit32.bxor(bit32.bxor("..rV.Opaque_Transition..", "..xor_key.."), bit32.bxor("..v.dynState..", "..xor_key..")); "..dV.d1.." = bit32.bxor("..dV.d1..", bit32.bxor("..bit32.bxor(base_calc_opaque_1, 0x55AA)..", 0x55AA)); "..dV.d2.." = bit32.bxor("..dV.d2..", bit32.bxor("..bit32.bxor(base_calc_opaque_2, 0x55AA)..", 0x55AA)); " }, { st1 = st1_opaque, st2 = st2_opaque, cd = "local "..dV.oq.." = 1; local "..dV.op1_1.." = bit32.bxor("..base_opaque_final_1..", "..v.dynState.."); local "..dV.op2_1.." = bit32.bxor("..base_opaque_trap_1..", "..v.dynState.."); local "..dV.op1_2.." = bit32.bxor("..base_opaque_final_2..", "..v.dynState.."); local "..dV.op2_2.." = bit32.bxor("..base_opaque_trap_2..", "..v.dynState.."); "..dV.d1.." = bit32.bxor("..dV.d1..", ("..dV.oq.." * bit32.bxor("..dV.op1_1..", "..v.dynState..")) + ((1 - "..dV.oq..") * bit32.bxor("..dV.op2_1..", "..v.dynState.."))); "..dV.d2.." = bit32.bxor("..dV.d2..", ("..dV.oq.." * bit32.bxor("..dV.op1_2..", "..v.dynState..")) + ((1 - "..dV.oq..") * bit32.bxor("..dV.op2_2..", "..v.dynState.."))); " }, { st1 = st1_final, st2 = st2_final, cd = rV.State_Variable.." = bit32.bxor("..rV.mip..", "..v.dynState.."); "..dV.d1.." = bit32.bxor("..dV.d1..", bit32.bxor("..bit32.bxor(base_final_end_1, 0x1234)..", 0x1234)); "..dV.d2.." = bit32.bxor("..dV.d2..", bit32.bxor("..bit32.bxor(base_final_end_2, 0x1234)..", 0x1234)); " } } local num_fakes = math.random(5, 12) local prev_fake_1 = st1_trap local prev_fake_2 = st2_trap for i = 1, num_fakes do local f_st1 = math.random(10000, 99999) local f_st2 = math.random(10000, 99999) local diff_f_1 = bit32.bxor(f_st1, prev_fake_1) local diff_f_2 = bit32.bxor(f_st2, prev_fake_2) local _rt_f_key = math.random(1024, 65535) local dyn_diff_f_1 = bit32.bxor(diff_f_1, _rt_f_key) local dyn_diff_f_2 = bit32.bxor(diff_f_2, _rt_f_key) local fake_logic = rV.State_Variable.." = bit32.bxor("..v.dynState..", "..math.random(100, 999).."); "..dV.d1.." = bit32.bxor("..dV.d1..", bit32.bxor("..dyn_diff_f_1..", ".._rt_f_key..")); "..dV.d2.." = bit32.bxor("..dV.d2..", bit32.bxor("..dyn_diff_f_2..", ".._rt_f_key..")); " local mod_m = math.random(3, 7) local impossible_val = mod_m + math.random(1, 9) local opq_condition = "(("..rV.chain_key.." % "..mod_m..") == "..impossible_val..")" cff_blocks[#cff_blocks].cd = cff_blocks[#cff_blocks].cd .. "if "..opq_condition.." then "..dV.d1.." = bit32.bxor("..dV.d1..", "..bit32.bxor(st1_final, f_st1).."); "..dV.d2.." = bit32.bxor("..dV.d2..", "..bit32.bxor(st2_final, f_st2).."); end; " cff_blocks[#cff_blocks+1] = { st1 = f_st1, st2 = f_st2, cd = fake_logic } prev_fake_1 = f_st1 prev_fake_2 = f_st2 end for i = #cff_blocks, 2, -1 do local j = math.random(i) cff_blocks[i], cff_blocks[j] = cff_blocks[j], cff_blocks[i] end for i, b in ipairs(cff_blocks) do local opq_chk = "(bit32.bxor("..dV.d1..", "..b.st1..") + bit32.bxor("..dV.d2..", "..b.st2..")) == 0" if i == 1 then A(" if "..opq_chk.." then ") else A(" elseif "..opq_chk.." then ") end A(" "..b.cd) end A(" end; ") A(" end; ") A(" else") A(" "..rV.State_Variable.." = "..rV.State_Variable.." + (math.random(1,2) == 1 and 0 or 1)") A(" end") A(" end") A("end") return table.concat(L, "\n") end local LoadFileEnabled = false local CompiledScriptOutput = "" LoadFileButton.MouseButton1Click:Connect(function() LoadFileEnabled = not LoadFileEnabled LoadFileButton.BackgroundColor3 = LoadFileEnabled and Color3.fromRGB(0,170,0) or Color3.fromRGB(0,0,0) end) CopyButton.MouseButton1Click:Connect(function() local textToCopy = (CompiledScriptOutput ~= "") and CompiledScriptOutput or OutputBox.Text if textToCopy ~= "" then setclipboard(textToCopy) CopyButton.Text="COPIED!" task.wait(1) CopyButton.Text="COPY OUTPUT" end end) ClearButton.MouseButton1Click:Connect(function() InputBox.Text = "" OutputBox.Text = "" CompiledScriptOutput = "" end) ObfuscateButton.MouseButton1Click:Connect(function() local src = InputBox.Text if src=="" then if LoadFileEnabled then local ok,data=pcall(readfile, FileNameBox.Text) if ok then src=data else OutputBox.Text="readfile error"; return end else return end end OutputBox.Text="Compiling..." local numKey = math.random(100000, 999999) task.spawn(function() usedVars = {} local ok1, toks_or_err = pcall(function() return lex(src) end) if not ok1 then OutputBox.Text="Lex error: "..tostring(toks_or_err); return end local toks = renameVars(toks_or_err) local OC = makeOpcodes() local ok2a, ast_or_err = pcall(function() return parseAST(toks) end) if not ok2a then OutputBox.Text="Parse error: "..tostring(ast_or_err); return end local ast = ast_or_err local v_enc_st_ = newVar() local v_time_st_ = newVar() local function applyASTFunctionEncryption(node) if type(node) == "table" then if node.type == "FunctionDefinition" then local stateVar = v_enc_st_ .. tostring(math.random(1000, 9999)) local timeVar = v_time_st_ .. tostring(math.random(1000, 9999)) local osClockBase = { type = "CallExpression", base = { type = "MemberExpression", base = { type = "Identifier", name = "os" }, identifier = "clock" }, arguments = {}, isSelf = false } local timeDef = { type = "LocalDefinition", names = {timeVar}, values = {osClockBase} } local stateDef = { type = "LocalDefinition", names = {stateVar}, values = {{ type = "BinaryExpression", operator = "==", left = { type = "CallExpression", base = { type = "Identifier", name = "type" }, arguments = {{ type = "Identifier", name = timeVar }}, isSelf = false }, right = { type = "Literal", kind = "string", value = "number" } }} } local condition = { type = "BinaryExpression", operator = "==", left = { type = "Identifier", name = stateVar }, right = { type = "Literal", kind = "boolean", value = true } } local trapBody = { { type = "WhileStatement", condition = { type = "Literal", kind = "boolean", value = true }, body = {} } } local ifStat = { type = "IfStatement", clauses = { { condition = condition, body = node.body } }, elseBody = trapBody } node.body = { timeDef, stateDef, ifStat } end for k, v in pairs(node) do if type(v) == "table" then applyASTFunctionEncryption(v) end end end return node end ast = applyASTFunctionEncryption(ast) local ok2b, proto_or_err = pcall(function() return compileAST(ast,OC) end) if not ok2b then OutputBox.Text="Compile error: "..tostring(proto_or_err); return end local proto = proto_or_err local superMap = peepholeOptimize(proto, OC) local mathProxy = newVar() local stringChar = newVar() local extremeMath = newVar() local function genMathProxyCall(v, mp) local a = math.random(2, 6) local b = math.random(2, 8) local c = math.random(2, 4) local d = math.random(5, 15) local ac = a^c local ac_mod_d = ac % d local bc = b * c local s = ac_mod_d + bc - v return "("..mp.."("..a..")^"..mp.."("..c..")%"..mp.."("..d..")+"..mp.."("..b..")*"..mp.."("..c..")-"..mp.."("..s.."))()" end local opVarDecls={} local opVarNames={} local opValMap={} for name,val in pairs(OC) do local vn=newVar() local R=math.random(1,255) local A=bit32.bxor(val,R) opVarDecls[#opVarDecls+1]="local "..vn.."=bit32.bxor("..genMathProxyCall(A, mathProxy)..","..genMathProxyCall(R, mathProxy)..")" opVarNames[name]=vn opValMap[val]=tostring(val) end local pk = { c = newVar(), k = newVar(), pr = newVar(), np = newVar(), va = newVar(), mr = newVar(), p = newVar(), e = newVar(), cl = newVar(), hash = newVar(), seed = newVar(), ec1 = newVar(), ec2 = newVar(), ec3 = newVar(), dKey = newVar() } local v = { P = newVar(), E = newVar(), a = newVar(), r = newVar(), pc = newVar(), bc = newVar(), k = newVar(), pr = newVar(), mk = newVar(), p = newVar(), e = newVar(), cl = newVar(), i = newVar(), op = newVar(), x = newVar(), t = newVar(), key = newVar(), d = newVar(), val = newVar(), ps = newVar(), ci = newVar(), fn = newVar(), na = newVar(), nrv = newVar(), a2 = newVar(), ai = newVar(), rv = newVar(), ok = newVar(), r1 = newVar(), r2 = newVar(), r3 = newVar(), r4 = newVar(), r5 = newVar(), n = newVar(), ri = newVar(), idx = newVar(), state = newVar(), dynState = newVar(), handlers = newVar(), res = newVar(), rk = newVar(), rks = newVar(), tmp = newVar(), top = newVar(), U = newVar() } local _IllI11I=false;local _00O1OO,_O11O0O=pcall(function()local _1IO0=game;local _O001I=workspace;local _II11O0="\71\101\116\68\101\98\117\103\73\100";local _01O1I=_1IO0[_II11O0](_1IO0,0);if type(_01O1I)~="\115\116\114\105\110\103"or #_01O1I==0 then return false end;local _I10O1=_O001I[_II11O0](_O001I,0);local _1OOI0=_1IO0:GetService("\80\108\97\121\101\114\115")[_II11O0](_1IO0:GetService("\80\108\97\121\101\114\115"),0);if _01O1I==_I10O1 or _01O1I==_1OOI0 or _I10O1==_1OOI0 then return false end;return true end)if not _00O1OO or not _O11O0O then _IllI11I=true end;local function _O1I0O()local _0I1I0=os.clock();for _=1,500 do local _1O0I1="\97\120";local _00I1O="\97\120";local _II00O=_1O0I1==_00I1O end;local _I100I=os.clock()-_0I1I0;local _0O10I=os.clock();for _1I0O1=1,500 do local _1O0I1="\97\120".._1I0O1;local _00I1O="\97\120".._1I0O1;local _II00O=_1O0I1==_00I1O end;local _O00O1=os.clock()-_0O10I;return _I100I<_O00O1*2 end;local function _11I0O()local _I0O10=0/0;local _01I01=math.max;local _10I1O=math.min;return _01I01(_I0O10,1)~=_01I01(_I0O10,1)and _10I1O(_I0O10,1)~=_10I1O(_I0O10,1)and not(_I0O10==_I0O10)end;local function _O01I1()local _II00O=0;local _0I10O=function()_II00O=_II00O+1 end;local _11O0I=function()return _II00O end;local _0I1I0=os.clock();for _=1,1000 do _0I10O()end;local _I100I=os.clock()-_0I1I0;local _0O10I=os.clock();for _=1,1000 do _11O0I()end;local _O00O1=os.clock()-_0O10I;return _I100I>_O00O1*0.3 and _I100I<_O00O1*10 end;local function _00O1I1()local _I0I01=setmetatable({},{["\95\95\109\111\100\101"]="\118"});for _1I0O1=1,100 do _I0I01[_1I0O1]={a=_1I0O1}end;local _O11I0=0;for _ in pairs(_I0I01)do _O11I0=_O11I0+1 end;local _0I1I0=os.clock();for _=1,50 do local _t={}for _1O00I=1,100 do _t[_1O00I]={}end end;local _I100I=os.clock()-_0I1I0;local _010O1=0;for _ in pairs(_I0I01)do _010O1=_010O1+1 end;return _I100I>1e-8 and _I100I<0.5 and _010O1<=_O11I0 end;if not _O1I0O()or not _11I0O()or not _O01I1()or not _00O1I1()then _IllI11I=true end;if _IllI11I then numKey=numKey+0xDEAD end local protoStr local ok3,err3=pcall(function() protoStr=serialize(proto,OC,opValMap,pk,mathProxy,stringChar,genMathProxyCall, numKey) end) if not ok3 then OutputBox.Text="Serialize error: "..tostring(err3); return end local vmName=newVar() local vmCode=buildVM(opVarNames,vmName,v,pk,OC,stringChar, numKey, superMap, mathProxy) local envName=newVar() local parts={} local function E(s) parts[#parts+1]=s end local em_a = newVar() local em_b = newVar() local em_t = newVar() local em_v = newVar() local em_discard = newVar() local mp_k = newVar() local em_c = newVar() local em_s = newVar() local em_r = newVar() local em_p = newVar() E("--[[This Script is Protected by CSLO 1.7.0 Obfuscator]] ") E("do ") E("local "..stringChar.."=string.char;") E("local "..extremeMath.."={") E("__add=function("..em_a..","..em_b..")return setmetatable({"..em_v.."=(type("..em_a..")=='table' and "..em_a.."."..em_v.." or "..em_a..")+(type("..em_b..")=='table' and "..em_b.."."..em_v.." or "..em_b..")},getmetatable(type("..em_a..")=='table' and "..em_a.." or "..em_b.."))end,") E("__sub=function("..em_a..","..em_b..")return setmetatable({"..em_v.."=(type("..em_a..")=='table' and "..em_a.."."..em_v.." or "..em_a..")-(type("..em_b..")=='table' and "..em_b.."."..em_v.." or "..em_b..")},getmetatable(type("..em_a..")=='table' and "..em_a.." or "..em_b.."))end,") E("__mul=function("..em_a..","..em_b..")return setmetatable({"..em_v.."=(type("..em_a..")=='table' and "..em_a.."."..em_v.." or "..em_a..")*(type("..em_b..")=='table' and "..em_b.."."..em_v.." or "..em_b..")},getmetatable(type("..em_a..")=='table' and "..em_a.." or "..em_b.."))end,") E("__div=function("..em_a..","..em_b..")return setmetatable({"..em_v.."=(type("..em_a..")=='table' and "..em_a.."."..em_v.." or "..em_a..")/(type("..em_b..")=='table' and "..em_b.."."..em_v.." or "..em_b..")},getmetatable(type("..em_a..")=='table' and "..em_a.." or "..em_b.."))end,") E("__mod=function("..em_a..","..em_b..")return setmetatable({"..em_v.."=(type("..em_a..")=='table' and "..em_a.."."..em_v.." or "..em_a..")%(type("..em_b..")=='table' and "..em_b.."."..em_v.." or "..em_b..")},getmetatable(type("..em_a..")=='table' and "..em_a.." or "..em_b.."))end,") E("__pow=function("..em_a..","..em_b..")return setmetatable({"..em_v.."=(type("..em_a..")=='table' and "..em_a.."."..em_v.." or "..em_a..")^(type("..em_b..")=='table' and "..em_b.."."..em_v.." or "..em_b..")},getmetatable(type("..em_a..")=='table' and "..em_a.." or "..em_b.."))end,") E("__call=function("..em_t..")") E(" local "..em_c.."=math.random(10, 25);") E(" local "..em_s.."=0;") E(" while "..em_c..">1 do ") E(" local "..em_r.."=math.random(1,4);") E(" if "..em_r.."==1 then ") E(" "..em_c.."=math.floor(0.5 + ("..em_c.."/2)*math.cos(math.pi*"..em_c.."/2)^2 + (3*"..em_c.."+1)*math.sin(math.pi*"..em_c.."/2)^2);") E(" elseif "..em_r.."==2 then ") E(" "..em_c.."=("..em_c.."/2)*(1 - ("..em_c.."%2)) + (3*"..em_c.."+1)*("..em_c.."%2);") E(" elseif "..em_r.."==3 then ") E(" "..em_c.."=math.floor(0.5 + 0.25*(1 + 4*"..em_c.." - (1 + 2*"..em_c..")*math.cos(math.pi*"..em_c..")));") E(" else ") E(" local "..em_p.." = bit32.band("..em_c..", 1);") E(" "..em_c.."=bit32.rshift("..em_c..", 1)*(1-"..em_p..") + (3*"..em_c.."+1)*"..em_p..";") E(" end ") E(" "..em_s.."="..em_s.."+1;") E(" end ") E(" return math.floor("..em_t.."."..em_v..")+("..em_c.."-1)*"..em_s..";") E("end") E("};") E("local "..mathProxy.."=setmetatable({},{__call=function("..em_discard..","..em_v..")return setmetatable({"..em_v.."="..em_v.."},"..extremeMath..")end,__index=function("..em_t..","..mp_k..") return math["..mp_k.."] end});") for _,d in ipairs(opVarDecls) do E(d..";") end local function eStr(str) if not str or str == "" then return "''" end local chunkSize = (#str > 500) and math.random(50, 100) or math.random(2, 4) local chunks = {} local i = 1 while i <= #str do chunks[#chunks+1] = string.sub(str, i, i + chunkSize - 1) i = i + chunkSize end local memKeys = {} local usedKeys = {} for _ = 1, #chunks do local k repeat k = math.random(10000, 99999) until not usedKeys[k] usedKeys[k] = true memKeys[#memKeys+1] = k end local insertOrder = {} for idx = 1, #chunks do insertOrder[idx] = idx end for idx = #insertOrder, 2, -1 do local rand = math.random(idx) insertOrder[idx], insertOrder[rand] = insertOrder[rand], insertOrder[idx] end local masterXor = math.random(1, 255) local memInit = {} for _, idx in ipairs(insertOrder) do local chunk = chunks[idx] local mKey = memKeys[idx] local bytes = {} for j = 1, #chunk do bytes[#bytes+1] = bit32.bxor(string.byte(chunk, j), masterXor) end memInit[#memInit+1] = "["..mKey.."]={"..table.concat(bytes,",").."}" end local memVar, ptrVar = newVar(), newVar() local genFunc, stateVar, kVar = newVar(), newVar(), newVar() local chunkVar, jVar, sVar = newVar(), newVar(), newVar() return "(function() local "..memVar.."={"..table.concat(memInit, ",").."}; local "..ptrVar.."={"..table.concat(memKeys, ",").."}; local function "..genFunc.."("..stateVar..") if "..stateVar..">#"..ptrVar.." then return '' end; local "..kVar.."="..ptrVar.."["..stateVar.."]; local "..chunkVar.."="..memVar.."["..kVar.."]; local "..sVar.."=''; for "..jVar.."=1,#"..chunkVar.." do "..sVar.."="..sVar.."..string.char(bit32.bxor("..chunkVar.."["..jVar.."],"..masterXor..")); end; "..memVar.."["..kVar.."]=nil; local _ret="..sVar..".."..genFunc.."("..stateVar.."+1); "..sVar.."=nil; return _ret; end; return "..genFunc.."(1) end)()" end local v_g = newVar() local v_type = newVar() local v_pcall = newVar() local v_rawget = newVar() local v_crash = newVar() local v_iscc = newVar() local v_dinfo = newVar() local v_check = newVar() local v_self = newVar() local v_k = newVar() local v_val = newVar() local v_s = newVar() local v_r = newVar() local v_fn = newVar() local v_spoof_map = newVar() local v_wrap = newVar() local v_orig_dinfo = newVar() local v_proxy_dinfo = newVar() local v_real_debug = newVar() local v_a1 = newVar() local v_proxy = newVar() local v_s_cc = newVar() local v_newcc = newVar() local v_s_ts = newVar() local v_orig_ts = newVar() local v_virt_globals = newVar() E(" local "..envName.." = (function() ") E(" local "..v_type.." = type; ") E(" local "..v_pcall.." = pcall; ") E(" local "..v_rawget.." = rawget; ") E(" local "..v_g.." = getfenv and getfenv() or _ENV or _G; ") E(" local "..v_virt_globals.." = {}; ") E(" local function "..v_crash.."() while true do "..v_pcall.."("..v_crash..") end end; ") E(" local "..v_real_debug.." = "..v_g.."["..eStr("debug").."]; ") E(" local "..v_orig_dinfo.." = "..v_real_debug.." and ("..v_real_debug.."["..eStr("info").."] or "..v_real_debug.."["..eStr("getinfo").."]); ") E(" if "..v_type.."("..v_orig_dinfo..") == "..eStr("function").." then ") E(" local d_s, d_r = "..v_pcall.."(function() return "..v_orig_dinfo.."("..v_orig_dinfo..", "..eStr("sl")..") end); ") E(" if d_s then ") E(" local t_s, t_l = d_r, select(2, "..v_orig_dinfo.."("..v_orig_dinfo..", "..eStr("sl")..")); ") E(" if t_s ~= "..eStr("[C]").." or (t_l ~= -1 and t_l ~= nil) then ") E(" "..v_crash.."(); ") E(" end; ") E(" end; ") E(" end; ") E(" local "..v_iscc.." = function(f) return "..v_type.."(f) == "..eStr("function").." end; ") E(" local "..v_spoof_map.." = {}; ") E(" local function "..v_proxy_dinfo.."(...) ") E(" local "..v_a1.." = ...; ") E(" if "..v_type.."("..v_a1..") == "..eStr("function").." and "..v_spoof_map.."["..v_a1.."] then ") E(" return "..v_orig_dinfo.."("..v_spoof_map.."["..v_a1.."], select(2, ...)); ") E(" end; ") E(" return "..v_orig_dinfo.."(...); ") E(" end; ") E(" local "..v_s_cc..", "..v_newcc.." = "..v_pcall.."(function() return "..v_g.."["..eStr("newcclosure").."] end); ") E(" "..v_newcc.." = "..v_s_cc.." and "..v_newcc.." or function(f) return function(...) return f(...) end end; ") E(" local function "..v_wrap.."("..v_fn..") ") E(" if "..v_type.."("..v_fn..") ~= "..eStr("function").." then return "..v_fn.." end; ") E(" local "..v_proxy.."; ") E(" if "..v_newcc.." then ") E(" "..v_proxy.." = "..v_newcc.."(function(...) return "..v_fn.."(...) end); ") E(" else ") E(" "..v_proxy.." = function(...) return "..v_fn.."(...) end; ") E(" end; ") E(" "..v_spoof_map.."["..v_proxy.."] = "..v_fn.."; ") E(" return "..v_proxy.."; ") E(" end; ") E(" local "..v_s_ts..", "..v_orig_ts.." = "..v_pcall.."(function() return "..v_g.."["..eStr("tostring").."] end); ") E(" "..v_orig_ts.." = "..v_s_ts.." and "..v_orig_ts.." or nil; ") E(" return setmetatable({}, { ") E(" __index = function("..v_self..", "..v_k..") ") E(" if "..v_virt_globals.."["..v_k.."] ~= nil then return "..v_virt_globals.."["..v_k.."] end; ") E(" if "..v_k.." == "..eStr("debug").." then ") E(" return setmetatable({["..eStr("info").."]="..v_proxy_dinfo..", ["..eStr("getinfo").."]="..v_proxy_dinfo.."}, {__index="..v_real_debug.."}); ") E(" end; ") E(" if "..v_k.." == "..eStr("tostring").." and "..v_orig_ts.." then ") E(" return function("..v_fn..") if "..v_spoof_map.."["..v_fn.."] then return "..v_orig_ts.."("..v_spoof_map.."["..v_fn.."]); end; return "..v_orig_ts.."("..v_fn.."); end; ") E(" end; ") E(" local "..v_s..", "..v_r.." = "..v_pcall.."(function() return "..v_g.."["..v_k.."] end); ") E(" if "..v_s.." and "..v_r.." ~= nil then ") E(" if "..v_type.."("..v_r..") == "..eStr("function").." then ") E(" return "..v_wrap.."("..v_r.."); ") E(" end; ") E(" return "..v_r.."; ") E(" end; ") E(" return nil; ") E(" end, ") E(" __newindex = function("..v_self..", "..v_k..", "..v_val..") ") E(" "..v_virt_globals.."["..v_k.."] = "..v_val.."; ") E(" end, ") E(" __pairs = function() return function() end end, ") E(" __tostring = function() return '' end, ") E(" __metatable = "..eStr("Locked").." ") E(" }); ") E(" end)(); ") E("local "..v.P.."="..protoStr..";") local vmOneLine=vmCode:gsub("\n"," "):gsub("%s+"," ") E(vmOneLine..";") E(vmName.."("..v.P..","..envName..",{},{});") E("end") local finalScript = table.concat(parts) local b92chars = " !#$%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~" local function compressLZW_Base92(str) local dict = {} for i = 0, 255 do dict[string.char(i)] = i end local dictSize = 256 local w = "" local res = {} local function emit(code) local c1 = math.floor(code / 92) + 1 local c2 = (code % 92) + 1 table.insert(res, string.sub(b92chars, c1, c1) .. string.sub(b92chars, c2, c2)) end for c in string.gmatch(str, ".") do local wc = w .. c if dict[wc] then w = wc else emit(dict[w]) dict[wc] = dictSize dictSize = dictSize + 1 if dictSize > 8463 then dict = {} for j = 0, 255 do dict[string.char(j)] = j end dictSize = 256 end w = c end end if w ~= "" then emit(dict[w]) end return table.concat(res) end OutputBox.Text = "Compressing..." task.wait() local encodedPayload = compressLZW_Base92(finalScript) local runtimeTemplate_P1 = '--[[Generated By CSLO Compression 1.7.0]] loadstring((function()local s="' local runtimeTemplate_P2 = '"local b=" !#$%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~"local m,d,r={},{},{}for i=1,92 do m[b:sub(i,i)]=i-1 end for i=0,255 do d[i]=string.char(i)end local n,w=256,d[m[s:sub(1,1)]*92+m[s:sub(2,2)]]r[1]=w for i=3,#s,2 do local c=m[s:sub(i,i)]*92+m[s:sub(i+1,i+1)]local e=d[c]or w..w:sub(1,1)r[#r+1]=e d[n]=w..e:sub(1,1)n=n+1 if n>8463 then d={}for j=0,255 do d[j]=string.char(j)end n=256 end w=e end return table.concat(r)end)())()' local finalPayload = runtimeTemplate_P1 .. encodedPayload .. runtimeTemplate_P2 if AutoSaveEnabled then local ok, err = pcall(function() writefile("CSLO_Obfuscated.txt", finalPayload) end) if ok then CompiledScriptOutput = "" OutputBox.Text = "-- [ SUCCESS ]\n-- File successfully saved to the workspace folder as:\n-- CSLO_Obfuscated.txt" else CompiledScriptOutput = finalPayload OutputBox.Text = "-- [ ERROR ]\n-- Failed to use writefile(). Does your Executor support it?\n-- Error: " .. tostring(err) .. "\n\n-- Click 'COPY OUTPUT' as an alternative!" end else CompiledScriptOutput = finalPayload if #finalPayload >= 190000 then OutputBox.Text = "-- [WARNING: OUTPUT TOO LARGE]\n-- Script size: " .. #finalPayload .. " characters.\n-- Roblox cannot display text over 200,000 characters on screen.\n\n-- PLEASE CLICK THE 'COPY OUTPUT' BUTTON TO COPY THIS SCRIPT!" else OutputBox.Text = finalPayload end end end) end)