Your code runs. They don't get to read it.

CodeProtect transforms Lua, JavaScript and JVM source into heavily protected production code designed to resist analysis, tampering and reverse engineering.

Protected
return(function(,...)local _env=_ENV or j local l=0X0{bootstrap_code}local aM="Y,kofOeg,kwmHJS,GgbWgJ,kBeBYV,iiwaSe,ieI" local bb="zLWD,iiUECU,iisopy,iethzm,ipzgbe,iibdbp,iisof" local aX=",iJayBe,iRxfTz,iQPrpS,iQdJfT,kyyJEg,iRPwEr,if" local be="jceV,ieutLg,ipzLWD,iiUECU,iijVZk,iewsqW,ipzgbe" local aZ="vIMqh,iQlKqZ,exrxeP,XvLgZQ,iTRaHR,eoCNoP" local aT=",ihCrqJ,iinQxI,ipAcjQ,iinDTy,iKTgsX,iinDAf,SY" local aR="iKRsQB,SBdTZI,yBWKWs,iinDKr,GGaOBg,iinDWD,iinDKN," local aV="wiV,ieDONk,iRhNMG,iibufr,iibFBp,iKTade,iRGNJh,i" local bc="H,iiUlqW,iiUjXe,ipNSUg,kyRqTn,iRPESx,eQwuVT," local aW="eZaGW,iQdJhu,iQdJFm,iTiNHs,iRpOrj,iQPrpS,iQdJfT" local aO="pIlc,GMtqpL,XaYjhO,iibuGF,GUSXDH,dpsTTO,iiahsP," local aN="XRa,XHeQey,XPnCso,iinDAy,XbgNOp,iijArY,Xwpsbf,iR" local bg="n,iRPESx,iJURYG,iSdLxy,iijjkM,iiuiCj,iia" local bl="cXBa,iiuuLy,ietMDp,iraISf,iitdPE,iiaeik,iibFZk,ihKSgD,ihTseQ,iinDKN,iinDKD,iinDKD" local bd="XvDoMb,kRHasw,kyRqTn,iRPESx,iinxbp,iiUjxk,ii" local bh="gvZ,iiMwhe,ienyZm,iiMwyP,iiFTCf,i
Your source
local bxor = bit32.bxor
local band = bit32.band
local rshift = bit32.rshift
local rrotate = bit32.rrotate

local w = {}

for i = 1, 16 do
    local a, b, c, d = string.byte("example_message", i, i + 3)
    w[i] = ((a * 256 + b) * 256 + c) * 256 + d
end

for i = 17, 32 do
    local x = w[i - 15]
    local y = w[i - 2]
    w[i] =
        w[i - 16]
        + bxor(rrotate(x, 7), rrotate(x, 18), rshift(x, 3))
        + w[i - 7]
        + bxor(rrotate(y, 17), rrotate(y, 19), rshift(y, 10))
end

local a, b, c = 0x6a09e667, 0xbb67ae85, 0x3c6ef372

for i = 1, 32 do
    local t = bxor(rrotate(a, 2), rrotate(a, 13), rrotate(a, 22))
    a, b, c = (t + b) % 2^32, a, b
end

print(a, b, c)

Drag to compare. Left is your source; right is the protected output.

Four engines, one workflow

Each language targets the platforms it runs on. The version a file compiles for is the one your runtime actually accepts — no invalid combinations reach a build.

Lua v2

Preview

Randomized VM with four protection presets and revocable online-key delivery.

Standard Lua
5.1 – 5.5, LuaJIT
FiveM (CfxLua)
5.4
Roblox
Luau

Lua

The legacy engine, kept for compatibility with existing pipelines.

Standard Lua
5.1 – 5.5
FiveM (CfxLua)
5.4
Anti-debug
Optional

JavaScript

Beta

Control-flow flattening, string encoding and self-defending output.

Files
.js .mjs .cjs
Local script
Full output
Cloud loader
Runtime fetch

JVM

Beta

JAR protection that preserves Fabric, Mixin, Spigot and Paper entrypoints.

Files
.jar
Minecraft mode
Entrypoint-safe
Strings
Encrypted

Compare protection levels

Stronger protection costs runtime speed and output size. Pick the balance that fits your project.

PresetRuntime costOutput size
Fast~1.2×~2×
Balanced~1.8×~4×
Secure~3×~7×
Extreme~5×+~10×+

Approximate figures; actual results vary with the input.

From source to protected output in one pass

01

Upload

Drop a file or a whole folder. Directory structure is preserved, and files over 10 MB resume automatically.

02

Protect

The right engine runs from your saved defaults, with per-file overrides when you need them.

03

Download

Pull the protected output the moment its build finishes — status updates arrive live.

04

Or script it

Drive the same API from CI with a cp_ key: upload, obfuscate, poll, download.

Local delivery

The full protected script ships inside the output file. It runs anywhere, offline, with nothing to call home to.

Online keys

The output is a small loader; the payload is fetched at runtime and can be revoked. Revoking stops new fetches — running scripts keep working until they next reach out.

Protect your first file in under a minute

Sign in with ModLabs and drop a file. Every engine and preset is available during early access.