よもぎのメモ帳

備忘録的な感じで技術的なことをストックしていきます。

radare2のインストールで詰んでた話

まえがき

f:id:y0m0g1:20180521225907p:plain

社畜ちゃん台詞メーカー

どうも皆さんこんにちは、よもぎです。Twitterアカウント新しく作ったので良かったらどぞ(@ctyomogi)。ちょもぎに名前を変えようかしら。

新しくパソコンを買いまして、ゲーム勉強がはかどっている日々ですが*1、おかげさまで仮想マシンを用意できる様になったぞい!やったね! 潤沢なHDD容量を手に入れ、もううはうはです。

追記 (2018/10/22)

このエントリは体験記みたいな感じになってしまいました。 手っ取り早く知りたい人はこちらをどうぞ

y0m0g1.hatenablog.com

なぜ仮想マシンを?

SECCON beginners CTF 2018の開催が決定されたこともあり、ぼちぼちCTFのお勉強を勧めているのですが、自力でオンラインの問題で解くのは割と無理が出てきてしまいました。

そこで、CTF問題集にチャレンジしてみよう!となったのが数週間前の話。*2

book.mynavi.jp

針が立っていないハリネズミ本です。本の内容は実際のCTFを模して課題ファイル(あるいはURLなど)が与えられて、それを解くフローを解説していく感じです。

んで、一問目から解こうとしたら

今回は「Ubuntu 16.04.2 LTS(x86)」を用いて問題を解くことを想定しています。

ここで私はこう思いました。

Bash on Ubuntu on Windowsだけどいけるでしょ~ だってーUbuntuだし

問題自体はSelfReferenceというファイルのバイナリ解析なんですが、

$ file SelfReference
SelfReference: ELF 32-bit LSB executable, Intel 80386, ()
$ ./SelfReference
-bash: ./SelfReference: cannot execute binary file: Exec format error

まあ、そうなるよね。だってこのUbuntux86_64だもの、ELF 32-bit動かないもん。

しかし、このままでは先に進めません。何も勉強できません*3

ここで以下の2つを考えました

  1. x86_64版でも32bit ELFを動かせないか探す
  2. 仮想環境でUbuntu 32bitをインストールする

ここでまず手軽にできそうな1.の方法を試してみました。

sonickun.hatenablog.com

こちらの方法が結構紹介されているのですが、自分のBash on Ubuntu on Windows環境じゃだめでした。(このサイトが一番簡潔にまとまっていると思います)

まあ多少古いエントリなので時代も変わってしまったのでしょう。

そこで仕方なく2.を試してみようということで、いろいろ探しました。

仮想環境@Ubuntu 32bit

