Uploadez un fichier .lua, choisissez le niveau de protection et prévisualisez le résultat. Le pipeline complet tourne côté serveur — cette démo illustre le flux.
Un fichier .lua, jusqu'à 2 Mo.
Choisissez vos couches.
Comparez avant / aprè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)Démonstration côté client à but pédagogique. Le vrai pipeline Gate exécute l'obfuscation dans un environnement isolé et livre un artefact signé.
Un simple wrapper d'export devient illisible tout en restant fonctionnel.
-- 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 et paramètres remplacés par des identifiants opaques.
Toutes les strings sont encodées et déchiffrées à l'exécution.
Le graphe d'exécution est déstructuré et faussé par des prédicats opaques.
Nombres convertis, tables réordonnées, dead code injecté.
Option ultime : votre code tourne dans une VM Gate scellée.
Contrôles d'intégrité au runtime, ancrés au domaine FiveM.
Créez un compte, uploadez votre script et récupérez la version protégée en quelques secondes.