#!/usr/bin/ruby # usage: ruby encrypt.rb myscript.rb > myencryptedscript.rb # arbitrary base16 alphabet smbase = '()<>:-8o;|D[]{} ' # encode the payload encoded = ARGF.read.unpack('C*').map { |chr| smbase[(chr>>4)&15, 1] + smbase[chr&15, 1] }.join puts "#!/usr/bin/ruby", "c = false", "eval DATA.read.chomp.split('').map { |c| #{smbase.inspect}.index(c) }.partition { c = !c }.transpose.map { |l, h| (h << 4) | l }.pack('C*')", "__END__", encoded