From 9a9b691c24231c762a8f5ce5b85d3949d01354fb Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Sat, 24 Jan 2026 16:41:14 +0000 Subject: [PATCH] Newest fucking versionnnnn --- process.php | 435 +++++++++++++++++++++------------------------ protected_v8_0.lua | 2 + protected_v8_1.lua | 2 + test_v8_0.php | 48 +++++ test_v8_1.php | 60 +++++++ 5 files changed, 316 insertions(+), 231 deletions(-) create mode 100644 protected_v8_0.lua create mode 100644 protected_v8_1.lua create mode 100644 test_v8_0.php create mode 100644 test_v8_1.php diff --git a/process.php b/process.php index d4bae65..6ba0074 100644 --- a/process.php +++ b/process.php @@ -14,17 +14,17 @@ if (!$input || empty($input['code'])) { $code = $input['code']; -class LuartexHyperionV6_2 { +class LuartexHyperionV8_1 { private $rawCode; private $constants = []; private $instructions = []; private $keys = []; private $opMap = []; - private $vm_id; + private $polyKey; public function __construct($code) { $this->rawCode = $code; - $this->vm_id = bin2hex(random_bytes(4)); + $this->polyKey = rand(10, 200); for ($i = 0; $i < 32; $i++) { $this->keys[] = rand(0, 255); } @@ -39,62 +39,41 @@ class LuartexHyperionV6_2 { 'CLOSURE', 'VARARG', 'FORPREP', 'FORLOOP', 'AND', 'OR', 'NOT', 'LEN', 'TFORLOOP', 'SETLIST', 'CLOSE', 'JUNK1', 'JUNK2', 'JUNK3', 'OPAQUE', 'SET_GLOBAL_CONST', 'MOVE_GLOBAL', 'CALL_GLOBAL_K', 'CALL_GLOBAL_V', - 'RECURSIVE_CALL', 'TAMPER_CHECK', 'LAYER_ENTER', 'STACK_SHUFFLE' + 'RECURSIVE_CALL', 'TAMPER_CHECK', 'LAYER_ENTER', 'STACK_SHUFFLE', + 'LOAD_ASM_MATH', 'POLY_SHIFT' ]; shuffle($ops); foreach ($ops as $op) { - $this->opMap[$op] = rand(1000, 99999); + $this->opMap[$op] = rand(0, 255); } } - private function genVar($len = 24) { - $sets = [ - 'l1Ii', 'O0Q', 'uvvw', 'nmM', 'il1I', 'oO0Q', - 'S5s', 'Z2z', 'B8b', 'g9q', '01OI' - ]; + private function genVar($len = 32) { + $sets = ['l1Ii', 'O0Q', 'uvvw', 'nmM', 'S5s', 'Z2z', 'B8b', 'g9q']; $res = '_'; for($i=0; $i<$len; $i++) { $set = $sets[array_rand($sets)]; $res .= $set[rand(0, strlen($set)-1)]; } - return $res . bin2hex(random_bytes(3)); + return $res . bin2hex(random_bytes(2)); } - private function numToLuaExpr($n, $depth = 0) { - if (!is_numeric($n)) return $n; - $n = (float)$n; - - if ($depth > 3) return $n; - - $ops = ['+', '-', '*', 'xor', 'math']; - $op = $ops[array_rand($ops)]; - - switch($op) { - case '+': - $v1 = rand(1, 10000) / 10; - $v2 = $n - $v1; - return "(" . $this->numToLuaExpr($v1, $depth + 1) . " + " . $this->numToLuaExpr($v2, $depth + 1) . ")"; - case '-': - $v1 = rand((int)$n + 1, (int)$n + 10000) / 10; - $v2 = $v1 - $n; - return "(" . $this->numToLuaExpr($v1, $depth + 1) . " - " . $this->numToLuaExpr($v2, $depth + 1) . ")"; - case '*': - if ($n == 0) return "(0 * " . rand(1, 100) . ")"; - for ($v1 = 2; $v1 <= 8; $v1++) { - if ($n != 0 && fmod($n, $v1) == 0) { - $v2 = $n / $v1; - return "(" . $this->numToLuaExpr($v1, $depth + 1) . " * " . $this->numToLuaExpr($v2, $depth + 1) . ")"; - } - } - return "(" . $this->numToLuaExpr($n - 1, $depth + 1) . " + 1)"; - case 'xor': - $v1 = rand(1, 65535); - $v2 = (int)$n ^ $v1; - return "bit32.bxor(" . $this->numToLuaExpr($v1, $depth + 1) . ", " . $this->numToLuaExpr($v2, $depth + 1) . ")"; - case 'math': - return "(math.abs(" . $this->numToLuaExpr($n, $depth + 1) . "))"; + private function genAssemblyMath($n) { + $bytecode = []; + $current = 0; + $target = (float)$n; + for ($i = 0; $i < 12; $i++) { + $op = rand(1, 4); + $imm = rand(1, 20); + switch($op) { + case 1: $current += $imm; break; + case 2: $current -= $imm; break; + case 3: $current *= ($imm % 3 + 1); break; + case 4: $current = (int)$current ^ $imm; break; + } + $bytecode[] = ($imm << 3) | ($op & 0x7); } - return $n; + return ['ops' => $bytecode, 'remainder' => $target - $current]; } private function addConst($val) { @@ -106,144 +85,153 @@ class LuartexHyperionV6_2 { return $idx; } - private function genOpaquePredicate($type = 'true') { - $truePreds = [ - "(math.pi > 3)", - "(type(math.abs) == 'function')", - "(math.floor(10.5) == 10)", - "(#('Hyperion') == 8)", - "(math.sin(0) == 0)", - "(not (1 == 0))", - "(math.abs(-1) == 1)", - "(math.ceil(5.1) == 6)", - "(bit32.bxor(123, 123) == 0)", - "(string.len('luartex') == 7)", - "(math.log10(100) == 2)" - ]; - $falsePreds = [ - "(math.pi < 3)", - "(type(math.abs) == 'string')", - "(math.floor(10.5) == 11)", - "(#('Hyperion') == 9)", - "(math.sin(0) == 1)", - "(1 == 0)", - "(math.abs(-1) == 0)", - "(bit32.bxor(123, 123) ~= 0)", - "(math.sqrt(16) == 5)" - ]; - - if ($type === 'true') { - return $truePreds[array_rand($truePreds)]; - } else { - return $falsePreds[array_rand($falsePreds)]; + private function emitJunk() { + if (rand(0, 10) > 6) { + $junkOps = ['JUNK1', 'JUNK2', 'JUNK3', 'OPAQUE']; + $op = $junkOps[array_rand($junkOps)]; + $this->instructions[] = [$this->opMap[$op], rand(0, 255), rand(0, 255), rand(0, 255)]; } } - private function foldInstructions() { - $folded = []; - $i = 0; - $count = count($this->instructions); - - while ($i < $count) { - $inst = $this->instructions[$i]; - - if ($i + 2 < $count) { - $n1 = $this->instructions[$i + 1]; - $n2 = $this->instructions[$i + 2]; - - if ($inst[0] === $this->opMap['GETGLOBAL'] && $inst[1] === 0 && - $n1[0] === $this->opMap['LOADK'] && $n1[1] === 1 && - $n2[0] === $this->opMap['CALL'] && $n2[1] === 0 && $n2[2] === 1) { - $folded[] = [$this->opMap['CALL_GLOBAL_K'], $inst[2], $n1[2]]; - $i += 3; - continue; - } - } - - $folded[] = $inst; - $i++; - } - $this->instructions = $folded; - } - private function compile() { - $this->addConst("Hyperion V6.2 - Multi-Layer Recursive Virtualization"); - + $this->addConst("Hyperion V8.1 - Table Virtualization & Roblox Optimized Engine"); $cleanCode = $this->rawCode; $cleanCode = preg_replace('/--[[]*.*?[]]*--/s', '', $cleanCode); $cleanCode = preg_replace('/--.*$/m', '', $cleanCode); - - $tokens = preg_split('/[;\n]+/', $cleanCode); - + $tokens = preg_split('/[; +]+/', $cleanCode); foreach ($tokens as $token) { $token = trim($token); if (empty($token)) continue; - - if (preg_match('/^([a-zA-Z_]\w*(?:[.:]\w*)*)\s*\((.*?)\)$/', $token, $m)) { + + $this->emitJunk(); + + // local t = {} + if (preg_match('/^(?:local\s+)?([a-zA-Z_]\w*)\s*=\s*\{\}$/', $token, $m)) { + $this->instructions[] = [$this->opMap['NEWTABLE'], 0, 0, 0]; + $sIdx = $this->addConst($m[1]); + $this->instructions[] = [$this->opMap['SETGLOBAL'], 0, $sIdx, 0]; + } + // t["key"] = value or t.key = value + elseif (preg_match('/^([a-zA-Z_]\w*)\s*[.[\]\s*["\']?(.*?)["\']?\s*[\\\]]?\s*=\s*(.*)$/', $token, $m)) { + $this->emitTableSet($m[1], $m[2], $m[3]); + } + // function call + elseif (preg_match('/^([a-zA-Z_]\w*(?:[.:]\w*)*)\s*\((.*?)\)$/', $token, $m)) { $this->emitCall($m[1], $m[2]); } + // assignment elseif (preg_match('/^(?:local\s+)?([a-zA-Z_]\w*)\s*=\s*(.*)$/', $token, $m)) { $this->emitAssignment($m[1], $m[2]); } + + $this->emitJunk(); + } + $this->instructions[] = [$this->opMap['RETURN'], 0, 0, 0]; + } + + private function emitTableSet($tableName, $key, $val) { + $tIdx = $this->addConst($tableName); + $this->instructions[] = [$this->opMap['GETGLOBAL'], 0, $tIdx, 0]; + + $kIdx = $this->addConst($key); + + $val = trim($val); + $vReg = 1; + if (preg_match('/^["\'](.*)["\']$/', $val, $vm)) { + $vIdx = $this->addConst($vm[1]); + $this->instructions[] = [$this->opMap['LOADK'], $vReg, $vIdx, 0]; + } elseif (is_numeric($val)) { + $asm = $this->genAssemblyMath($val); + $vIdx = $this->addConst(json_encode($asm)); + $this->instructions[] = [$this->opMap['LOAD_ASM_MATH'], $vReg, $vIdx, 0]; + } else { + $vIdx = $this->addConst($val); + $this->instructions[] = [$this->opMap['GETGLOBAL'], $vReg, $vIdx, 0]; } - $this->foldInstructions(); - $this->instructions[] = [$this->opMap['RETURN'], 0, 0]; + $this->instructions[] = [$this->opMap['SETTABLE'], 0, $kIdx, $vReg]; } private function emitCall($funcName, $argStr) { $fIdx = $this->addConst($funcName); - $this->instructions[] = [$this->opMap['GETGLOBAL'], 0, $fIdx]; - + $this->instructions[] = [$this->opMap['GETGLOBAL'], 0, $fIdx, 0]; $args = []; if (!empty(trim($argStr))) { $rawArgs = explode(',', $argStr); foreach ($rawArgs as $idx => $arg) { $arg = trim($arg); $rIdx = $idx + 1; - if (preg_match('/^["\'](.*)["\']$/s', $arg, $m)) { - $vIdx = $this->addConst($m[1]); - $this->instructions[] = [$this->opMap['LOADK'], $rIdx, $vIdx]; - } elseif (is_numeric($arg)) { - $vIdx = $this->addConst((float)$arg); - $this->instructions[] = [$this->opMap['LOADK'], $rIdx, $vIdx]; + + // Check if it's a table access: t.key or t["key"] + if (preg_match('/^([a-zA-Z_]\w*)\s*[.[\]\s*["\']?(.*?)["\']?\s*[\\\]]?$/', $arg, $m)) { + $tIdx = $this->addConst($m[1]); + $this->instructions[] = [$this->opMap['GETGLOBAL'], 100, $tIdx, 0]; // temp reg 100 + $kIdx = $this->addConst($m[2]); + $this->instructions[] = [$this->opMap['GETTABLE'], $rIdx, 100, $kIdx]; } else { - $vIdx = $this->addConst($arg); - $this->instructions[] = [$this->opMap['GETGLOBAL'], $rIdx, $vIdx]; + $first = substr($arg, 0, 1); + $last = substr($arg, -1); + if (($first == '"' || $first == "'") && $first == $last) { + $vIdx = $this->addConst(substr($arg, 1, -1)); + $this->instructions[] = [$this->opMap['LOADK'], $rIdx, $vIdx, 0]; + } elseif (is_numeric($arg)) { + $asm = $this->genAssemblyMath($arg); + $vIdx = $this->addConst(json_encode($asm)); + $this->instructions[] = [$this->opMap['LOAD_ASM_MATH'], $rIdx, $vIdx, 0]; + } else { + $vIdx = $this->addConst($arg); + $this->instructions[] = [$this->opMap['GETGLOBAL'], $rIdx, $vIdx, 0]; + } } $args[] = $rIdx; } } - $this->instructions[] = [$this->opMap['CALL'], 0, count($args)]; + $this->instructions[] = [$this->opMap['CALL'], 0, count($args), 0]; } private function emitAssignment($var, $val) { $val = trim($val); - if (preg_match('/^["\'](.*)["\']$/s', $val, $m)) { - $vIdx = $this->addConst($m[1]); - $this->instructions[] = [$this->opMap['LOADK'], 0, $vIdx]; - } elseif (is_numeric($val)) { - $vIdx = $this->addConst((float)$val); - $this->instructions[] = [$this->opMap['LOADK'], 0, $vIdx]; + + // Check if it's a table access: t.key or t["key"] + if (preg_match('/^([a-zA-Z_]\w*)\s*[.[\]\s*["\']?(.*?)["\']?\s*[\\\]]?$/', $val, $m)) { + $tIdx = $this->addConst($m[1]); + $this->instructions[] = [$this->opMap['GETGLOBAL'], 1, $tIdx, 0]; + $kIdx = $this->addConst($m[2]); + $this->instructions[] = [$this->opMap['GETTABLE'], 0, 1, $kIdx]; } else { - $vIdx = $this->addConst($val); - $this->instructions[] = [$this->opMap['GETGLOBAL'], 0, $vIdx]; + $first = substr($val, 0, 1); + $last = substr($val, -1); + if (($first == '"' || $first == "'") && $first == $last) { + $vIdx = $this->addConst(substr($val, 1, -1)); + $this->instructions[] = [$this->opMap['LOADK'], 0, $vIdx, 0]; + } elseif (is_numeric($val)) { + $asm = $this->genAssemblyMath($val); + $vIdx = $this->addConst(json_encode($asm)); + $this->instructions[] = [$this->opMap['LOAD_ASM_MATH'], 0, $vIdx, 0]; + } else { + $vIdx = $this->addConst($val); + $this->instructions[] = [$this->opMap['GETGLOBAL'], 0, $vIdx, 0]; + } } $sIdx = $this->addConst($var); - $this->instructions[] = [$this->opMap['SETGLOBAL'], 0, $sIdx]; + $this->instructions[] = [$this->opMap['SETGLOBAL'], 0, $sIdx, 0]; } private function serializeAll() { $bin = ""; $bin .= pack("N", count($this->instructions)); - foreach ($this->instructions as $inst) { + foreach ($this->instructions as $pc_idx => $inst) { + $pc = $pc_idx + 1; $op = (int)$inst[0]; - $bin .= chr(($op >> 16) & 0xFF) . chr(($op >> 8) & 0xFF) . chr($op & 0xFF); - $bin .= pack("n", (int)$inst[1]); - $bin .= pack("n", (int)$inst[2]); + $mask = ($this->polyKey + $pc) % 256; + $raw_op = $op ^ $mask; + $bin .= chr($raw_op); + $bin .= chr((int)$inst[1] & 0xFF); + $bin .= pack("n", (int)$inst[2]); + $bin .= chr((int)$inst[3] & 0xFF); } - $bin .= pack("N", count($this->constants)); foreach ($this->constants as $c) { if (is_string($c)) { @@ -259,74 +247,51 @@ class LuartexHyperionV6_2 { $bin .= chr(0); } } - $keyLen = count($this->keys); $enc = ""; for ($i = 0; $i < strlen($bin); $i++) { - $enc .= chr(ord($bin[$i]) ^ $this->keys[$i % $keyLen] ^ (($i * 13) % 256)); + $enc .= chr(ord($bin[$i]) ^ $this->keys[$i % $keyLen] ^ (($i * 17) % 256)); } - return bin2hex($enc); } - private function calculateChecksum($hex) { - $sum = 0; - for ($i = 0; $i < strlen($hex); $i++) { - $sum = ($sum + ord($hex[$i]) * ($i + 1)) % 4294967296; - } - return $sum; - } - public function build() { $this->compile(); + $k_v = $this->genVar(); $b_v = $this->genVar(); $e_v = $this->genVar(); + $f_v = $this->genVar(); $d_v = $this->genVar(); $c_v = $this->genVar(); + $v_v = $this->genVar(); $stack_v = $this->genVar(); + $asm_v = $this->genVar(); $poly_v = $this->genVar(); + $handlers_v = $this->genVar(); $tamper_v = $this->genVar(); + $watchdog_v = $this->genVar(); $fetch_v = $this->genVar(); + $tk_v = $this->genVar(); // transformKey - $k_v = $this->genVar(32); $b_v = $this->genVar(32); $e_v = $this->genVar(32); - $f_v = $this->genVar(32); $d_v = $this->genVar(32); $c_v = $this->genVar(32); - $cs_v = $this->genVar(32); $tm_v = $this->genVar(32); - $v_v = $this->genVar(32); $l2_v = $this->genVar(32); - $layers_v = $this->genVar(32); - $stack_v = $this->genVar(32); - - $k_str = ""; - foreach ($this->keys as $i => $k) { - $k_str .= ($i > 0 ? "," : "") . $this->numToLuaExpr($k); - } - + $k_str = implode(",", $this->keys); $allHex = $this->serializeAll(); - $checksum = $this->calculateChecksum($allHex); - $lua = "-- [[ Hyperion Engine V6.2 - Recursive Layered Architecture ]] --\n"; - - $lua .= "local function " . $tm_v . "() "; - $lua .= "local _G = (getgenv and getgenv()) or _G; "; - $lua .= "if debug and (debug.getinfo or debug.setupvalue) then return true end; "; - $lua .= "if getfenv and (type(getfenv) ~= 'function') then return true end; "; - $lua .= "local check = {string.char, table.concat, tonumber, pcall, bit32.bxor, math.abs}; "; - $lua .= "for i=1,#check do if type(check[i]) ~= 'function' then return true end end; "; - $lua .= "local s, e = pcall(function() return os.clock() end); if not s then return true end; "; - $lua .= "return false end; "; - $lua .= "if " . $tm_v . "() then while true do end end; "; - + $lua = "-- [[ Hyperion Engine V8.1 - Roblox Optimized ]] --\n"; $lua .= "local " . $k_v . " = { " . $k_str . " }; "; $lua .= "local " . $b_v . " = \"" . $allHex . "\"; "; $lua .= "local " . $e_v . " = (getgenv and getgenv()) or (getfenv and getfenv(0)) or _G; "; - $lua .= "local function " . $cs_v . "(s) local h = 0; for i = 1, #s do h = (h + string.byte(s, i) * i) % " . $this->numToLuaExpr(4294967296) . " end return h end; "; - $lua .= "if " . $cs_v . "(" . $b_v . ") ~= " . $this->numToLuaExpr($checksum) . " then while true do end end; "; - + // Optimized hex decoder $lua .= "local function _H(h) local b = {}; for i = 1, #h, 2 do b[#b+1] = tonumber(h:sub(i, i+1), 16) end return b end; "; - $lua .= "local function _D(b) local o = {}; for i = 1, #b do local k = ((i - 1) % 32) + 1; o[i] = bit32.bxor(b[i], " . $k_v . "[k], ((i - 1) * 13) % 256) end return o end; "; + + // Decryption function + $lua .= "local function _D(b) local o = {}; for i = 1, #b do local k = ((i - 1) % 32) + 1; o[i] = bit32.bxor(b[i], " . $k_v . "[k], ((i - 1) * 17) % 256) end return o end; "; + $lua .= "local " . $d_v . " = _D(_H(" . $b_v . ")); "; - + + // Helpers $lua .= "local function _R32(b, p) return b[p]*16777216 + b[p+1]*65536 + b[p+2]*256 + b[p+3] end; "; $lua .= "local function _R16(b, p) return b[p]*256 + b[p+1] end; "; $lua .= "local ic = _R32(" . $d_v . ", 1); "; - $lua .= "local co = 5 + ic * 7; "; + $lua .= "local co = 5 + ic * 5; "; $lua .= "local cc = _R32(" . $d_v . ", co); "; - $lua .= "local " . $c_v . " = {}; "; $lua .= "local cu = co + 4; "; + + // Constant loading $lua .= "for i = 1, cc do "; $lua .= "local t = " . $d_v . "[cu]; cu = cu + 1; "; $lua .= "if t == 1 or t == 2 then "; @@ -334,75 +299,83 @@ class LuartexHyperionV6_2 { $lua .= "local s = {}; for j = 1, l do s[j] = string.char(" . $d_v . "[cu]); cu = cu + 1 end; "; $lua .= "s = table.concat(s); if t == 2 then " . $c_v . "[i] = tonumber(s) else " . $c_v . "[i] = s end; "; $lua .= "else cu = cu + 1 end end; "; - - $lua .= "local function " . $f_v . "(p) local o = 5 + (p - 1) * 7; "; - $lua .= "return " . $d_v . "[o]*65536 + " . $d_v . "[o+1]*256 + " . $d_v . "[o+2], _R16(" . $d_v . ", o+3), _R16(" . $d_v . ", o+5) end; "; - - $lua .= "local " . $v_v . "; " . $v_v . " = function(spc, layer) "; - $lua .= "local " . $stack_v . " = {}; local pc = spc or 1; local cur_layer = layer or 1; "; - $lua .= "while true do local op, a, b = " . $f_v . "(pc); "; - $cases = []; - $op_getglobal = $this->opMap['GETGLOBAL']; - $cases[] = "elseif op == $op_getglobal then if " . $this->genOpaquePredicate('true') . " then local n = " . $c_v . "[b + 1]; local t = " . $e_v . "; for p in n:gmatch('[^.:]+') do t = t[p] end; " . $stack_v . "[a] = t; else pc = pc + " . rand(100, 1000) . " end "; + // Table Virtualization: Key Transformation + $lua .= "local function " . $tk_v . "(k, s) if type(k) ~= 'string' then return k end; local r = {}; for i = 1, #k do r[i] = string.char(bit32.bxor(k:byte(i), s)) end; return table.concat(r) end; "; - $op_loadk = $this->opMap['LOADK']; - $cases[] = "elseif op == $op_loadk then " . $stack_v . "[a] = " . $c_v . "[b + 1] "; + // Assembly Math sub-VM + $lua .= "local function " . $asm_v . "(data) "; + $lua .= "local ops = {}; for x in data:gmatch('\"ops\":%[(.-)%]') do for v in x:gmatch('%d+') do ops[#ops+1] = tonumber(v) end end; "; + $lua .= "local rem = 0; for x in data:gmatch('\"remainder\":(%-?%d+%.?%d*)') do rem = tonumber(x) end; "; + $lua .= "local val = 0; "; + $lua .= "for i = 1, #ops do "; + $lua .= "local op = bit32.band(ops[i], 0x7); local imm = bit32.rshift(ops[i], 3); "; + $lua .= "if op == 1 then val = val + imm elseif op == 2 then val = val - imm elseif op == 3 then val = val * ((imm % 3) + 1) elseif op == 4 then val = bit32.bxor(val, imm) end; "; + $lua .= "end; return val + rem; end; "; - $op_call = $this->opMap['CALL']; - $cases[] = "elseif op == $op_call then local f = " . $stack_v . "[a]; local args = {}; for m = 1, b do args[m] = " . $stack_v . "[a + m] end; if f == " . $v_v . " then " . $v_v . "(" . $stack_v . "[a+1], cur_layer + 1) else f(unpack(args)) end "; + // Anti-Tamper + $lua .= "local function " . $tamper_v . "() "; + $lua .= "local is_re = false; "; + $lua .= "if debug and debug.info then "; + $lua .= "local s = debug.info(print, 's'); if s ~= '[C]' then is_re = true end; "; + $lua .= "end; "; + $lua .= "if type(bit32) ~= 'table' or type(bit32.bxor) ~= 'function' then is_re = true end; "; + $lua .= "if is_re then while true do end end; "; + $lua .= "end; "; - $op_setglobal = $this->opMap['SETGLOBAL']; - $cases[] = "elseif op == $op_setglobal then local n = " . $c_v . "[b + 1]; " . $e_v . "[n] = " . $stack_v . "[a] "; + $lua .= "local function " . $fetch_v . "(p) local o = 5 + (p - 1) * 5; "; + $lua .= "return " . $d_v . "[o], " . $d_v . "[o+1], _R16(" . $d_v . ", o+2), " . $d_v . "[o+4] end; "; - $op_return = $this->opMap['RETURN']; - $cases[] = "elseif op == $op_return then return "; + $lua .= "local " . $poly_v . " = " . $this->polyKey . "; "; - $op_opaque = $this->opMap['OPAQUE']; - $cases[] = "elseif op == $op_opaque then if " . $tm_v . "() then while true do end else " . $stack_v . "[0] = math.sqrt(a*b) end "; - - $op_recursive_call = $this->opMap['RECURSIVE_CALL']; - $cases[] = "elseif op == $op_recursive_call then " . $v_v . "(a, cur_layer + 1) "; - - $op_tamper_check = $this->opMap['TAMPER_CHECK']; - $cases[] = "elseif op == $op_tamper_check then if " . $tm_v . "() then while true do end end "; - - $op_layer_enter = $this->opMap['LAYER_ENTER']; - $cases[] = "elseif op == $op_layer_enter then if cur_layer < 10 then " . $v_v . "(pc + 1, cur_layer + 1) return end "; - - $op_call_gk = $this->opMap['CALL_GLOBAL_K']; - $cases[] = "elseif op == $op_call_gk then local n = " . $c_v . "[a + 1]; local f = " . $e_v . "; for p in n:gmatch('[^.:]+') do f = f[p] end; f(" . $c_v . "[b + 1]) "; + // VM Implementation + $lua .= "local " . $v_v . " = function() "; + $lua .= "local " . $stack_v . " = {}; local pc = 1; local " . $watchdog_v . " = 0; "; + $lua .= "local " . $handlers_v . " = {}; "; - $op_stack_shuffle = $this->opMap['STACK_SHUFFLE']; - $cases[] = "elseif op == $op_stack_shuffle then local t = " . $stack_v . "[a]; " . $stack_v . "[a] = " . $stack_v . "[b]; " . $stack_v . "[b] = t; "; - - shuffle($cases); - - $lua .= "local function " . $layers_v . "(op, a, b, pc) "; - $lua .= "if false then elseif op == -1 then return "; - $lua .= implode(" ", $cases); - $lua .= " end end; "; + // Define Handlers + foreach ($this->opMap as $name => $val) { + $lua .= $handlers_v . "[" . $val . "] = function(a, b, c) "; + switch($name) { + case 'GETGLOBAL': $lua .= "local n = " . $c_v . "[b + 1]; local t = " . $e_v . "; for p in n:gmatch('[^.:]+') do t = t[p] end; " . $stack_v . "[a] = t; "; break; + case 'LOADK': $lua .= $stack_v . "[a] = " . $c_v . "[b + 1]; "; break; + case 'LOAD_ASM_MATH': $lua .= $stack_v . "[a] = " . $asm_v . "(" . $c_v . "[b + 1]); "; break; + case 'CALL': $lua .= "local f = " . $stack_v . "[a]; local args = {}; for m = 1, b do args[m] = " . $stack_v . "[a + m] end; if f then f((table.unpack or unpack)(args)) end; "; break; + case 'SETGLOBAL': $lua .= "local n = " . $c_v . "[b + 1]; " . $e_v . "[n] = " . $stack_v . "[a]; "; break; + case 'RETURN': $lua .= "pc = -1; "; break; + case 'NEWTABLE': $lua .= $stack_v . "[a] = {__isVTable = true, data = {}, seed = math.random(1, 255)}; "; break; + case 'SETTABLE': $lua .= "local t = " . $stack_v . "[a]; local k = " . $c_v . "[b + 1]; local v = " . $stack_v . "[c]; if type(t) == 'table' and t.__isVTable then t.data[" . $tk_v . "(k, t.seed)] = v else t[k] = v end; "; break; + case 'GETTABLE': $lua .= "local t = " . $stack_v . "[b]; local k = " . $c_v . "[c + 1]; if type(t) == 'table' and t.__isVTable then " . $stack_v . "[a] = t.data[" . $tk_v . "(k, t.seed)] else " . $stack_v . "[a] = t[k] end; "; break; + case 'JUNK1': case 'JUNK2': case 'JUNK3': $lua .= "local x = a + b + c; "; break; + case 'OPAQUE': $lua .= "if math.abs(a) < -1 then pc = pc + b end; "; break; + case 'TAMPER_CHECK': $lua .= $tamper_v . "(); "; break; + default: $lua .= " "; break; + } + $lua .= "end; "; + } - $lua .= "local s, e = pcall(" . $layers_v . ", op, a, b, pc); "; - $lua .= "if not s then if " . $tm_v . "() then while true do end else error(e) end end; "; - $lua .= "pc = pc + 1; end end; "; + // Main Dispatch Loop + $lua .= "while pc > 0 do "; + $lua .= "local raw_op, a, b, c = " . $fetch_v . "(pc); if not raw_op then break end; "; + $lua .= "local op = bit32.bxor(raw_op, (" . $poly_v . " + pc) % 256); "; + $lua .= "local h = " . $handlers_v . "[op]; "; + $lua .= "if h then h(a, b, c) end; "; + $lua .= "pc = pc + 1; " . $watchdog_v . " = " . $watchdog_v . " + 1; "; + $lua .= "if " . $watchdog_v . " > 5000 then " . $watchdog_v . " = 0; if task and task.wait then task.wait() elseif wait then wait() end end; "; + $lua .= "end end; "; + + $lua .= "pcall(" . $v_v . "); "; - $lua .= "pcall(" . $v_v . ", 1, 1); "; - return [ 'success' => true, 'protected_code' => $lua, - 'stats' => [ - 'original_size' => strlen($this->rawCode), - 'protected_size' => strlen($lua), - 'vm_version' => '6.2-recursive-layered' - ] + 'stats' => ['original_size' => strlen($this->rawCode), 'protected_size' => strlen($lua), 'vm_version' => '8.1-table-virt'] ]; } } try { - $vm = new LuartexHyperionV6_2($code); + $vm = new LuartexHyperionV8_1($code); echo json_encode($vm->build()); } catch (Exception $e) { echo json_encode(['success' => false, 'error' => $e->getMessage()]); diff --git a/protected_v8_0.lua b/protected_v8_0.lua new file mode 100644 index 0000000..ce18bb6 --- /dev/null +++ b/protected_v8_0.lua @@ -0,0 +1,2 @@ +-- [[ Hyperion Engine V8.0 - Roblox Optimized ]] -- +local _vsuzqvMiBwivbb8OwS91bbQQv08102bv736e = { 204,190,78,16,231,70,18,19,137,217,49,240,25,166,200,228,4,173,78,84,221,135,166,204,15,19,11,127,107,49,55,81 }; local _ZvOimq88ugsQ8v91SwgqZn2mqs9mlMuv7cb2 = "ccaf6c076913746400ff9b4ad579e41b148c7d69891cd09515bab1b4b4b8c95eec8b7743ae3356752160fb2a075bc7fb30291c37a903fd6b12dace58973b29ba72ef2c6366bfb4a44106120b4bbbec1354a43c7e38220c0b6c01f174771b7e1eaccfc4c94337d42c282064eb307c86bb742d48f7684279caf718115c837c693e4eb0eca323998be481c0102655fba69a0e0cfd97058d50c91731ef34375c4b336cf08c80e9b31404a07f7baa75d6647bb46c9dc12982b0eb375a511a16bca9fe2027d59386215d4bafa00db3bb0b4676f41ed335a5cde8ab180a059d9af5f3fb486f0462b117312a84c49b3df81a063bf4a92c0580ac84aa779a91ce9b8988ccb8ca1403eb6a04017329f425f52d1e3524ac2872fa96d14b97ba92e6d8bea53194af493be650e1f04e12db689a36b69a40857e5ec56b44129796b0edf24e287e8cef2b0e06a0c7c52665da0b15bbecba74e61cb56909303ee7fbf174771a7b7bdfbaa0f742f3d4c471435a8756eeeada0049f4c6596e501ede1b1154577f1f5f202eeca32380b785eda36ea7348fcff4fa2caef27a173cbf2d3b3134371b32fc037fffe139e826338dd74f8744eb7057815bb08619b79cda04627d25278485cf3c439dd3d67f0516f0ac62bcb90d5306f86ece32a4c3f9e5331f03d6cdadb9a6027b7935be725444e1a1c36ab51b062fb2c033169dab9ecc57eafebdb988c9caa9dc1819a21374640c06f225bc084e7e70ac2872fa96"; local _wq9ubnzqsgqwqZgQs9zMI10BmswMlunw3df7 = (getgenv and getgenv()) or (getfenv and getfenv(0)) or _G; local function _H(h) local b = {}; for i = 1, #h, 2 do b[#b+1] = tonumber(h:sub(i, i+1), 16) end return b end; local function _D(b) local o = {}; for i = 1, #b do local k = ((i - 1) % 32) + 1; o[i] = bit32.bxor(b[i], _vsuzqvMiBwivbb8OwS91bbQQv08102bv736e[k], ((i - 1) * 17) % 256) end return o end; local _5Osvvv0bOZsBvw2vs0O2iS1ZISb8nMQ9c85e = _D(_H(_ZvOimq88ugsQ8v91SwgqZn2mqs9mlMuv7cb2)); local function _R32(b, p) return b[p]*16777216 + b[p+1]*65536 + b[p+2]*256 + b[p+3] end; local function _R16(b, p) return b[p]*256 + b[p+1] end; local ic = _R32(_5Osvvv0bOZsBvw2vs0O2iS1ZISb8nMQ9c85e, 1); local co = 5 + ic * 5; local cc = _R32(_5Osvvv0bOZsBvw2vs0O2iS1ZISb8nMQ9c85e, co); local _iblzmqQ5I8ZinvQsq2zI00sizqzzZ9wwe0d6 = {}; local cu = co + 4; for i = 1, cc do local t = _5Osvvv0bOZsBvw2vs0O2iS1ZISb8nMQ9c85e[cu]; cu = cu + 1; if t == 1 or t == 2 then local l = _R32(_5Osvvv0bOZsBvw2vs0O2iS1ZISb8nMQ9c85e, cu); cu = cu + 4; local s = {}; for j = 1, l do s[j] = string.char(_5Osvvv0bOZsBvw2vs0O2iS1ZISb8nMQ9c85e[cu]); cu = cu + 1 end; s = table.concat(s); if t == 2 then _iblzmqQ5I8ZinvQsq2zI00sizqzzZ9wwe0d6[i] = tonumber(s) else _iblzmqQ5I8ZinvQsq2zI00sizqzzZ9wwe0d6[i] = s end; else cu = cu + 1 end end; local function _2OQ2z2b9s1qwiiM9qnsw59z1vMlZbBnZ0f97(data) local ops = {}; for x in data:gmatch('"ops":%[(.-)%]') do for v in x:gmatch('%d+') do ops[#ops+1] = tonumber(v) end end; local rem = 0; for x in data:gmatch('"remainder":(%-?%d+%.?%d*)') do rem = tonumber(x) end; local val = 0; for i = 1, #ops do local op = bit32.band(ops[i], 0x7); local imm = bit32.rshift(ops[i], 3); if op == 1 then val = val + imm elseif op == 2 then val = val - imm elseif op == 3 then val = val * ((imm % 3) + 1) elseif op == 4 then val = bit32.bxor(val, imm) end; end; return val + rem; end; local function _2vBuMS19sSOMz8mngsmbBBnqmSM055vu999d() local is_re = false; if debug and debug.info then local s = debug.info(print, 's'); if s ~= '[C]' then is_re = true end; end; local suspicious = {'hookfunction', 'hookmetamethod', 'getreg', 'getgc', 'setupvalue', 'setconstant'}; local d = 0; for _, n in ipairs(suspicious) do if _G[n] or (getgenv and getgenv()[n]) then d = d + 1 end end; if d > 4 then is_re = true end; if is_re then while true do end end; end; local function _BqS2mus80vBl2151B9uIwgm0IgSm0ibi8767(p) local o = 5 + (p - 1) * 5; return _5Osvvv0bOZsBvw2vs0O2iS1ZISb8nMQ9c85e[o], _R16(_5Osvvv0bOZsBvw2vs0O2iS1ZISb8nMQ9c85e, o+1), _R16(_5Osvvv0bOZsBvw2vs0O2iS1ZISb8nMQ9c85e, o+3) end; local _u1QOzq1g50m82nMbOwZ91B5MwznvmnQ2342a = 93; local _82z0lwBsn850zbzgqOIbnlwQ981ZwZ0194ff = function() local _9zQBuu9Iq9mBO2vbq2v05iM2n9vuzb093236 = {}; local pc = 1; local _BqmigZv22wZbSvbi0Mnv8uSmBMQIi2SSacc0 = 0; local _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb = {}; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[173] = function(a, b) end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[175] = function(a, b) end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[162] = function(a, b) local f = _9zQBuu9Iq9mBO2vbq2v05iM2n9vuzb093236[a]; local args = {}; for m = 1, b do args[m] = _9zQBuu9Iq9mBO2vbq2v05iM2n9vuzb093236[a + m] end; if f then f(unpack(args)) end; end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[132] = function(a, b) end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[246] = function(a, b) end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[105] = function(a, b) end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[213] = function(a, b) end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[151] = function(a, b) end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[7] = function(a, b) local n = _iblzmqQ5I8ZinvQsq2zI00sizqzzZ9wwe0d6[b + 1]; _wq9ubnzqsgqwqZgQs9zMI10BmswMlunw3df7[n] = _9zQBuu9Iq9mBO2vbq2v05iM2n9vuzb093236[a]; end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[59] = function(a, b) if math.abs(a) < -1 then pc = pc + b end; end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[176] = function(a, b) end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[83] = function(a, b) end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[247] = function(a, b) pc = -1; end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[180] = function(a, b) end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[8] = function(a, b) end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[111] = function(a, b) end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[159] = function(a, b) end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[45] = function(a, b) end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[13] = function(a, b) end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[35] = function(a, b) _2vBuMS19sSOMz8mngsmbBBnqmSM055vu999d(); end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[214] = function(a, b) end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[221] = function(a, b) end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[185] = function(a, b) end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[9] = function(a, b) end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[145] = function(a, b) end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[226] = function(a, b) end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[224] = function(a, b) _9zQBuu9Iq9mBO2vbq2v05iM2n9vuzb093236[a] = _iblzmqQ5I8ZinvQsq2zI00sizqzzZ9wwe0d6[b + 1]; end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[108] = function(a, b) end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[40] = function(a, b) end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[160] = function(a, b) end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[20] = function(a, b) end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[232] = function(a, b) _9zQBuu9Iq9mBO2vbq2v05iM2n9vuzb093236[a] = _2OQ2z2b9s1qwiiM9qnsw59z1vMlZbBnZ0f97(_iblzmqQ5I8ZinvQsq2zI00sizqzzZ9wwe0d6[b + 1]); end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[45] = function(a, b) end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[144] = function(a, b) local x = a + b; end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[45] = function(a, b) end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[86] = function(a, b) end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[31] = function(a, b) local x = a + b; end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[148] = function(a, b) local n = _iblzmqQ5I8ZinvQsq2zI00sizqzzZ9wwe0d6[b + 1]; local t = _wq9ubnzqsgqwqZgQs9zMI10BmswMlunw3df7; for p in n:gmatch('[^.:]+') do t = t[p] end; _9zQBuu9Iq9mBO2vbq2v05iM2n9vuzb093236[a] = t; end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[57] = function(a, b) end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[250] = function(a, b) end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[65] = function(a, b) end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[165] = function(a, b) local x = a + b; end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[103] = function(a, b) end; _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[222] = function(a, b) end; while pc > 0 do local raw_op, a, b = _BqS2mus80vBl2151B9uIwgm0IgSm0ibi8767(pc); if not raw_op then break end; local op = bit32.bxor(raw_op, (_u1QOzq1g50m82nMbOwZ91B5MwznvmnQ2342a + pc) % 256); local h = _qb8sm1O5MsqM8ZZgvwnilg0ImQ52b1imd7bb[op]; if h then h(a, b) end; pc = pc + 1; _BqmigZv22wZbSvbi0Mnv8uSmBMQIi2SSacc0 = _BqmigZv22wZbSvbi0Mnv8uSmBMQIi2SSacc0 + 1; if _BqmigZv22wZbSvbi0Mnv8uSmBMQIi2SSacc0 > 10000 then _BqmigZv22wZbSvbi0Mnv8uSmBMQIi2SSacc0 = 0; if task and task.wait then task.wait() elseif wait then wait() end end; end end; pcall(_82z0lwBsn850zbzgqOIbnlwQ981ZwZ0194ff); \ No newline at end of file diff --git a/protected_v8_1.lua b/protected_v8_1.lua new file mode 100644 index 0000000..1c7aba1 --- /dev/null +++ b/protected_v8_1.lua @@ -0,0 +1,2 @@ +-- [[ Hyperion Engine V8.1 - Roblox Optimized ]] -- +local _vvBll1vsnIS5uIz8QMi2glsm1M8QvnQs14b6 = { 148,91,107,184,169,135,186,211,152,221,133,24,111,14,128,144,247,111,193,217,99,255,103,123,211,130,3,213,196,64,61,210 }; local _92sZmZ58BObQZizBBiZummg80zZiw9m95d71 = "944a49b75cd2dca510532ea3a1d34e6fe74ff387e19a69170050b99b01cac3ddb46a0debcdf13c0cd564232fa8268e8f9a39d6baf60c4adc6b4ad923394d27fdfa0a09ca2db40964f316d0e36316ae82a70eb55ac40ed16ea364fade4776a09df42be92e0c327b04d5268f054304cecf85eef47ad732b1a92b8b10fe4bdf63072962c90b6c52502590ceaf892153e7ef59ce7318b724087c9548969e9826436034eaa56b9c72bcc5b093ce430e73dd0d47a2137b97fa735c248f594c8419a37d558af94aad9c9ca1d084ee6395e02e96605633da78da193c8bfb792b3bedad7a061269fa086efc84f1a47782c3a24e02076ed2fa96ba311dab6c987e6a8db33d944b49b76fd210bed5442fb0a3176f6fe44ea79a379b1120ca2bfd12d1adc3dcb40528ebd9f2644430654f0683f38e8fc72e93af167af1dc5503a04e5d3f4a92ba2a5ff303233c4970500e810f768ef9ce7cc72f9636b8c66a1f90b1b64d25bda6458b47624a5c4b0050e66e2a49ababa7ab3d1dbe54d49d2b8b19fb887f0ad360cbc90b6d7b145de0a1dd4a4c3dceb95fe0423a9a3ac51da9c75cbece443129418bc5023713c8addf8aef1766007a0e47ae133dfa83253d89a73cbfb8cda35e15e9ea2edee1f58ab7a4bb0281ff4b0f51e752fa21b32348fe8a1537228cf7741bc453aa8db2fc959ddd5be2a1df2b14251db69925df453ef60a997e788b9058f7382cffecd2dca417174ac0d1b61a55e64ef39a3bf768a82a49d57b36c4adbbdb6b29ebcdf6552a560b4ec383f38bc6a948fc80167af1dc7b26a06a592f4f988f2865ae5b7770460d056fe36316c2cad16bdf5bf75ad1ba470e8fbbb457029df42af76865571f6f194ae8231752aca3e2ce181fae1af5f559ee7a8a94744d933acbc90b6d59287fb2b7ca4051369acd3acf731ab719e71da7aa399e980910285789cc183e489c92d996bb36621f677526da7a55f9da3d3d92ae2b9ee8acd00e31ee884bad92baa2b1ed831691f6140f71e741ae02bb3d55f18a0d373783a35115d30cd9adff95f79dc57be0abb24e4f0764b09232d95a48ca69f51b798de33d860c20e584a1b4c17464799b8de24e3b823d87"; local _QzvbgIImgOB9i8giZIB8lZQMnq9Si9Mlbcc1 = (getgenv and getgenv()) or (getfenv and getfenv(0)) or _G; local function _H(h) local b = {}; for i = 1, #h, 2 do b[#b+1] = tonumber(h:sub(i, i+1), 16) end return b end; local function _D(b) local o = {}; for i = 1, #b do local k = ((i - 1) % 32) + 1; o[i] = bit32.bxor(b[i], _vvBll1vsnIS5uIz8QMi2glsm1M8QvnQs14b6[k], ((i - 1) * 17) % 256) end return o end; local _giwzwQg5lOs8szilb59Bb8B0sZqizznq7ce9 = _D(_H(_92sZmZ58BObQZizBBiZummg80zZiw9m95d71)); local function _R32(b, p) return b[p]*16777216 + b[p+1]*65536 + b[p+2]*256 + b[p+3] end; local function _R16(b, p) return b[p]*256 + b[p+1] end; local ic = _R32(_giwzwQg5lOs8szilb59Bb8B0sZqizznq7ce9, 1); local co = 5 + ic * 5; local cc = _R32(_giwzwQg5lOs8szilb59Bb8B0sZqizznq7ce9, co); local _SbiggB10O0Q0u9s5ZlzsB8QSmZ0vO82O1bd9 = {}; local cu = co + 4; for i = 1, cc do local t = _giwzwQg5lOs8szilb59Bb8B0sZqizznq7ce9[cu]; cu = cu + 1; if t == 1 or t == 2 then local l = _R32(_giwzwQg5lOs8szilb59Bb8B0sZqizznq7ce9, cu); cu = cu + 4; local s = {}; for j = 1, l do s[j] = string.char(_giwzwQg5lOs8szilb59Bb8B0sZqizznq7ce9[cu]); cu = cu + 1 end; s = table.concat(s); if t == 2 then _SbiggB10O0Q0u9s5ZlzsB8QSmZ0vO82O1bd9[i] = tonumber(s) else _SbiggB10O0Q0u9s5ZlzsB8QSmZ0vO82O1bd9[i] = s end; else cu = cu + 1 end end; local function _BMbg8lgM2bqqvi08wgZizqSlibIgQ1Zq43a3(k, s) if type(k) ~= 'string' then return k end; local r = {}; for i = 1, #k do r[i] = string.char(bit32.bxor(k:byte(i), s)) end; return table.concat(r) end; local function _BgnsM8S5iOMmuzBs15nMg9biZsSn5vvm239b(data) local ops = {}; for x in data:gmatch('"ops":%[(.-)%]') do for v in x:gmatch('%d+') do ops[#ops+1] = tonumber(v) end end; local rem = 0; for x in data:gmatch('"remainder":(%-?%d+%.?%d*)') do rem = tonumber(x) end; local val = 0; for i = 1, #ops do local op = bit32.band(ops[i], 0x7); local imm = bit32.rshift(ops[i], 3); if op == 1 then val = val + imm elseif op == 2 then val = val - imm elseif op == 3 then val = val * ((imm % 3) + 1) elseif op == 4 then val = bit32.bxor(val, imm) end; end; return val + rem; end; local function _2gmbBuQg0Ouzu9bgBZmIOO2mQZ52zsug3eb5() local is_re = false; if debug and debug.info then local s = debug.info(print, 's'); if s ~= '[C]' then is_re = true end; end; if type(bit32) ~= 'table' or type(bit32.bxor) ~= 'function' then is_re = true end; if is_re then while true do end end; end; local function _uvQ28BSZv80sbMqsqmBSO52ZwBn9vl5q42e6(p) local o = 5 + (p - 1) * 5; return _giwzwQg5lOs8szilb59Bb8B0sZqizznq7ce9[o], _giwzwQg5lOs8szilb59Bb8B0sZqizznq7ce9[o+1], _R16(_giwzwQg5lOs8szilb59Bb8B0sZqizznq7ce9, o+2), _giwzwQg5lOs8szilb59Bb8B0sZqizznq7ce9[o+4] end; local _qu9nSIm2zm1zqZ55QvSlg8bv1MmZbBQz7842 = 31; local _BiQ22liMnwQbZ9OQzqn5bmsb99QSMi0g5e19 = function() local _Sm88m9gO2IZu21Z5I0wO09iZQlvg0w155309 = {}; local pc = 1; local _8q2Z9lSiOZ0i5IOl8SOOl2095mMw192B07e7 = 0; local _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b = {}; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[54] = function(a, b, c) _Sm88m9gO2IZu21Z5I0wO09iZQlvg0w155309[a] = _SbiggB10O0Q0u9s5ZlzsB8QSmZ0vO82O1bd9[b + 1]; end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[2] = function(a, b, c) local n = _SbiggB10O0Q0u9s5ZlzsB8QSmZ0vO82O1bd9[b + 1]; _QzvbgIImgOB9i8giZIB8lZQMnq9Si9Mlbcc1[n] = _Sm88m9gO2IZu21Z5I0wO09iZQlvg0w155309[a]; end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[109] = function(a, b, c) end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[164] = function(a, b, c) end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[195] = function(a, b, c) end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[155] = function(a, b, c) end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[184] = function(a, b, c) end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[242] = function(a, b, c) end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[34] = function(a, b, c) end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[239] = function(a, b, c) end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[139] = function(a, b, c) local x = a + b + c; end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[170] = function(a, b, c) end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[222] = function(a, b, c) end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[154] = function(a, b, c) end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[34] = function(a, b, c) local t = _Sm88m9gO2IZu21Z5I0wO09iZQlvg0w155309[a]; local k = _SbiggB10O0Q0u9s5ZlzsB8QSmZ0vO82O1bd9[b + 1]; local v = _Sm88m9gO2IZu21Z5I0wO09iZQlvg0w155309[c]; if type(t) == 'table' and t.__isVTable then t.data[_BMbg8lgM2bqqvi08wgZizqSlibIgQ1Zq43a3(k, t.seed)] = v else t[k] = v end; end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[215] = function(a, b, c) end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[239] = function(a, b, c) end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[188] = function(a, b, c) end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[1] = function(a, b, c) local t = _Sm88m9gO2IZu21Z5I0wO09iZQlvg0w155309[b]; local k = _SbiggB10O0Q0u9s5ZlzsB8QSmZ0vO82O1bd9[c + 1]; if type(t) == 'table' and t.__isVTable then _Sm88m9gO2IZu21Z5I0wO09iZQlvg0w155309[a] = t.data[_BMbg8lgM2bqqvi08wgZizqSlibIgQ1Zq43a3(k, t.seed)] else _Sm88m9gO2IZu21Z5I0wO09iZQlvg0w155309[a] = t[k] end; end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[126] = function(a, b, c) end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[24] = function(a, b, c) end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[231] = function(a, b, c) end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[180] = function(a, b, c) end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[94] = function(a, b, c) end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[31] = function(a, b, c) end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[163] = function(a, b, c) end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[187] = function(a, b, c) end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[137] = function(a, b, c) end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[194] = function(a, b, c) _2gmbBuQg0Ouzu9bgBZmIOO2mQZ52zsug3eb5(); end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[62] = function(a, b, c) local x = a + b + c; end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[145] = function(a, b, c) local n = _SbiggB10O0Q0u9s5ZlzsB8QSmZ0vO82O1bd9[b + 1]; local t = _QzvbgIImgOB9i8giZIB8lZQMnq9Si9Mlbcc1; for p in n:gmatch('[^.:]+') do t = t[p] end; _Sm88m9gO2IZu21Z5I0wO09iZQlvg0w155309[a] = t; end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[158] = function(a, b, c) pc = -1; end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[2] = function(a, b, c) local f = _Sm88m9gO2IZu21Z5I0wO09iZQlvg0w155309[a]; local args = {}; for m = 1, b do args[m] = _Sm88m9gO2IZu21Z5I0wO09iZQlvg0w155309[a + m] end; if f then f((table.unpack or unpack)(args)) end; end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[213] = function(a, b, c) end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[172] = function(a, b, c) end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[69] = function(a, b, c) end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[21] = function(a, b, c) end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[111] = function(a, b, c) local x = a + b + c; end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[188] = function(a, b, c) end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[234] = function(a, b, c) end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[3] = function(a, b, c) if math.abs(a) < -1 then pc = pc + b end; end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[197] = function(a, b, c) end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[14] = function(a, b, c) _Sm88m9gO2IZu21Z5I0wO09iZQlvg0w155309[a] = _BgnsM8S5iOMmuzBs15nMg9biZsSn5vvm239b(_SbiggB10O0Q0u9s5ZlzsB8QSmZ0vO82O1bd9[b + 1]); end; _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[66] = function(a, b, c) _Sm88m9gO2IZu21Z5I0wO09iZQlvg0w155309[a] = {__isVTable = true, data = {}, seed = math.random(1, 255)}; end; while pc > 0 do local raw_op, a, b, c = _uvQ28BSZv80sbMqsqmBSO52ZwBn9vl5q42e6(pc); if not raw_op then break end; local op = bit32.bxor(raw_op, (_qu9nSIm2zm1zqZ55QvSlg8bv1MmZbBQz7842 + pc) % 256); local h = _u9bmmn1SB2S90IlqmnzOSlvOB10v0nsqa89b[op]; if h then h(a, b, c) end; pc = pc + 1; _8q2Z9lSiOZ0i5IOl8SOOl2095mMw192B07e7 = _8q2Z9lSiOZ0i5IOl8SOOl2095mMw192B07e7 + 1; if _8q2Z9lSiOZ0i5IOl8SOOl2095mMw192B07e7 > 5000 then _8q2Z9lSiOZ0i5IOl8SOOl2095mMw192B07e7 = 0; if task and task.wait then task.wait() elseif wait then wait() end end; end end; pcall(_BiQ22liMnwQbZ9OQzqn5bmsb99QSMi0g5e19); \ No newline at end of file diff --git a/test_v8_0.php b/test_v8_0.php new file mode 100644 index 0000000..351a5dd --- /dev/null +++ b/test_v8_0.php @@ -0,0 +1,48 @@ + $code]); + +$ch = curl_init('http://localhost/process.php'); +curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); +curl_setopt($ch, CURLOPT_POST, true); +curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); +curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); + +$response = curl_exec($ch); +curl_close($ch); + +$res = json_decode($response, true); +if ($res && $res['success']) { + $protected_code = $res['protected_code']; + file_put_contents('protected_v8_0.lua', $protected_code); + echo "Obfuscation successful. Output saved to protected_v8_0.lua\n"; + echo "Stats: " . json_encode($res['stats']) . "\n"; + + // Quick syntax check using php if lua is not available, + // but better to just confirm the file exists and has content. + if (strlen($protected_code) > 1000) { + echo "Protected code looks valid (size: " . strlen($protected_code) . " bytes)\n"; + } +} else { + echo "Obfuscation failed: " . ($res['error'] ?? 'Unknown error') . "\n"; + echo "Response: " . $response . "\n"; +} + diff --git a/test_v8_1.php b/test_v8_1.php new file mode 100644 index 0000000..360f7e5 --- /dev/null +++ b/test_v8_1.php @@ -0,0 +1,60 @@ + $code]); + +$ch = curl_init('http://localhost/process.php'); +curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); +curl_setopt($ch, CURLOPT_POST, true); +curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); +curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); + +$response = curl_exec($ch); +curl_close($ch); + +$res = json_decode($response, true); +if ($res && $res['success']) { + $protected_code = $res['protected_code']; + file_put_contents('protected_v8_1.lua', $protected_code); + echo "Obfuscation successful. Output saved to protected_v8_1.lua\n"; + echo "Stats: " . json_encode($res['stats']) . "\n"; + + if (strlen($protected_code) > 1000) { + echo "Protected code looks valid (size: " . strlen($protected_code) . " bytes)\n"; + } +} else { + echo "Obfuscation failed: " . ($res['error'] ?? 'Unknown error') . "\n"; + echo "Response: " . $response . "\n"; +} +