编译或混淆 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))).disassemble
我有一组文件似乎被 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))).disassemble