Most nowadays will take code and compile some custom flavor of bytecode out of it, then provide a VM to run that bytecode on. It’s much more time consuming to reverse engineer someone else’s custom implementation than it is to un-fiddle with already working code.
If you’re looking to learn about that sorta stuff, read up on PL/0. It’s a programming language used to teach how building compilers is done. Tokenization, parsing, compiling, creating a virtual machine* to test it on… it’s a really interesting subset of computer science topics.
*Virtual machine as in not simulating an entire operating system but rather a space for your code to execute, like the Java Virtual Machine (JVM).