“Being perfectly honest, your obfuscator has made me feel like
writing RubyCocoa apps is a commercially viable business, whereas
before I had my doubts.” - Aidan R.
- ZenObfuscate
- What is it?
- For when you really really have to ship a binary.
- Lets you: Write in ruby, and ship a binary.
- ZenObfuscate is a translator for a fairly large subset of
ruby that converts your pure ruby code into a dynamically
loadable binary, protecting your intellectual property(*).
- How does it work?
zenobfuscate has a commandline interface that takes the
specified ruby files and outputs a dynamically loadable
binary (.bundle on osx, .so on unix/linux and .dll or
windows).- TODO: diagram
- e.g., ./bin/zenobfuscate -o mylibrary lib/blah.rb; ruby
-rmylibrary -e ‘use_my_library’ - Built on a solid foundation: RubyInline and ParseTree. Long
standing open source packages for ruby.
- When is it available?
Available nowish on an individual basis - How much does it cost and what is its licensing?
ZenObfuscate costs $2500 for a site license or is
individually negotiable. ZenObfuscate is a commercial product
produced wholly by Eric H. and Ryan D. and is not for
redistribution. All rights are reserved, etc., etc. Binaries
produced from ZenObfuscate have no restrictions of any kind
(except determined by their authors). - Requirements
ruby 1.8.x, ruby2c, parse_tree, rubyinline (all available as
gems)
available on darwin ppc, darwin intel, freebsd x86, freebsd
amd/64bit, and linux x86 (with coaxing). - Known Limitations
There are issues with what the obfuscator can translate to C
and as a result you may need to modify your code in order to
translate it. Usually this is a pretty straightforward and
simple task. We do a good job of translating static ruby to
its equivalent C, but not all ruby has an equivalent in C.- Only translates methods in classes and modules, not
freestanding code. - Explicit returns are required in all methods.
- Temporary: Conditional logic (including ? may not be on the
right hand side of an assignment. - Temporaryish: Exception handling and generic block closures
currently don’t translate. - Some expressions in ruby we don’t currently do, but could
upon request, where some other ruby expressions will never
translate.
- Only translates methods in classes and modules, not
- What is it?