During the history of Roblox, many exploits were found, disseminated and abused by Roblox users. Most of those were, over the course of development, fixed by the Roblox developers. Over the course of Roblox's history, many advances towards reducing exploiting have been attempted.
When Lua runs programs, the Lua virtual machine compiles code to Lua bytecode before it is interpreted. This process is irreversible without artifacts (via decompilation), and thus was frequently used for Code Obfuscation.
Lua bytecode does not have the same structure as Lua and allows, by unconventional means, manipulation of the stack and other things that are not possible in normal Lua programming. It is possible, though difficult, to write Lua assembly code manually and to assemble it into Lua bytecode. The Roblox process can load Lua code and Lua bytecode through use of its
It has been proposed on the Lua mailing list that direct stack manipulation could be used to access the environment of other functions during their execution and, therefore, to steal values from these functions (including C functions that Lua has access to), something which is not possible in pure Lua.
The Roblox user NecroBumpist proved the idea to be true and possible. Using Lua bytecode, he created a function that allowed a script to steal values from other functions, including C functions. This made it possible to steal values from Roblox's API's, but months passed until someone found a way to use this bug to modify the global environment and to become capable to make the core scripts and the join script execute any Lua code in a game server.
This resulted in the removal of bytecode from Roblox and the ability to use it with the loadstring function. Despite common belief, this exploit was unrelated to a Direct Dynamic Library (DLL) exploit in the same time period. The removal of bytecode had no other side effect than rendering code obfuscation impossible without other means.
After the removal of the Lua compiler from the client, Roblox made heavy changes to the Lua VM. Roblox-compatible bytecode after the change contained heavy use of encryption and obfuscation, and required special signing from the server, which is where all client scripts were compiled. Generating this new bytecode from scratch would prove near impossible for would-be exploiters.
In the summer of 2015, a user named Chirality on an underground Roblox exploit development/marketplace forum called "V3rmillion" came up with an idea: By using the regular vanilla Lua compiler to generate a Lua function prototype, then modifying it to be compatible with Roblox's VM, he could achieve script execution. This process was made easier through use of C++'s very flexible data types, where after reversing the right structs, accessing all the data from a Roblox function prototype was trivial.
After solving the encryption, Chirality achieved script execution, and dubbed his method "proto conversion." He then created an exploit called Seven, which was the first of many exploits to use the new method. Some of the most prevalent and infamous exploits in history, such as Elysian, Intriga, Cerberus and EX-7, have used this method to execute scripts.
A new method to obtain script execution was also in the works after the heavy VM changes that Roblox implemented. This method - dubbed "lua wrapping" or just "wrapping", became the second most popular method to obtain script execution. This method worked by generating a fake Roblox environment in a normal Lua instance, and emulating the regular Roblox environment in C functions implemented by the exploit. This made Roblox's attempts to patch these exploits extremely hard, allowing them to survive major security updates without any features lost.
Early attempts to implement this method of script execution were the highly popular 'Alx' and 'Nyx' exploits - made by the two major exploit developers of the time, Austin and Chirality, respectively. Both of these exploits were later rewritten to use Proto Conversion instead.
Around 2 years later, a new class of wrapper exploits was born with the release of the 'RaindropV2' (later renamed to 'Synapse') exploit by developer 3dsboy08. Around a month later, another exploit named 'Seraph' also implemented the same method of obtaining script execution. Both of these exploits largely used the same methods described at the top of this section.
Most current exploits are DLL files that are injected into Roblox using a DLL injector. Once injected, the exploit is able to function correctly. Injecting a DLL into a process is not all that is required, as Roblox has introduced many safeguards or "checks" to prevent memory from being manipulated easily.