Revo is an experimental code virtualizer for 32-bit PowerPPC executables, geared towards Wii homebrew.
Revo operates under a "Bring Your Own Protections" model; while the code does offer some example mutation and virtualization features, the security of virtualized apps relies on implementing novel, closed-source features.
Generate the build file:
python3 configure.pyThen run ninja to build:
ninjaRevo relies on a custom section to detect input functions. The easiest way to manage this is using the API:
#include <Revo/api.h>
// use the VIRTUALIZE macro for functions you want to virtualize
VIRTUALIZE int main() {
// your code as usual
return 0;
}If you're writing assembly files, declare the section name at the top of your file:
.section .revo_text, "ax", @progbits
In your Makefile, add -q to your LDFLAGS.
Tip: adding these compiler flags are recommended:
-ffunction-sections -fno-jump-tables -fno-optimize-sibling-calls -fno-exceptions -fno-rtti -fno-devirtualize
Then compile your program normally and simply invoke Revo with your file:
./Revo --input example.elfI'm not accepting contributors at this time; this is a solo project intended for my personal portfolio, so I won't be looking at pull requests or reviewing anyone else's code.
You are welcome to fork and add features (which is the intended security model of this project anyways), but I'm intentionally not looking at third-party additions to prevent any subconscious biases about design decisions.
Issues for feature requests and bug reports remain open as always.

