Talk:Source Obfuscation
Custom compiled LOVE with encryption
What about modifying LOVE Filesystem code to load encrypted Lua files?
The files that must be edited is src/modules/filesystem/wrap_Filesystem.cpp w_load function
int w_load(lua_State *L)
{
std::string filename = std::string(luaL_checkstring(L, 1));
Data *data = nullptr;
try
{
data = instance()->read(filename.c_str());
}
catch (love::Exception &e)
{
return luax_ioError(L, "%s", e.what());
}
// Decrypt the contents of "data->getData()" before supplying it to luaL_loadbuffer.
// You may also consider of using custom lua_Reader function and use lua_load instead.
// Basically, decrypt your code before line below.
// Example below.
Data *decryptedData = decryptLuaScript(data); // Decrypt data function
int status = luaL_loadbuffer(L, (const char *)decryptedData->getData(), decryptedData->getSize(), ("@" + filename).c_str());
data->release();
decryptedData->release(); // Release the decrypted data object
// Load the chunk, but don't run it.
switch (status)
{
case LUA_ERRMEM:
return luaL_error(L, "Memory allocation error: %s\n", lua_tostring(L, -1));
case LUA_ERRSYNTAX:
return luaL_error(L, "Syntax error: %s\n", lua_tostring(L, -1));
default: // success
return 1;
}
}
I still doubt if it's good to apply it to assets, since doing it requires you to create new LOVE class like "EncryptedFileData" or something like that and expose it to Lua API.