Idk man new
This commit is contained in:
parent
ae2abc4582
commit
c7d0a00f78
@ -8,7 +8,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
function log(message, type = 'info') {
|
function log(message, type = 'info') {
|
||||||
const entry = document.createElement('div');
|
const entry = document.createElement('div');
|
||||||
entry.className = `log-entry log-${type}`;
|
entry.className = `log-entry log-${type}`;
|
||||||
const time = new Date().toLocaleTimeString([], { hour12: false, fractionalSecondDigits: 3 });
|
const time = new Date().toLocaleTimeString([], { hour12: false });
|
||||||
entry.textContent = `[${time}] ${message}`;
|
entry.textContent = `[${time}] ${message}`;
|
||||||
terminal.appendChild(entry);
|
terminal.appendChild(entry);
|
||||||
terminal.scrollTop = terminal.scrollHeight;
|
terminal.scrollTop = terminal.scrollHeight;
|
||||||
@ -25,43 +25,42 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const preset = document.getElementById('vm-preset').value;
|
|
||||||
const junk = document.getElementById('junk-code').value;
|
|
||||||
|
|
||||||
protectBtn.disabled = true;
|
protectBtn.disabled = true;
|
||||||
protectBtn.style.opacity = '0.5';
|
protectBtn.style.opacity = '0.5';
|
||||||
|
|
||||||
terminal.innerHTML = '';
|
terminal.innerHTML = '';
|
||||||
log(`INITIALIZING LUARTEX HARDENED KERNEL v3.0.0-PRO`, 'info');
|
log(`INITIALIZING LUARTEX EXTREME KERNEL v3.5-DELTA`, 'info');
|
||||||
await sleep(300);
|
await sleep(300);
|
||||||
log(`MODE: ${preset.toUpperCase()} | VIRTUALIZATION: MAX`, 'info');
|
log(`TARGET: ROBLOX / LUAU ENVIRONMENT`, 'info');
|
||||||
await sleep(400);
|
await sleep(400);
|
||||||
|
|
||||||
log(`Generating Randomized Opcode Table...`, 'info');
|
log(`MAPPING: Randomized Opcode IDs (100-255)...`, 'info');
|
||||||
await sleep(500);
|
await sleep(400);
|
||||||
log(`Encrypting Constant Table with Multi-Key Rotation...`, 'info');
|
log(`ENCRYPTION: 4-Key XOR Rotation on Constants...`, 'info');
|
||||||
await sleep(600);
|
await sleep(400);
|
||||||
|
|
||||||
if (preset === 'obsidian') {
|
log(`VIRTUALIZATION: Register-based Dispatcher...`, 'info');
|
||||||
log(`STRENGTHENING: Control Flow Flattening...`, 'info');
|
await sleep(300);
|
||||||
await sleep(400);
|
log(`VIRTUALIZATION: Dot-Syntax Global Resolver...`, 'info');
|
||||||
log(`STRENGTHENING: Virtualizing IP & Registers...`, 'info');
|
await sleep(300);
|
||||||
await sleep(400);
|
|
||||||
log(`SECURITY: Deploying Anti-Hook & Integrity Guards...`, 'info');
|
|
||||||
await sleep(500);
|
|
||||||
log(`SECURITY: Initializing Timing-based Debugger Detection...`, 'info');
|
|
||||||
await sleep(300);
|
|
||||||
log(`SECURITY: Injecting Anti-Dump Infinite Loops...`, 'info');
|
|
||||||
await sleep(200);
|
|
||||||
}
|
|
||||||
|
|
||||||
log(`Compiling source to custom bytecode stream...`, 'info');
|
log(`SECURITY: Interleaving Anti-Hook Integrity Guards...`, 'info');
|
||||||
|
await sleep(400);
|
||||||
|
log(`SECURITY: Real-time tick() Timing Verification...`, 'info');
|
||||||
|
await sleep(300);
|
||||||
|
log(`SECURITY: debug.info Native Source Checks...`, 'info');
|
||||||
|
await sleep(200);
|
||||||
|
log(`SECURITY: Anti-Tamper State Synchronization...`, 'info');
|
||||||
|
await sleep(200);
|
||||||
|
|
||||||
|
log(`STRENGTHENING: Injecting Junk Opcodes...`, 'info');
|
||||||
|
await sleep(100);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await fetch('process.php', {
|
const response = await fetch('process.php', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: { 'Content-Type': 'application/json' },
|
headers: { 'Content-Type': 'application/json' },
|
||||||
body: JSON.stringify({ code, preset, junk })
|
body: JSON.stringify({ code })
|
||||||
});
|
});
|
||||||
|
|
||||||
const data = await response.json();
|
const data = await response.json();
|
||||||
@ -69,8 +68,9 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
if (data.success) {
|
if (data.success) {
|
||||||
await sleep(500);
|
await sleep(500);
|
||||||
outputArea.value = data.protected_code;
|
outputArea.value = data.protected_code;
|
||||||
log(`SUCCESS: Bytecode locked. Final Size: ${data.stats.protected_size}b`, 'success');
|
log(`SUCCESS: VM Locked. Final Size: ${data.stats.protected_size}b`, 'success');
|
||||||
log(`VM Status: SECURE | Entropy: 9.99`, 'success');
|
log(`VM Status: ULTRA-SECURE | Environment: DELTA COMPATIBLE`, 'success');
|
||||||
|
log(`Watermark: "ts was obfuscated by Luartex V3.2" injected.`, 'info');
|
||||||
} else {
|
} else {
|
||||||
log(`CRITICAL ERROR: ${data.error}`, 'warn');
|
log(`CRITICAL ERROR: ${data.error}`, 'warn');
|
||||||
}
|
}
|
||||||
|
|||||||
35
index.php
35
index.php
@ -23,13 +23,13 @@ $projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? 'Enterprise Luau Obfusc
|
|||||||
<nav class="navbar">
|
<nav class="navbar">
|
||||||
<a href="/" class="brand">LUAR<span>TEX</span></a>
|
<a href="/" class="brand">LUAR<span>TEX</span></a>
|
||||||
<div style="flex-grow: 1;"></div>
|
<div style="flex-grow: 1;"></div>
|
||||||
<div class="badge">VM v1.0.4-stable</div>
|
<div class="badge">VM v3.5-delta (Extreme)</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<main class="container-main">
|
<main class="container-main">
|
||||||
<header style="margin-bottom: 3rem;">
|
<header style="margin-bottom: 3rem;">
|
||||||
<h1 style="font-size: 3rem; margin-bottom: 0.5rem; letter-spacing: -2px;">Protect your <span style="color: var(--accent-color);">Luau</span> scripts.</h1>
|
<h1 style="font-size: 3rem; margin-bottom: 0.5rem; letter-spacing: -2px;">Protect your <span style="color: var(--accent-color);">Luau</span> scripts.</h1>
|
||||||
<p style="color: var(--text-secondary); max-width: 600px;">Luartex utilizes a proprietary custom VM architecture to transform your scripts into secure, encrypted bytecode that is resistant to reverse-engineering.</p>
|
<p style="color: var(--text-secondary); max-width: 600px;">Luartex utilizes a proprietary custom VM architecture to transform your scripts into secure, encrypted bytecode that is resistant to reverse-engineering. Optimized for Roblox Executors.</p>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<div class="workspace">
|
<div class="workspace">
|
||||||
@ -53,37 +53,12 @@ print('Hello Luartex!')"></textarea>
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="controls">
|
<div class="controls" style="justify-content: center;">
|
||||||
<div class="form-group">
|
<button id="protect-btn" class="btn-primary" style="padding: 1rem 4rem; font-size: 1.2rem;">Obfuscate with Maximum Protection</button>
|
||||||
<label>VM Preset</label>
|
|
||||||
<select id="vm-preset">
|
|
||||||
<option value="standard">Standard VM</option>
|
|
||||||
<option value="agile">Agile (Lightweight)</option>
|
|
||||||
<option value="iron">Ironclad (High Perf)</option>
|
|
||||||
<option value="obsidian">Obsidian (Extreme Protection)</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label>Junk Code</label>
|
|
||||||
<select id="junk-code">
|
|
||||||
<option value="none">None</option>
|
|
||||||
<option value="light">Light</option>
|
|
||||||
<option value="heavy">Heavy</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label>Encrypt Strings</label>
|
|
||||||
<select id="encrypt-strings">
|
|
||||||
<option value="true">Yes</option>
|
|
||||||
<option value="false">No</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div style="flex-grow: 1;"></div>
|
|
||||||
<button id="protect-btn" class="btn-primary">Protect Script</button>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="terminal" class="terminal-log">
|
<div id="terminal" class="terminal-log">
|
||||||
<div class="log-entry log-info">[SYSTEM] Luartex VM initialized. Ready for processing.</div>
|
<div class="log-entry log-info">[SYSTEM] Luartex VM v3.5 initialized. Delta Executor compatibility layer active.</div>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
|
|||||||
251
process.php
251
process.php
@ -10,21 +10,17 @@ if (!$input || empty($input['code'])) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$code = $input['code'];
|
$code = $input['code'];
|
||||||
$preset = $input['preset'] ?? 'standard';
|
|
||||||
|
|
||||||
class LuartexHardenedVM {
|
class LuartexExtremeVM {
|
||||||
private $rawCode;
|
private $rawCode;
|
||||||
private $preset;
|
|
||||||
private $opcodes = [];
|
private $opcodes = [];
|
||||||
private $constants = [];
|
private $constants = [];
|
||||||
private $instructions = [];
|
private $instructions = [];
|
||||||
private $keys = [];
|
private $keys = [];
|
||||||
private $varNames = [];
|
|
||||||
|
|
||||||
public function __construct($code, $preset) {
|
public function __construct($code) {
|
||||||
$this->rawCode = $code;
|
$this->rawCode = $code;
|
||||||
$this->preset = $preset;
|
$this->keys = [rand(128, 255), rand(128, 255), rand(128, 255), rand(128, 255)];
|
||||||
$this->keys = [rand(100, 255), rand(100, 255), rand(100, 255)];
|
|
||||||
$this->setupOpcodes();
|
$this->setupOpcodes();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -32,22 +28,19 @@ class LuartexHardenedVM {
|
|||||||
$ops = [
|
$ops = [
|
||||||
'LOADK', 'GETGLOBAL', 'SETGLOBAL', 'CALL', 'MOVE',
|
'LOADK', 'GETGLOBAL', 'SETGLOBAL', 'CALL', 'MOVE',
|
||||||
'ADD', 'SUB', 'MUL', 'DIV', 'MOD', 'POW',
|
'ADD', 'SUB', 'MUL', 'DIV', 'MOD', 'POW',
|
||||||
'JMP', 'EQ', 'LT', 'LE', 'RETURN', 'GETTABLE', 'SETTABLE', 'NEWTABLE'
|
'JMP', 'EQ', 'LT', 'LE', 'RETURN', 'GETTABLE', 'SETTABLE', 'NEWTABLE',
|
||||||
|
'CLOSURE', 'VARARG', 'FORPREP', 'FORLOOP'
|
||||||
];
|
];
|
||||||
shuffle($ops);
|
shuffle($ops);
|
||||||
foreach ($ops as $index => $op) {
|
foreach ($ops as $index => $op) {
|
||||||
$this->opcodes[$op] = $index + 50;
|
$this->opcodes[$op] = $index + 100;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function genVar() {
|
private function genVar() {
|
||||||
$chars = 'iIl1';
|
$chars = 'iI1l';
|
||||||
$res = '_';
|
$res = '_';
|
||||||
for($i=0; $i<14; $i++) $res .= $chars[rand(0, 3)];
|
for($i=0; $i<16; $i++) $res .= $chars[rand(0, 3)];
|
||||||
while (in_array($res, $this->varNames)) {
|
|
||||||
$res .= $chars[rand(0, 3)];
|
|
||||||
}
|
|
||||||
$this->varNames[] = $res;
|
|
||||||
return $res;
|
return $res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -85,144 +78,166 @@ class LuartexHardenedVM {
|
|||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function addConst($val) {
|
||||||
|
$idx = array_search($val, $this->constants);
|
||||||
|
if ($idx === false) {
|
||||||
|
$this->constants[] = $val;
|
||||||
|
$idx = count($this->constants) - 1;
|
||||||
|
}
|
||||||
|
return $idx;
|
||||||
|
}
|
||||||
|
|
||||||
private function encrypt($data) {
|
private function encrypt($data) {
|
||||||
if (is_string($data)) {
|
if (is_string($data)) {
|
||||||
$out = [];
|
$out = [];
|
||||||
for ($i = 0; $i < strlen($data); $i++) {
|
for ($i = 0; $i < strlen($data); $i++) {
|
||||||
$out[] = ord($data[$i]) ^ $this->keys[$i % 3];
|
$out[] = ord($data[$i]) ^ $this->keys[$i % 4];
|
||||||
}
|
}
|
||||||
return $out;
|
return $out;
|
||||||
}
|
}
|
||||||
return $data ^ $this->keys[0];
|
return (int)$data ^ $this->keys[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
private function compile() {
|
private function compile() {
|
||||||
$this->constants[] = "Luartex VM Protection v3.2.2";
|
$this->addConst("Luartex V3.5 Hardened VM");
|
||||||
|
preg_match_all('/([a-zA-Z_]\w*(?:\.[a-zA-Z_]\w*)?)\s*\((.*?)\)/', $this->rawCode, $matches);
|
||||||
preg_match_all('/print\s*\(\s*["\'](.*?)["\']\s*\)/', $this->rawCode, $matches);
|
if (isset($matches[1]) && !empty($matches[1])) {
|
||||||
|
foreach ($matches[1] as $idx => $funcName) {
|
||||||
$printIdx = array_search('print', $this->constants);
|
$argString = isset($matches[2][$idx]) ? trim($matches[2][$idx]) : '';
|
||||||
if ($printIdx === false) {
|
$fIdx = $this->addConst($funcName);
|
||||||
$this->constants[] = 'print';
|
$this->instructions[] = [$this->opcodes['GETGLOBAL'], 0, $fIdx];
|
||||||
$printIdx = count($this->constants) - 1;
|
if (empty($argString)) {
|
||||||
}
|
$this->instructions[] = [$this->opcodes['CALL'], 0, 0];
|
||||||
|
} elseif (preg_match('/^["\'](.*)["\']$/', $argString, $m)) {
|
||||||
foreach ($matches[1] as $val) {
|
$vIdx = $this->addConst($m[1]);
|
||||||
$valIdx = array_search($val, $this->constants);
|
$this->instructions[] = [$this->opcodes['LOADK'], 1, $vIdx];
|
||||||
if ($valIdx === false) {
|
$this->instructions[] = [$this->opcodes['CALL'], 0, 1];
|
||||||
$this->constants[] = $val;
|
} elseif (is_numeric($argString)) {
|
||||||
$valIdx = count($this->constants) - 1;
|
$vIdx = $this->addConst((float)$argString);
|
||||||
|
$this->instructions[] = [$this->opcodes['LOADK'], 1, $vIdx];
|
||||||
|
$this->instructions[] = [$this->opcodes['CALL'], 0, 1];
|
||||||
|
} else {
|
||||||
|
$this->instructions[] = [$this->opcodes['CALL'], 0, 0];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
$this->instructions[] = [$this->opcodes['GETGLOBAL'], 0, $printIdx];
|
$this->addConst("Luartex Protection Active");
|
||||||
$this->instructions[] = [$this->opcodes['LOADK'], 1, $valIdx];
|
|
||||||
$this->instructions[] = [$this->opcodes['CALL'], 0, 1];
|
|
||||||
}
|
}
|
||||||
|
for ($i=0; $i<10; $i++) {
|
||||||
for ($i=0; $i<3; $i++) {
|
$this->instructions[] = [$this->opcodes['MOVE'], rand(0, 50), rand(0, 50)];
|
||||||
$this->instructions[] = [$this->opcodes['MOVE'], rand(10, 20), rand(10, 20)];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->instructions[] = [$this->opcodes['RETURN'], 0, 0];
|
$this->instructions[] = [$this->opcodes['RETURN'], 0, 0];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function build() {
|
public function build() {
|
||||||
$this->compile();
|
$this->compile();
|
||||||
|
|
||||||
$encryptedConsts = [];
|
$encryptedConsts = [];
|
||||||
foreach ($this->constants as $c) {
|
foreach ($this->constants as $c) {
|
||||||
$encryptedConsts[] = $this->encrypt($c);
|
$encryptedConsts[] = $this->encrypt($c);
|
||||||
}
|
}
|
||||||
|
|
||||||
$encryptedInsts = [];
|
$encryptedInsts = [];
|
||||||
foreach ($this->instructions as $inst) {
|
foreach ($this->instructions as $inst) {
|
||||||
$encryptedInsts[] = [
|
$encryptedInsts[] = [
|
||||||
$inst[0] ^ $this->keys[0],
|
(int)$inst[0] ^ $this->keys[0],
|
||||||
$inst[1] ^ $this->keys[1],
|
(int)$inst[1] ^ $this->keys[1],
|
||||||
$inst[2] ^ $this->keys[2]
|
(int)$inst[2] ^ $this->keys[2]
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
$v_data = $this->genVar();
|
$v_v = $this->genVar();
|
||||||
$v_keys = $this->genVar();
|
$v_k = $this->genVar();
|
||||||
$v_env = $this->genVar();
|
$v_s = $this->genVar();
|
||||||
$v_guard = $this->genVar();
|
$v_i = $this->genVar();
|
||||||
$v_decrypt = $this->genVar();
|
$v_c = $this->genVar();
|
||||||
$v_stack = $this->genVar();
|
$v_o = $this->genVar();
|
||||||
$v_ip = $this->genVar();
|
$v_d = $this->genVar();
|
||||||
$v_consts = $this->genVar();
|
$v_g = $this->genVar();
|
||||||
$v_ops = $this->genVar();
|
$v_x = $this->genVar();
|
||||||
$v_insts = $this->genVar();
|
$v_e = $this->genVar();
|
||||||
$v_dispatch = $this->genVar();
|
$v_p = $this->genVar();
|
||||||
|
$v_r = $this->genVar();
|
||||||
|
$v_l = $this->genVar();
|
||||||
|
|
||||||
$k0 = $this->keys[0];
|
$k_str = implode(',', $this->keys);
|
||||||
$k1 = $this->keys[1];
|
$consts_table = $this->toLuaTable($encryptedConsts);
|
||||||
$k2 = $this->keys[2];
|
$insts_table = $this->toLuaTable($encryptedInsts);
|
||||||
|
$opcodes_table = $this->toLuaTable($this->opcodes);
|
||||||
|
|
||||||
$opMapString = $this->toLuaTable($this->opcodes);
|
$lua = "-- ts was obfuscated by Luartex V3.2\n";
|
||||||
$constsDataString = $this->toLuaTable($encryptedConsts);
|
$lua .= "local " . $v_v . " = {C = " . $consts_table . ", I = " . $insts_table . ", O = " . $opcodes_table . "}; ";
|
||||||
$instsDataString = $this->toLuaTable($encryptedInsts);
|
$lua .= "local " . $v_k . " = {" . $k_str . "}; ";
|
||||||
|
|
||||||
$lua = "local " . $v_data . " = { K = " . $constsDataString . ", I = " . $instsDataString . ", O = " . $opMapString . " } ";
|
|
||||||
$lua .= "local " . $v_keys . " = { " . $k0 . ", " . $k1 . ", " . $k2 . " } ";
|
|
||||||
$lua .= "return (function(...) ";
|
$lua .= "return (function(...) ";
|
||||||
$lua .= "local " . $v_env . " = getfenv() ";
|
$lua .= "local " . $v_e . " = getfenv and getfenv() or _G; ";
|
||||||
$lua .= "local function " . $v_guard . "() ";
|
$lua .= "local " . $v_p . " = tick(); ";
|
||||||
$lua .= "if debug and debug.info then local _n = debug.info(print, 's') if _n ~= '[C]' then while true do end end end ";
|
$lua .= "local function " . $v_g . "(_f) ";
|
||||||
$lua .= "local _t = os.clock() for i = 1, 1000 do end if os.clock() - _t > 0.5 then while true do end end ";
|
$lua .= "if debug and debug.info then ";
|
||||||
|
$lua .= "local _s, _l = debug.info(_f or print, 'sl'); if _s ~= '[C]' then while true do " . $v_p . " = " . $v_p . " + 1 end end ";
|
||||||
$lua .= "end ";
|
$lua .= "end ";
|
||||||
$lua .= "local function " . $v_decrypt . "(_d, _type) ";
|
$lua .= "if tick() - " . $v_p . " > 10 then while true do end end ";
|
||||||
$lua .= "if _type == 1 then local _o = '' for _i = 1, #_d do ";
|
$lua .= "end; ";
|
||||||
$lua .= "local _k = " . $v_keys . "[((_i - 1) % 3) + 1] ";
|
$lua .= "local function " . $v_x . "(_t) ";
|
||||||
$lua .= "_o = _o .. string.char(bit32.bxor(_d[_i], _k)) end return _o end ";
|
$lua .= "if type(_t) == 'table' then ";
|
||||||
$lua .= "return _d end ";
|
$lua .= "local _r = ''; for _j = 1, #_t do ";
|
||||||
$lua .= "local " . $v_stack . " = {} ";
|
$lua .= "local _idx = ((_j - 1) % 4) + 1; ";
|
||||||
$lua .= "local " . $v_ip . " = 1 ";
|
$lua .= "_r = _r .. string.char(bit32.bxor(_t[_j], " . $v_k . "[_idx])) ";
|
||||||
$lua .= "local " . $v_consts . " = {} ";
|
$lua .= "end return _r ";
|
||||||
$lua .= "for _k, _v in ipairs(" . $v_data . ".K) do " . $v_consts . "[_k - 1] = " . $v_decrypt . "(_v, 1) end ";
|
$lua .= "end return bit32.bxor(_t, " . $v_k . "[1]) ";
|
||||||
$lua .= "local " . $v_ops . " = " . $v_data . ".O ";
|
$lua .= "end; ";
|
||||||
$lua .= "local " . $v_insts . " = " . $v_data . ".I ";
|
$lua .= "local " . $v_r . " = {}; ";
|
||||||
$lua .= "local function " . $v_dispatch . "() ";
|
$lua .= "local " . $v_l . " = 1; ";
|
||||||
$lua .= "while true do " . $v_guard . "() ";
|
$lua .= "while " . $v_l . " <= #" . $v_v . ".I do ";
|
||||||
$lua .= "local _inst = " . $v_insts . "[" . $v_ip . "] ";
|
$lua .= "local " . $v_i . " = " . $v_v . ".I[" . $v_l . "]; ";
|
||||||
$lua .= "if not _inst then break end ";
|
$lua .= "local " . $v_o . " = bit32.bxor(" . $v_i . "[1], " . $v_k . "[1]); ";
|
||||||
$lua .= "local _op = bit32.bxor(_inst[1], " . $v_keys . "[1]) ";
|
$lua .= "local " . $v_a . " = bit32.bxor(" . $v_i . "[2], " . $v_k . "[2]); ";
|
||||||
$lua .= "local _a = bit32.bxor(_inst[2], " . $v_keys . "[2]) ";
|
$lua .= "local " . $v_b . " = bit32.bxor(" . $v_i . "[3], " . $v_k . "[3]); ";
|
||||||
$lua .= "local _b = bit32.bxor(_inst[3], " . $v_keys . "[3]) ";
|
|
||||||
$lua .= "if _op == " . $v_ops . ".GETGLOBAL then " . $v_stack . "[_a] = " . $v_env . "[" . $v_consts . "[_b]] ";
|
|
||||||
$lua .= "elseif _op == " . $v_ops . ".LOADK then " . $v_stack . "[_a] = " . $v_consts . "[_b] ";
|
|
||||||
$lua .= "elseif _op == " . $v_ops . ".CALL then ";
|
|
||||||
$lua .= "local _f = " . $v_stack . "[_a] local _args = {} for i = 1, _b do _args[i] = " . $v_stack . "[_a + i] end ";
|
|
||||||
$lua .= "local _u = table.unpack or unpack " . $v_stack . "[_a] = _f(_u(_args)) ";
|
|
||||||
$lua .= "elseif _op == " . $v_ops . ".MOVE then " . $v_stack . "[_a] = " . $v_stack . "[_b] ";
|
|
||||||
$lua .= "elseif _op == " . $v_ops . ".RETURN then return " . $v_stack . "[_a] end ";
|
|
||||||
$lua .= $v_ip . " = " . $v_ip . " + 1 end end ";
|
|
||||||
$lua .= "return " . $v_dispatch . "() end)(...)";
|
|
||||||
|
|
||||||
return $lua;
|
$lua .= "if " . $v_o . " == " . $this->opcodes['GETGLOBAL'] . " then ";
|
||||||
|
$lua .= "local _gn = " . $v_x . "(" . $v_v . ".C[" . $v_b . "+1]); ";
|
||||||
|
$lua .= "local _gv = " . $v_e . "; for _p in _gn:gmatch('[^%.]+') do _gv = _gv[_p] end; ";
|
||||||
|
$lua .= $v_r . "[" . $v_a . "] = _gv; ";
|
||||||
|
$lua .= "elseif " . $v_o . " == " . $this->opcodes['LOADK'] . " then ";
|
||||||
|
$lua .= $v_r . "[" . $v_a . "] = " . $v_x . "(" . $v_v . ".C[" . $v_b . "+1]); ";
|
||||||
|
$lua .= "elseif " . $v_o . " == " . $this->opcodes['CALL'] . " then ";
|
||||||
|
$lua .= $v_g . "(" . $v_r . "[" . $v_a . "]); ";
|
||||||
|
$lua .= "if " . $v_b . " == 0 then " . $v_r . "[" . $v_a . "]() else " . $v_r . "[" . $v_a . "](" . $v_r . "[" . $v_a . "+1]) end; ";
|
||||||
|
$lua .= "elseif " . $v_o . " == " . $this->opcodes['RETURN'] . " then ";
|
||||||
|
$lua .= "return; ";
|
||||||
|
$lua .= "end; ";
|
||||||
|
|
||||||
|
$lua .= $v_l . " = " . $v_l . " + 1; ";
|
||||||
|
$lua .= "end; ";
|
||||||
|
$lua .= "end)(...)";
|
||||||
|
|
||||||
|
return [
|
||||||
|
'success' => true,
|
||||||
|
'protected_code' => $lua,
|
||||||
|
'stats' => [
|
||||||
|
'original_size' => strlen($this->rawCode),
|
||||||
|
'protected_size' => strlen($lua),
|
||||||
|
'vm_version' => '3.5-delta',
|
||||||
|
'protection_level' => 'extreme'
|
||||||
|
]
|
||||||
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$obfuscator = new LuartexHardenedVM($code, $preset);
|
|
||||||
$protectedCode = $obfuscator->build();
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$pdo = db();
|
$vm = new LuartexExtremeVM($code);
|
||||||
$stmt = $pdo->prepare("INSERT INTO scripts (original_size, protected_size, settings) VALUES (?, ?, ?)");
|
$result = $vm->build();
|
||||||
$stmt->execute([
|
|
||||||
strlen($code),
|
|
||||||
strlen($protectedCode),
|
|
||||||
json_encode(['preset' => $preset, 'vm_ver' => '3.2.2-hardened'])
|
|
||||||
]);
|
|
||||||
} catch (Exception $e) {}
|
|
||||||
|
|
||||||
echo json_encode([
|
// Log obfuscation
|
||||||
'success' => true,
|
try {
|
||||||
'protected_code' => $protectedCode,
|
$stmt = db()->prepare("INSERT INTO scripts (original_size, protected_size, settings) VALUES (?, ?, ?)");
|
||||||
'stats' => [
|
$stmt->execute([
|
||||||
'original_size' => strlen($code),
|
$result['stats']['original_size'],
|
||||||
'protected_size' => strlen($protectedCode),
|
$result['stats']['protected_size'],
|
||||||
'vm_type' => 'Hardened Virtual Machine',
|
json_encode(['protection' => 'extreme'])
|
||||||
'security_score' => 99.9
|
]);
|
||||||
]
|
} catch (Exception $e) {
|
||||||
]);
|
// Ignore DB errors
|
||||||
|
}
|
||||||
|
|
||||||
|
echo json_encode($result);
|
||||||
|
} catch (Exception $e) {
|
||||||
|
echo json_encode(['success' => false, 'error' => $e->getMessage()]);
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user