Subscribed unsubscribe Subscribe Subscribe

@kyanny's blog

Write down what I learnt. Opinions are my own.

vagrant share の実装を読もうと思ったら暗号化されていた

Vagrant に再入門している。 Getting Started を読んで vagrant share という機能があることを知った。手元の仮想マシンがコマンド一つでインターネットに公開されてすごい。どうやっているのか気になったのでソースコードを読んでみようと思ったら RubyEncoder という商用製品で暗号化されていた。

vagrant はオープンソースソフトウェアなので Share 機能のコードもリポジトリにあるのだろうと思って探し始めたがそれっぽいものが見つからなかった。公式サイトで配布しているインストーラを使ってインストールしたので、オープンソース版に含まれていないプログラムが同梱されているのかな?と思い、 /usr/bin/vagrant というシェルスクリプトを読んでもろもろの実態がどこにあるのかを調べ、たどっていった。

$ tree /Applications/Vagrant/embedded/gems/gems/vagrant-share-1.1.1/lib/
/Applications/Vagrant/embedded/gems/gems/vagrant-share-1.1.1/lib/
├── vagrant-share
│   └── activate.rb
└── vagrant-share.rb

最終的に vagrant-share-1.1.1 というディレクトリが見つかったが中にある .rb ファイルを開いてみたら暗号化されていた。 vagrant-share という Gem は公開されておらず、 GitHub でリポジトリも見つけられなかった。「vagrant share 用のコードだけクローズドソースにしても配布物に含まれていたら結局その気になれば読めちゃうんじゃないの?」と思っていたが、 Ruby プログラムの暗号化ツールがあるとは知らなかった。

なお RubyEncoder で暗号化されたプログラムのリバースエンジニアリングは難しそうなので試していない(vagrant の利用規約も精読していないので、もしかしたらリバースエンジニアリングは禁止されているかもしれないし、ひょっとすると vagrant-share が暗号化されていることに言及するのもまずいのかもしれない。問題があったらこの記事は削除するかもしれない)