Adblocker Detected

Please disable your Adblocker extension before accessing this webpage. This site requires ads-related resources to function properly.

Documentation

← Panda Auth

For Developers · Kryptic Vault

Custom Obfuscation Use

Bring your own Lua obfuscator. Instead of (or alongside) the built-in engines, Kryptic Vault can hand your script to an HTTP API you control, then ship whatever Lua that API returns. Define the obfuscator once in Settings, then pick it for the Main script, the Init (2nd) script, or both. You're using your own infrastructure, so there's only a small 0.25 Panda Token storage fee per custom obfuscation.

How it works

A custom obfuscator is an HTTP callback. When you upload or edit a Kryptic Vault script and choose your custom obfuscator, the vault sends a single POST request to your API URL with the Lua source in the JSON body, then uses the Lua your endpoint returns as the obfuscated script body. Nothing else changes — the loader, telemetry, validation library and Panda Token economy all behave exactly as they do with the built-in engines.

0.25 Panda Token storage fee

You're calling your own endpoint, so Panda doesn't charge an obfuscation fee — just a flat 0.25 Panda Token storage fee per custom obfuscation (the Main script, and the Init script if it also uses a custom obfuscator). Far below Luraph (1) or wYnFuscator (0.5). You're only charged on a successful upload; if your endpoint errors, nothing is charged.

Step 1 — Add an obfuscator in Settings

Go to Settings → Integrations → Custom Obfuscators and click Add Custom Obfuscator. Each entry has three fields:

Namestringrequired

A label you choose (1–80 characters). Shown in the obfuscator dropdown when you upload or edit a script. Purely organizational.

API URLstring (https)required

The endpoint Kryptic POSTs your script to. Must be https://. Internal, private and cloud-metadata hosts are rejected (see Security below).

ParametersJSON objectoptional

Optional JSON object merged into the request body on every call — the natural place for your own API token, preset name, or any flags your obfuscator expects. Stored encrypted-at-rest and never echoed back to the dashboard; leave the field blank when editing to keep the stored values.

You can save up to 10 obfuscators. Once saved, the obfuscator is reusable across all your scripts — update its URL or parameters here and the change applies the next time a script that references it is (re)obfuscated.

Step 2 — Pick it when uploading or editing

In the Kryptic Vault Upload form (or the Edit modal), the Main-script obfuscator selector now includes a Custom (BYO) card, and the Init (2nd) script selector includes a Custom option. Choose it and a dropdown of your saved obfuscators appears — select the one to use. If you haven't saved any yet, the form links you back to Settings.

The Main and Init scripts are independent: you can obfuscate the Main script with Luraph and the Init script with your custom callback, or any other combination.

The callback contract

Your endpoint receives a JSON POST. The body is your saved Parameters object with two fields added by Kryptic:

scriptstringrequired

The full Lua source to obfuscate.

sourcestringrequired

Identical to script — provided as an alias so endpoints that expect either field name work unchanged.

...your paramsanyoptional

Every key from your saved Parameters object (e.g. apiKey, preset).

Example request body Kryptic sends:

{
  "script": "print('hello from my script')",
  "source": "print('hello from my script')",
  "apiKey": "your-saved-token",
  "preset": "max"
}

Your endpoint must respond with the obfuscated Lua. Two response shapes are accepted:

  • Raw Lua — return the obfuscated script as the plain response body (any content type).
  • JSON — return an object with the Lua in any one of these keys: obfuscated, result, code, output, or source.

The output must actually change the script

Kryptic rejects an empty response or output that is byte-for-byte identical to the input (a no-op / echo). If your obfuscator can't process the script it should return a non-200 status — the upload then records the script as ERROR rather than shipping unprotected code.

Constraints

  • HTTPS only — plain http:// URLs are rejected.
  • No redirects — a 3xx response is treated as a failure (it can't be followed to an internal host).
  • Port 443 only — the standard HTTPS port.
  • Timeout — your endpoint must respond within ~30 seconds.
  • Response size — the returned Lua is capped at ~5 MB.
  • Non-empty, changed output — see the note above.

Example endpoint

A minimal obfuscator that prepends a marker comment. Replace the body with your real transformation; the request/response shape is all that matters.

import express from "express";
const app = express();
app.use(express.json({ limit: "40mb" }));

app.post("/obfuscate", (req, res) => {
  // Authenticate using a value from your saved Parameters object.
  if (req.body.apiKey !== process.env.MY_SECRET) {
    return res.status(401).json({ error: "bad key" });
  }

  const source = req.body.script || req.body.source || "";
  if (!source) return res.status(400).json({ error: "no script" });

  // ...run your real obfuscation here...
  const obfuscated = "-- obfuscated by my-obfuscator\n" + source;

  res.json({ obfuscated });
});

app.listen(8080);

Security

Because the URL is user-supplied, Kryptic makes the outbound request through a hardened client that defends against SSRF (server-side request forgery):

  • The hostname is resolved and every resolved IP is checked — private, loopback, link-local and cloud-metadata ranges (e.g. 127.0.0.0/8, 10.0.0.0/8, 169.254.169.254) are blocked.
  • The validated IP is pinned for the connection, so a DNS record that flips to an internal address after the check can't be exploited (no DNS-rebind / TOCTOU window).
  • Redirects are not followed; only HTTPS on port 443 is allowed.
  • Your API URL and Parameters are never logged — only the request host and response length are recorded.

Keep your endpoint authenticated

Anyone who learns your URL could POST scripts to it. Put a secret in your saved Parameters (e.g. apiKey) and check it on every request, as in the examples above.

That's it

Save the obfuscator once, pick it on upload/edit, and Kryptic routes your Main and/or Init scripts through your own pipeline — for just a 0.25 Panda Token storage fee, with the full loader, telemetry and validation stack unchanged.