Hola
Necesito un compilador Lua. Que nadie pueda descompilar mi truco.
Por favor avise.
Hola
Necesito un compilador Lua. Que nadie pueda descompilar mi truco.
Por favor avise.
Hola
Necesito un compilador Lua. Que nadie pueda descompilar mi truco.
Por favor avise.
Насколько легко отревёрсить обфусцированый код данным обфускатором?В данном случае более уместно будет использовать обфускаторы, чем компилировать. Что-то в духе мунсека(хотя уже и на него находится управа, хоть какая-то), или же:
![]()
GitHub - kosuke14/ByteLuaObfuscator: Simple Lua Bytecode-Method Obfuscator for Lua 5.1. (no loadstring when running obfuscateds)
Simple Lua Bytecode-Method Obfuscator for Lua 5.1. (no loadstring when running obfuscateds) - kosuke14/ByteLuaObfuscatorgithub.com
Чем он так хорош? Если пройтись по скрипту только с помощью него, то насколько легко будет вскрыть скрипт? Да и я бы не доверял сайтам обфускаторам, только опен сурсным обфускаторам, которые ты запускаешь локальноLua Obfuscator - просто имба
Да никак ты не вскроешь (ну или мои познания ограничены) хах. Там система, я аж ахнул. Только что, написал функцию:Чем он так хорош? Если пройтись по скрипту только с помощью него, то насколько легко будет вскрыть скрипт? Да и я бы не доверял сайтам обфускаторам, только опен сурсным обфускаторам, которые ты запускаешь локально
function test()
print('test')
end
--[[
.____ ________ ___. _____ __
| | __ _______ \_____ \\_ |___/ ____\_ __ ______ ____ _____ _/ |_ ___________
| | | | \__ \ / | \| __ \ __\ | \/ ___// ___\\__ \\ __\/ _ \_ __ \
| |___| | // __ \_/ | \ \_\ \ | | | /\___ \\ \___ / __ \| | ( <_> ) | \/
|_______ \____/(____ /\_______ /___ /__| |____//____ >\___ >____ /__| \____/|__|
\/ \/ \/ \/ \/ \/ \/
\_Welcome to LuaObfuscator.com (Alpha 0.10.8) ~ Much Love, Ferib
]]--
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) == 81) 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 <= 2) then
if (Enum <= 0) then
Env[Inst[3]] = Stk[Inst[2]];
elseif (Enum == 1) then
Stk[Inst[2]] = Inst[3];
else
Stk[Inst[2]] = Wrap(Proto[Inst[3]], nil, Env);
end
elseif (Enum <= 3) then
local A = Inst[2];
Stk[A](Stk[A + 1]);
elseif (Enum > 4) then
do
return;
end
else
Stk[Inst[2]] = Env[Inst[3]];
end
VIP = VIP + 1;
end
end;
end
return Wrap(Deserialize(), {}, vmenv)(...);
end
return VMCall("LOL!013Q0003043Q007465737400033Q002Q027Q00124Q00014Q00053Q00013Q00013Q00023Q0003053Q007072696E7403043Q007465737400043Q0012043Q00013Q001201000100024Q00033Q000200012Q00053Q00017Q00", GetFEnv(), ...);
--[[
.____ ________ ___. _____ __
| | __ _______ \_____ \\_ |___/ ____\_ __ ______ ____ _____ _/ |_ ___________
| | | | \__ \ / | \| __ \ __\ | \/ ___// ___\\__ \\ __\/ _ \_ __ \
| |___| | // __ \_/ | \ \_\ \ | | | /\___ \\ \___ / __ \| | ( <_> ) | \/
|_______ \____/(____ /\_______ /___ /__| |____//____ >\___ >____ /__| \____/|__|
\/ \/ \/ \/ \/ \/ \/
\_Welcome to LuaObfuscator.com (Alpha 0.10.8) ~ Much Love, Ferib
]]--
local v0=string.char;local v1=string.byte;local v2=string.sub;local v3=bit32 or bit ;local v4=v3.bxor;local v5=table.concat;local v6=table.insert;local function v7(v8,v9) local v10={};for v11=1, #v8 do v6(v10,v0(v4(v1(v2(v8,v11,v11 + 1 )),v1(v2(v9,1 + (v11% #v9) ,1 + (v11% #v9) + 1 )))%256 ));end return v5(v10);end function test() print(v7("\197\198\200\49","\126\177\163\187\69\134\219\167"));end
не особо легко, но можно получить некоторые части кода, есть способы открытия некоторых частей с помощью самого же обфусато насколько легко будет вскрыть скрипт?
Ну кстати выглядит безумно). А что если пройтись несколькими обфускаторами по скрипту?Да никак ты не вскроешь (ну или мои познания ограничены) хах. Там система, я аж ахнул. Только что, написал функцию:
Lua:function test() print('test') end
Поигрался с обфускатором, и вышло.......
Lua:--[[ .____ ________ ___. _____ __ | | __ _______ \_____ \\_ |___/ ____\_ __ ______ ____ _____ _/ |_ ___________ | | | | \__ \ / | \| __ \ __\ | \/ ___// ___\\__ \\ __\/ _ \_ __ \ | |___| | // __ \_/ | \ \_\ \ | | | /\___ \\ \___ / __ \| | ( <_> ) | \/ |_______ \____/(____ /\_______ /___ /__| |____//____ >\___ >____ /__| \____/|__| \/ \/ \/ \/ \/ \/ \/ \_Welcome to LuaObfuscator.com (Alpha 0.10.8) ~ Much Love, Ferib ]]-- 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) == 81) 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 <= 2) then if (Enum <= 0) then Env[Inst[3]] = Stk[Inst[2]]; elseif (Enum == 1) then Stk[Inst[2]] = Inst[3]; else Stk[Inst[2]] = Wrap(Proto[Inst[3]], nil, Env); end elseif (Enum <= 3) then local A = Inst[2]; Stk[A](Stk[A + 1]); elseif (Enum > 4) then do return; end else Stk[Inst[2]] = Env[Inst[3]]; end VIP = VIP + 1; end end; end return Wrap(Deserialize(), {}, vmenv)(...); end return VMCall("LOL!013Q0003043Q007465737400033Q002Q027Q00124Q00014Q00053Q00013Q00013Q00023Q0003053Q007072696E7403043Q007465737400043Q0012043Q00013Q001201000100024Q00033Q000200012Q00053Q00017Q00", GetFEnv(), ...);
Ещё варик:
или если не сильно прям, там можно все функции, короче весь код в одну строчку поместить, можно просто, а можно заменяя какие то штучки, на подобные выше. Словом - лучше, я думаю, нет))Код:--[[ .____ ________ ___. _____ __ | | __ _______ \_____ \\_ |___/ ____\_ __ ______ ____ _____ _/ |_ ___________ | | | | \__ \ / | \| __ \ __\ | \/ ___// ___\\__ \\ __\/ _ \_ __ \ | |___| | // __ \_/ | \ \_\ \ | | | /\___ \\ \___ / __ \| | ( <_> ) | \/ |_______ \____/(____ /\_______ /___ /__| |____//____ >\___ >____ /__| \____/|__| \/ \/ \/ \/ \/ \/ \/ \_Welcome to LuaObfuscator.com (Alpha 0.10.8) ~ Much Love, Ferib ]]-- local v0=string.char;local v1=string.byte;local v2=string.sub;local v3=bit32 or bit ;local v4=v3.bxor;local v5=table.concat;local v6=table.insert;local function v7(v8,v9) local v10={};for v11=1, #v8 do v6(v10,v0(v4(v1(v2(v8,v11,v11 + 1 )),v1(v2(v9,1 + (v11% #v9) ,1 + (v11% #v9) + 1 )))%256 ));end return v5(v10);end function test() print(v7("\197\198\200\49","\126\177\163\187\69\134\219\167"));end
При чем, любой код работает. Бывают конечно исключения
ну попробуй скрипт после этого запустить, порадуешься результатомНу кстати выглядит безумно). А что если пройтись несколькими обфускаторами по скрипту?
Друг, я закинул в нейронку DeepSeek твою обфускацию, конечно же убрал верхний комментарий с упоминанием сайта обфускатора и она её всё равно расшифровала.Да никак ты не вскроешь (ну или мои познания ограничены) хах. Там система, я аж ахнул. Только что, написал функцию:
Lua:function test() print('test') end
Поигрался с обфускатором, и вышло.......
Lua:--[[ .____ ________ ___. _____ __ | | __ _______ \_____ \\_ |___/ ____\_ __ ______ ____ _____ _/ |_ ___________ | | | | \__ \ / | \| __ \ __\ | \/ ___// ___\\__ \\ __\/ _ \_ __ \ | |___| | // __ \_/ | \ \_\ \ | | | /\___ \\ \___ / __ \| | ( <_> ) | \/ |_______ \____/(____ /\_______ /___ /__| |____//____ >\___ >____ /__| \____/|__| \/ \/ \/ \/ \/ \/ \/ \_Welcome to LuaObfuscator.com (Alpha 0.10.8) ~ Much Love, Ferib ]]-- 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) == 81) 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 <= 2) then if (Enum <= 0) then Env[Inst[3]] = Stk[Inst[2]]; elseif (Enum == 1) then Stk[Inst[2]] = Inst[3]; else Stk[Inst[2]] = Wrap(Proto[Inst[3]], nil, Env); end elseif (Enum <= 3) then local A = Inst[2]; Stk[A](Stk[A + 1]); elseif (Enum > 4) then do return; end else Stk[Inst[2]] = Env[Inst[3]]; end VIP = VIP + 1; end end; end return Wrap(Deserialize(), {}, vmenv)(...); end return VMCall("LOL!013Q0003043Q007465737400033Q002Q027Q00124Q00014Q00053Q00013Q00013Q00023Q0003053Q007072696E7403043Q007465737400043Q0012043Q00013Q001201000100024Q00033Q000200012Q00053Q00017Q00", GetFEnv(), ...);
Ещё варик:
или если не сильно прям, там можно все функции, короче весь код в одну строчку поместить, можно просто, а можно заменяя какие то штучки, на подобные выше. Словом - лучше, я думаю, нет))Код:--[[ .____ ________ ___. _____ __ | | __ _______ \_____ \\_ |___/ ____\_ __ ______ ____ _____ _/ |_ ___________ | | | | \__ \ / | \| __ \ __\ | \/ ___// ___\\__ \\ __\/ _ \_ __ \ | |___| | // __ \_/ | \ \_\ \ | | | /\___ \\ \___ / __ \| | ( <_> ) | \/ |_______ \____/(____ /\_______ /___ /__| |____//____ >\___ >____ /__| \____/|__| \/ \/ \/ \/ \/ \/ \/ \_Welcome to LuaObfuscator.com (Alpha 0.10.8) ~ Much Love, Ferib ]]-- local v0=string.char;local v1=string.byte;local v2=string.sub;local v3=bit32 or bit ;local v4=v3.bxor;local v5=table.concat;local v6=table.insert;local function v7(v8,v9) local v10={};for v11=1, #v8 do v6(v10,v0(v4(v1(v2(v8,v11,v11 + 1 )),v1(v2(v9,1 + (v11% #v9) ,1 + (v11% #v9) + 1 )))%256 ));end return v5(v10);end function test() print(v7("\197\198\200\49","\126\177\163\187\69\134\219\167"));end
При чем, любой код работает. Бывают конечно исключения
ода виртуалочка, ее же так сложно вскрытьVMCall