编译或混淆 Ruby

Compiled or obfuscated Ruby

我有一组文件似乎被 Ruby 混淆或编译了。如果我对其中一个文件执行文件 [原文如此]:

a /usr/bin/env ruby script text executable

他们都是这样开头的:

#!/usr/bin/env ruby
require 'iseq';RubyVM::InstructionSequence.load(Marshal.load(File.read(__FILE__,nil,113))).eval

这个文件是什么?如何查看或调试代码?

注意:Ruby 版本 ruby 2.1.3p242(2014-09-19 修订版 47630)[x86_64-linux]

这是编译到 Ruby 虚拟机的代码。它使用 iseq gem 公开私有方法 RubyVM::InstructionSequence::load.

您无法从中提取原始源代码,但调试器应该可以工作。您可以使用 RubyVM::InstructionSequence#disassemble 以人类可读的形式阅读编译后的代码。假设 Marshal.load returns 一个 RubyVM::InstructionSequence 对象,这应该可以做到。

require 'iseq';puts RubyVM::InstructionSequence.load(Marshal.load(File.read(__FILE__,nil,161))).disass‌​emble