For most of the code, I don’t think anything special is used.
Compiling the code already obfuscates it enough. Most function, type and variable names are removed, the compiler does some optimizations and what you end up with is already pretty indecipherable code soup.
There are obfuscators that make the resulting binaries even harder to read/decompile, but further obfuscation also makes your code run slower.
Skill issue