Untitled
unknown
plain_text
21 days ago
5.5 kB
4
Indexable
Never
local StrToNumber = tonumber; local Byte = string.byte; local Char = string.char; local Sub = string.sub; local Subg = string.gsub; local Rep = string.rep; local Concat = table.concat; local Insert = table.insert; local LDExp = math.ldexp; local GetFEnv = getfenv or function() return _ENV; end; local Setmetatable = setmetatable; local PCall = pcall; local Select = select; local Unpack = unpack or table.unpack; local ToNumber = tonumber; local function VMCall(ByteString, vmenv, ...) local DIP = 1; local repeatNext; ByteString = Subg(Sub(ByteString, 5), "..", function(byte) if (Byte(byte, 2) == 79) then repeatNext = StrToNumber(Sub(byte, 1, 1)); return ""; else local a = Char(StrToNumber(byte, 16)); if repeatNext then local b = Rep(a, repeatNext); repeatNext = nil; return b; else return a; end end end); local function gBit(Bit, Start, End) if End then local Res = (Bit / (2 ^ (Start - 1))) % (2 ^ (((End - 1) - (Start - 1)) + 1)); return Res - (Res % 1); else local Plc = 2 ^ (Start - 1); return (((Bit % (Plc + Plc)) >= Plc) and 1) or 0; end end local function gBits8() local a = Byte(ByteString, DIP, DIP); DIP = DIP + 1; return a; end local function gBits16() local a, b = Byte(ByteString, DIP, DIP + 2); DIP = DIP + 2; return (b * 256) + a; end local function gBits32() local a, b, c, d = Byte(ByteString, DIP, DIP + 3); DIP = DIP + 4; return (d * 16777216) + (c * 65536) + (b * 256) + a; end local function gFloat() local Left = gBits32(); local Right = gBits32(); local IsNormal = 1; local Mantissa = (gBit(Right, 1, 20) * (2 ^ 32)) + Left; local Exponent = gBit(Right, 21, 31); local Sign = ((gBit(Right, 32) == 1) and -1) or 1; if (Exponent == 0) then if (Mantissa == 0) then return Sign * 0; else Exponent = 1; IsNormal = 0; end elseif (Exponent == 2047) then return ((Mantissa == 0) and (Sign * (1 / 0))) or (Sign * NaN); end return LDExp(Sign, Exponent - 1023) * (IsNormal + (Mantissa / (2 ^ 52))); end local function gString(Len) local Str; if not Len then Len = gBits32(); if (Len == 0) then return ""; end end Str = Sub(ByteString, DIP, (DIP + Len) - 1); DIP = DIP + Len; local FStr = {}; for Idx = 1, #Str do FStr[Idx] = Char(Byte(Sub(Str, Idx, Idx))); end return Concat(FStr); end local gInt = gBits32; local function _R(...) return {...}, Select("#", ...); end local function Deserialize() local Instrs = {}; local Functions = {}; local Lines = {}; local Chunk = {Instrs,Functions,nil,Lines}; local ConstCount = gBits32(); local Consts = {}; for Idx = 1, ConstCount do local Type = gBits8(); local Cons; if (Type == 1) then Cons = gBits8() ~= 0; elseif (Type == 2) then Cons = gFloat(); elseif (Type == 3) then Cons = gString(); end Consts[Idx] = Cons; end Chunk[3] = gBits8(); for Idx = 1, gBits32() do local Descriptor = gBits8(); if (gBit(Descriptor, 1, 1) == 0) then local Type = gBit(Descriptor, 2, 3); local Mask = gBit(Descriptor, 4, 6); local Inst = {gBits16(),gBits16(),nil,nil}; if (Type == 0) then Inst[3] = gBits16(); Inst[4] = gBits16(); elseif (Type == 1) then Inst[3] = gBits32(); elseif (Type == 2) then Inst[3] = gBits32() - (2 ^ 16); elseif (Type == 3) then Inst[3] = gBits32() - (2 ^ 16); Inst[4] = gBits16(); end if (gBit(Mask, 1, 1) == 1) then Inst[2] = Consts[Inst[2]]; end if (gBit(Mask, 2, 2) == 1) then Inst[3] = Consts[Inst[3]]; end if (gBit(Mask, 3, 3) == 1) then Inst[4] = Consts[Inst[4]]; end Instrs[Idx] = Inst; end end for Idx = 1, gBits32() do Functions[Idx - 1] = Deserialize(); end return Chunk; end local function Wrap(Chunk, Upvalues, Env) local Instr = Chunk[1]; local Proto = Chunk[2]; local Params = Chunk[3]; return function(...) local Instr = Instr; local Proto = Proto; local Params = Params; local _R = _R; local VIP = 1; local Top = -1; local Vararg = {}; local Args = {...}; local PCount = Select("#", ...) - 1; local Lupvals = {}; local Stk = {}; for Idx = 0, PCount do if (Idx >= Params) then Vararg[Idx - Params] = Args[Idx + 1]; else Stk[Idx] = Args[Idx + 1]; end end local Varargsz = (PCount - Params) + 1; local Inst; local Enum; while true do Inst = Instr[VIP]; Enum = Inst[1]; if (Enum <= 3) then if (Enum <= 1) then if (Enum > 0) then Stk[Inst[2]] = Env[Inst[3]]; else Stk[Inst[2]] = Inst[3]; end elseif (Enum == 2) then local A = Inst[2]; Stk[A](Stk[A + 1]); else do return; end end elseif (Enum <= 5) then if (Enum > 4) then Stk[Inst[2]] = Env[Inst[3]]; else do return; end end elseif (Enum == 6) then Stk[Inst[2]] = Inst[3]; else local A = Inst[2]; Stk[A](Stk[A + 1]); end VIP = VIP + 1; end end; end return Wrap(Deserialize(), {}, vmenv)(...); end return VMCall("LOL!023O0003053O007072696E7403073O006F62666166616600043O0012053O00013O00122O000100024O00073O000200012O00043O00017O00", GetFEnv(), ...);