编译或混淆Ruby

时间:2015-10-15 23:19:30

标签: ruby obfuscation bytecode compiled

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

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]

1 个答案:

答案 0 :(得分:3)

这是编译为Ruby虚拟机的代码。它使用公开私有方法RubyVM::InstructionSequence::load的{​​{3}}。

您无法从中提取原始源代码,但调试器应该可以正常工作。您可以使用iseq gem以类似人类可读的形式阅读已编译的代码。假设Marshal.load返回RubyVM::InstructionSequence个对象,则应该这样做。

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