Ubuntuでインストールできるradare2が古い時の対処法
Ubuntuのapt/apt-get
でインストールできるradare2
が古いため、一部のコマンドが実行できないという話をブログや知り合いから聞くようになった。
初めて使うツールは動かないだけで使うのをやめてしまうことが多いだけに、割と深刻である。
というわけで、調査と対策をまとめてみた。
問題
Ubuntuは広く使われているディストリであるため、radare2
を始める際にはapt
で導入する人が多い(データ数は周りの4人・・・)。
しかし、現在(2017/10/6)提供されているパッケージは0.9.6
と非常に古い(最新は1.6.0
)。
そのため、コマンドが動かなかったり、わけわからん挙動を起こすことがある。
古いバージョンを使うことによる問題例
セキュリティコンテストのためのCTF問題集の初めにあるSelfReference
のところでいえば、axt
コマンドが使えない。
[0x0040526]> ax? XXX: This command conflicats 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 [0x0040526]> ar? XXX: This command conflicts with 'ax' Usage: ar[?d-l*] ar addr [at] Add code ref pointing to addr (at is curseek) ard addr [at] Add data ref arj List refs in json format ar- [at] Clean all refs (or refs from addr) ar List refs ar* Output radare commands
コマンドが競合していると出る。
最新バージョン(1.6.0
)では
[0x00201040]> ar? |Usage: ar # Analysis Registers | ar Show 'gpr' registers | ar0 Reset register arenas to 0 | ara[?] Manage register arenas | ar 16 Show 16 bit registers | ar 32 Show 32 bit registers | ar all Show all bit registers | ar <type> Show all registers of given type | arC Display register profile comments | arr Show register references (telescoping) | ar= Show register values in columns | ar? <reg> Show register value | arb <type> Display hexdump of the given arena | arc <name> Conditional flag registers | ard <name> Show only different registers | arn <regalias> Get regname for pc,sp,bp,a0-3,zf,cf,of,sg | aro Show old (previous) register values | arp[?] <file> Load register profile from file | ars Stack register state | art List all register types | arw <hexnum> Set contents of the register arena | .ar* Import register values as flags | .ar- Unflag all registers
古いやつだとVisual Modeを使うとWebサーバが立ち上がることもあり、厄介だ。
この時はlocalhost:9090/enyo/
からconsole
ボタンを押せばWebページからコマンドライン操作できる。
対処策
2つ(+おまけ)考えた。
その1:ソースからビルド
機能的に最新。
どのディストリでも安定して実行できる。
$ git clone https://github.com/radare/radare2 $ cd radare2 $ sys/install.sh
その2:Ubuntuのtestingパッケージから新しいものを引っ張ってくる
unstable/testing
パッケージであれば、新しいバージョンが提供されている。
Ubuntuのapt
で管理したいときはこれを使うとよい。
以降、作業。
まずはファイル作成。99target
はなかったら新規作成。一行書くだけ。
$ sudo vim /etc/apt/apt.conf.d/99target [+] APT::Default-Release "stable";
testing
をレポジトリに追加。
$ sudo vim /etc/apt/sources.list [+] deb http://ftp.jp.debian.org/debian testing main contrib non-free [+] deb-src http://ftp.jp.debian.org/debian testing main contrib non-free
仕上げ。
$ sudo apt-get update $ sudo apt-get install radare2/testing
(おまけ)ゼロバージョンって格好良いって思うんだ・・・
古いバージョン(0.9.6)のままで頑張らないといけない時もたまにある(時間やネット環境がない)。
とりあえずaxt
コマンドの代替を探した話。
コマンドの違い
新旧(0.9.6/1.6.0
)でコマンド体系が結構変わっているから、メモ。
version 0.9.6 ar: manage refs/xrefs version 1.6.0 ar: like 'dr' but for the esil vm. (registers) version 0.9.6 ax: manage code/call/data xrefs version 1.6.0 ax: manage refs/xrefs (see also afx?)
0.9.6のar
と1.6.0のax
が同じコマンドになっている(最新のar
はレジスタの表示)。
しかし、探してみてもrefを追加するコマンドはあるが、探すコマンドがない。
現状諦めるしかないんだろうか・・・。
古いやつでar-
コマンドを使うとセグフォで落ちる。これはプログラム自体のバグでどうしようもなさそうだ。
調査結果
以降は各ディストリにおけるradare2のバージョンとかを調べた情報。
読まなくてもよい(まとめサイトへのリンクを載せているだけ)。
各ディストリにおけるバージョン情報
各ディストリが提供しているパッケージのバージョン情報はここにまとめられている(CentOSなど一部のディストリは載っていない)。
Ubuntuだけを見るのなら、16.04まではtrusty
が0.9.6
となっている。最早江戸時代。
17.??では1.6.0
と新しくなっている。
それ以前では、unstable/testing
として新しいバージョンを提供している。
Ubuntuの古いバージョン(16.xx以前)における状況
バグレポートでパッケージを新しくするよう要望とかは出ているみたいだが、返事が返ってきていないようだ。
一瞬自分でパッケージを更新しようと頑張ってみたが、やり方がわからなくて断念。知っている人がいたら教えてください。
最後に
radare2を始めた当時はIDAで十分だとかぼろくそに言われていたが、ちょっとずつ認知が進んでいるようだ。
楽しいradare2ライフを!
参考文献
Repology: versions for radare2
Debianでtestingやunstableからパッケージを借りる時の手順 - kotakのひまじめ日記
Bug #1529528 “Update the package to version 0.9.9” : Bugs : radare2 package : Ubuntu