Custom VM and Obfuscation

So recently I have made a Lua Byte-code Obfuscator, but with no VM. People could just do loadstring = print and it was sad. I want to try to make my own custom VM for PSU but I don’t know how. I also want to add arabic obfuscation if that is possible. Any idea how?

I have tried looking online but I couldn’t find any tutorials.

This doesn’t seem like Roblox or Luau help but…
Honestly, don’t obfuscate code. It’s really useless, it doesn’t help combat against basically anything, exploiters can still go in there and get your code even if maybe the variables might not have their name on them.

If your code must be hidden on the client for instance, then that means you probably have something wrong in there that isn’t secured properly. (which still obfuscation doesn’t help with.)

1 Like

Even though. I might just be selling it to people, if they want to protect there code they can. This may also be for obfuscated exploit scripts (which I do not condone).

I don’t think you should obfuscate your code either way. It downgrades performance and its just not worth the effort.

1 Like

Hm, ok I guess then. Not like exploiters couldn’t just use Defaultio’s extension to do that.

Anyhow, um, you might wanna go on some other Lua forum to ask about that. The people there have more insight on how Lua works, etc.

There’s one that it’s ‘endorsed’ by the Lua website, you can literally search for Lua Forum and you find it.
It is a bit inactive though, so know that.

I don’t really know why you need a obfuscater. In my experience it’s hell trying to obfuscate your code.

Here’s my obfuscated code I wrote which (should) print “Hello world!”.

return((function(akaissjisudowiwjddnkwiwisjdjwiwidksjsn)local iL1LIliliL1ilIL=akaissjisudowiwjddnkwiwisjdjwiwidksjsn()['nil'];local il1LilIl1iliil1L=akaissjisudowiwjddnkwiwisjdjwiwidksjsn; il1LilIl1iliil1L=il1LilIl1iliil1L(iL1LIliliL1ilIL,iL1LIliliL1ilIL,iL1LIliliL1ilIL,iL1LIliliL1ilIL,iL1LIliliL1ilIL,'29383932829293983027394947394849728237937282739282827382738473927483882384829278373927383729374838274938272938838237848382738473828383738293774947272844747923674842763947282749372827483838297384922784749373847493727494839283843974849373894832882848493827493982'); local ilili1ilIlilLi=il1LilIl1iliil1L['table']; local liIl1Li1LIliL=il1LilIl1iliil1L['string']; il1LilIl1iliil1L[ilili1ilIlilLi['concat']({'pri', 'nt'})](ilili1ilIlilLi['concat']({'Hello', 'world!'}));end)(getfenv));
1 Like

You are smart. You helped me on 2 threads. Thank you.

Also, do you mind explaining what you did or why does it begin with return? I never knew why people put return at the beginning.

Not really, I make the worst mistakes everytime.

1 Like

It returns basically nil in the script, it doesn’t really do anything when using return in a normal or localscript in this case. It’s basically this:

local env = getfenv
local newnil = env().nil

env = b(newnil, newnil, newnil, newnil, 'string')
local newtable = env['table']

local newprint = env[newtable['concat']('pri', 'nt')]
newprint(newtable['concat']('Hello', 'world!'))

Even better. I’ll try using this. Even though it will not have VM (yet) I will make a new executor and use some of this. Thanks very much!