Suba un archivo .lua, elija el nivel de protección y previsualice el resultado. El pipeline completo se ejecuta en el servidor — esta demo ilustra el flujo.
Un archivo .lua, hasta 2 MB.
Elija sus capas.
Compare antes / después.
local _0x000 = {}
local _0x001 = 3
RegisterNetEvent("\x63\x68\x61\x74\x3a\x6d\x65\x73\x73\x61\x67\x65", function(name, color, message)
local _0x002 = source
local _0x003 = GetGameTimer()
if(function() do return end;--@cf
return true end)() and _0x000[_0x002] and (_0x003 - _0x000[_0x002]) < 1500 then
_0x001 = _0x001 - 1
if(function() do return end;--@cf
return true end)() and _0x001 <= 0 then
DropPlayer(_0x002, "\x46\x6c\x6f\x6f\x64\x20\x64\x65\x74\x65\x63\x74\x65\x64")
end
do return end;--@cf
return
end
_0x000[_0x002] = _0x003
print(("\x5b\x63\x68\x61\x74\x5d\x20\x25\x73\x3a\x20\x25\x73"):format(name, message))
end)Demostración del lado del cliente con fines didácticos. El verdadero pipeline de Gate ejecuta la ofuscación en un entorno aislado y entrega un artefacto firmado.
Un simple wrapper de export se vuelve ilegible sin dejar de ser funcional.
-- notify.lua
local function notify(msg, type)
TriggerEvent("chat:addMessage", {
args = { "[SERVER]", msg },
color = type == "error" and {255,0,0} or {0,255,0}
})
end
exports("notify", notify)local _0x001=function(_0x002,_0x003)
TriggerEvent("\x63\x68\x61\x74\x3a\x61\x64\x64\x4d\x65\x73\x73\x61\x67\x65",{
args={"\x5b\x53\x45\x52\x56\x45\x52\x5d",_0x002},
color=_0x003=="\x65\x72\x72\x6f\x72" and{0xff,0x0,0x0}or{0x0,0xff,0x0}})
end
exports("\x6e\x6f\x74\x69\x66\x79",_0x001)Locals, upvalues y parámetros reemplazados por identificadores opacos.
Todas las cadenas se codifican y se descifran en tiempo de ejecución.
El grafo de ejecución se desestructura y se falsea con predicados opacos.
Números convertidos, tablas reordenadas, dead code inyectado.
La opción definitiva: su código se ejecuta en una VM Gate sellada.
Controles de integridad en runtime, anclados al dominio FiveM.
Cree una cuenta, suba su script y obtenga la versión protegida en segundos.