調べてみると、Ubuntuさんは17.10以降は32bit版以降のイメージファイルを配布していないっぽい。そこで探すのはUbuntu 16.04 LTS の32bit版(i386

Ubuntu 16.04.5 LTS (Xenial Xerus)

ここからisoファイルをダウンロードしました。これ見つけるのにも一苦労しました。Virtualboxを用いて順調に仮想環境を構築*4していきました。

Radare2に苦しめられて

第一章 今インストールしたのは昔のやつでーーす

さて、問題集のフローでは、Radare2というソフトウェアを用いてバイナリ解析をしていきます。CUIライクでなんとなくデバッガを動かしている感じです。

脳死

$sudo apt-get install radare2

を実行。無事インストールできた*5

それで、$r2 ./SelfReferenceを実行して、問題集のとおりにコマンドポチポチしてたら

[0x080485f0]> axt <hogehoge>
XXX: This command conflicts with 'ar'
Usage: ax[-cCd?] [src] [dst]
 axc sym.main+0x38 sym.printf   ; add code ref
 axC sym.main sym.puts          ; add call ref
 axd sym.main str.helloworld    ; add data ref
 ax- sym.main str.helloworld    ; remove reference

え? なんでエラー吐くんですか?

ためしにradare2 -vでversionを確認してみると

radare2 0.9.6 @ linux-little-x86-32 git.0.9.6
commit: 1: build: 2014-04-10

一方で、本ではradare2 1.5.0を使うらしい……このversion違いで、コマンドとかが変わってくるみたい。

どうやら、Ubuntuのパッケージリストは古いものだったりするらしい。いまさっきインストールしたばっかりなのに……

第二章 やったね最新版!あれ?動かないよ?

いま出回ってる最新版は2.5.0ということで、インストールする方法を探して見たらこんなエントリが

poppycompass.hatenablog.jp

やった! これで勝った!!! 最新版をゲットすれば、もう怖いものなしだ!

ということで、sudo apt-get install gitしてから、手順に則ってradare2の最新版をインストールしていくわけです。

$ sys/install.shして待つこと数分……ビルド途中に時々現れるwarningの文字が気になっちゃうけど、そして

collect2: error: ld returned 1 exit status
Makefile:88: ターゲット 'libr.so' のレシピで失敗しました
make[3]: *** [libr.so] エラー 1
Makefile:100: ターゲット 'libr.so' のレシピで失敗しました
make[2]: *** [libr.so] エラー 2
Makefile:28: ターゲット 'all' のレシピで失敗しました
make[1]: *** [all] エラー 2
Makefile:55: ターゲット 'all' のレシピで失敗しました
make: *** [all] エラー 2

とかでてるけどキニシナイ

で、やってみると

$ r2 ./SelfReference 
bash: /usr/bin/r2: そのようなファイルやディレクトリはありません

ん?? どうした? さっきインストールしたよね?

ということで、コマンド投げても反応せず……失敗

第三章 自前ビルドがだめならば非安定版からインストールすればいいじゃない

失敗しても諦めず別の方法を探すよもぎさん。たどりついたのは

poppycompass.hatenablog.jp

でした。よし! これで試してみるぞ! とやってみたら、

$ sudo apt install radare2
Reading package lists... Done
E: The velue 'stable' is invalid for APT::Default-Release as such a release is not available in the sources

だめやないかーい またしても 失敗

第四章 疲れが見え始めたブログエントリ

第二章では自前ビルドでやってみたのですが、これはver2.5.0だからなってしまうのでは? という仮説のもと、1.5.0のデータをgithubからダウンロードして、sys/install.shして自前ビルドをしてみました。

自分の環境では、tar.gzを解凍したときにRead onlyなんちゃらのエラーメッセージがでて、一部しか解凍できなかったので、ホストOSのWindowsでzipを解答したファイルをゲストOSのUbuntuに渡しました

まあ、第二章と同じエラーメッセージで失敗したんですけどね


最終章 結果を言うと倒しました

さて困難続きのradare2でしたが、ついに、なんとかなりました!

大体は第三章で紹介したブログエントリのやり方、つまり非安定版をインストールするってやつなのですが、99targetファイルに追加した文章を消すことでインストールができました(じっさいには#をつけてコメントアウト

$ sudo apt-get install radare2
(略)
$ r2 -v
radare2 2.4.0 0 @ linux-x86-32 git.2.4.0
commit: HEAD build: 2018-03-05__09:42:17

やった! ちょっとまえのだけどインストールできました!

無事に axtコマンドも動くことを確認しました


おわりに

長々と見ていただきありがとうございました。乱文乱筆は失礼。

"最終章"だけにこのブログの価値があるかもしれないので、だいぶいらない部分が多いですね。

問題集の方では、非自明な環境構築は端折らないでほしかった(刊行当時でもapt-getで1.5.0は導入できなかっただろうし……とはいえ自前ビルドで通ってた可能性もある)

そもそもELF 32bitLSBを動かしてみよう、とする奇特な人は過去の存在であり、

なんで32bitの環境がほしいの?(いみわからん)

みたいな反応が多かったです。つらい。まあなんとかなったので良かったです。

課題やる時間が溶けました。睡眠時間も溶けました。

環境構築はつらい

*1:実際ははかどっていない

*2:まだ新しいPCを買っておらず、ノートPCの容量はかつかつのとき

*3:file,stringsコマンドは自明すぎる

*4:https://sites.google.com/site/yusukekikuchiwebsite/memo/ubuntushare とか

*5:後のことを考えると無事ではなかった