Capprime Lua Obfuscator Documentation


The Capprime Lua Obfuscator is a simple string replace type of obfuscator that replaces function names and local variables with gibberish.

Beginning of the line comments after the "--" comment symbol are stripped (mid line comments are currently not stripped). White space at the beginning of lines is eliminated.

Once a function name or local variable is identified for obfuscation, a string search is run over the entire text to replace those strings whether they are used in that same context or not.

Variable names of length one are not touched. They are theoretically already obfuscated and don't work with string replacement.

For the most part, global variables are not touched, unless they share a name with a local variable in the submitted code.

Substrings can be problematic and are strongly discouraged. In general, substrings of lua reserved words will not be obfuscated.

While the obfuscator has plenty of room for improvement, it is almost always possible to modify the submitted source code to work around issues in the obfuscator.


FAQ:

What are the limitations of the free version?

Currently, you can obfuscate only 3000 characters at a time, and only 6000 characters per day (from a single IP address).

Is the lua source code I input logged?

Yes, it is logged in order to fix bugs (that are often not submitted by users). Also, the data is used to help improve the FAQ and Known Issues documentation.

Can you do anything with the lua source code I submit for obfuscation?

Not (legally) that I know of. You (presumably) own the copyright to that code, so Capprime Software has no rights to the code unless you explicitly grant rights to Capprime Software.

Are there plans for a commercial version without the free version limitations?

It depends on if users express interest in a commercial version.

Are there plans for an offline version that doesn't record the input lua source code?

Maybe, eventually. It is a logical option for the product roadmap, but there are significant development and support costs involved in its creation and release.


Known Issues:

1) Non local variables are not obfuscated.

Workaround: Declare all variables as local that can be declared as local. If necessary, create a dummy function that just declares a global variable as a local variable, thus qualifying the global variable name for obfuscation.

Example:

Before:


globalVariable1 = "blah"

After:

globalVariable1 = "blah"

function DummyMethod()
    local globalVariable1
end

2) Substrings will sometimes not be replaced correctly.

For example, if you have a local variables name "counter" and a global variable named "counter1" and "counter" is slated to become "kj2352", "counter1" will become "kj23521". Try to avoid function names and variable names that are (case insensitive) proper substrings (i.e. use counter1 and counter2 instead).

3) Strings inside quotes will be obfuscated if they match a function name or local variable that is marked for obfuscation.

For example:

local hello = "hello"

Try to use function and variable names that are not common words that would show up in strings or file names or library names, etc.