Ryan writes about our accomplishments in our most recent Ruby obfuscator hacking session.
I must add that making blocks work will continue to be a pain the way we’ve implemented obfuscation. The interpreter gets to cheat because it has the AST lying around. We don’t so we’d either have to rebuild it (too fragile to consider) or build a chunk of AST that calls back to C (still fragile). We went with a simple to implement approach that isn’t as forgiving for users but won’t fail when you switch Ruby versions.