趣味と実益のために
radare2を始めてみよう!
AVTokyo 2017 talk /
by pancake
v2.1 translation by Prof. Sonoda, Michio ,
Mr. Terashima, Takayuki &
Mr. Adrian, Hendrik, MSc. (unixfreaxjp)
Dedicated to: AvTokyo avtokyo.org ,
R2 & r2jp (radare2 Japan community)
github.com/radareorg/r2jp
r2jp 2017 est. memory
Radare2とは?
Radareとは?
● 12年間開発されているオープンソースプロジェクト(無料)
● リバースエンジニアリングのフレームワークとツールセットで構成
● オリジナル(初期)は私(pancake)が開発
● コミュニティとコントリビューターのコーダーが参加
● 個人による開発スタイルから、プロジェクトリーダー、メンテナーのスタイルに移行
● 現状は6週間ごとにマイナーバーションアップをリリース
● +1.0となるメージャーバージョンアップは毎年r2conの後にリリース
● r2conはバルセロナで開催(2017年はおよそ230人の参加者)
● r2conの全セッションはYouTubeにて公開
Who Am I?
● フリーソフトの愛好家でありオタク
○ バルセロナ、カタルーニャ地方の生まれ
○ いくつかフリーソフトウェアの開発とメンテをしている
○ DEF CON CTF に3年連続の出場
○ 絵を描くことが趣味
○ 父親として頑張ります
● リンク
○ github、 bitbucket でradare、ユーザ名 trufaeで探してみてください
○ ツイッターにプロフィールがあります: https://twitter.com/trufae
● NowSecure社所属 (モバイルセキュリティアナリスト,研究開発)
○ mips、arm、x86用のアセンブリでのコーデックの最適化
○ 高速道路におけるリアルタイム交通解析のための組み込み機器向けファームウェアの開発
○ 主にWindowsプラットフォームでのフォレンジック
○ プログラミングとハッキングに関するコースのインストラクター
radare2の機能
● プログラムを解析して動作を理解する
● 様々なエンコード文字列の認識 (中国語, 韓国語, キリルなど)
● いくつかの異なるテクニックを用いて文字列を検索
● メモリダンプやファームウェアなどのフォレンジック調査
● ファイルシステムのマウントとパーティションテーブルの解析
● その他のデバッガーとの連携機能(gdb, r2, frida, windbg,など)
● プログラムの一部をエミュレートしてブロックを復号
● 外部デコンパイラまたはグラフ作成ツールを使用
● 2つのバイナリの違いを確認できるdiff機能
● 2048やr2warsのようなゲームもプレイできる!
どんな環境でも使えます!
● 対応OS:
○ Windows, Linux, Mac, QNX, Solaris, NetBSD, FreeBSD, BeOS, Android, iOS, ….
● 対応アーキテクチャー:
○ x86, arm, mips, sparc, ppc, z80, 6502, 8051, avr, wasm, snes, java, dalvik, hppa, ...
● ほとんどのos/アーキの組み合わせでのネイティブデバッガをサポート
● web-assembly と asm.jsにも対応
● ローカルまたはリモートでも使用可能
(demo rasm2 -L rabin2 -L r2 -L)
2017年11月02日「radare2」トーク/ワークショップAVTokyo 2017
学習曲線
● 最初の段階はステップバイステップで学ぶ必要があるが、長期的には楽しい
● 10個の実行コマンドが分かれば使えるようになる
● コマンドは組み合わせたり拡張することができる
● 初心者でも2週間程度で使えるようになる
● 実際に使って学ぶ
● 関心と献身が必要
● いくつかの類似ツールとは違う手法を採用
● オープンソースなので、 自由に(rwx)!
文書化® されたもの
● ソースコードはCで書かれている
● オンラインマニュアル有り(ただしバージョンは古い)
● ブログ記事(Twitterをフォローしてね: @radareorg)
● YouTube とVimeoビデオで
○ r2con の2016, 2017のビデオはすべて公開
● コマンドラインのヘルプマニュアル("?"コマンド)
● UNIX系のmanページ
● IRC と Telegram チャンネルのQ & Aコニュニティ(800人)
https://twitter.com/radareorg
https://t.me/radare
基本機能とコマンド
● 検索
○ Relative / Absoluteのアドレスと部分的なアドレス (s+0x10, s..10, s 10)
○ 履歴/History (!, s!)
○ ブロックサイズ/ blocksize (b, @!)
● ダンプ/プリント
○ Hexdump (px, pxr, pxa, prc, pxA, …)
○ アセンブリの種類に夜、ディスアセンブリ (pd, pD) @a:mips, e asm.arch
○ デコード構造 (pf)
○ Checksums, entropy, statistics (p=, ph)
● バイナリの書き込み
○ アセンブリの書き込み (wa)
○ ストリヌスや文字列 (w)
○ Hexpairs (wx)
○ 全体的なファイルの中身 (wf)
コマンド修飾子
プレフィックス
● [1-9]
○ Repeat command n times
● . (backtick)
○ Interpret the output of the command as r2
● “
○ Ignore special characters
● `
○ Insert the output of a command
● !
○ Shell escape
● $
○ Alias command
● 
○ Alias for =!
サフィックス
● @
○ temporal seek
● |
○ system pipe
● ~
○ internal grep
● >
○ file redirect
● #
○ Comment
● ?
○ Show help
● j
○ Output in JSON
デモ
ファイルシステムのマウントと検索機能
● radare2はもともとフォレンジックツール
● ファイルの中身のoffset 検索,その逆もOK
● パターンや既知のヘッダの検索、ダンプ機能
● HFS, FAT, NTFS, EXT2に対応
● Squash, jffs2はまだ未対応で開発中
● コマンド ‘m’でパーティションテーブル読み込みとファイルシステムマウント
○ GRUBコードでのプラグイン. (GPL warning)
○ io や r2 ファイルシステムも (開発中)
デモ
バイナリヘッダの解析
● 多種類のバイナリヘッダに対応可
● rabin2 -l
● 破損したバイナリの認識・調査機能
● ディスクやメモリからの読み込み
● IO レイヤーはデータへのアクセスを抽象化
● 仮想アドレス空間をエミュレーション
● r2 -nn
● rabin2 -H
● メモリヘッダの解析 (oba, .!rabin2 -r)
● リソース、エンタイトルメントの抽出
デモ
解析とディスアセンブリ
初心者向けの一般的な調査機能
● -A, aa, aaa, aaaa, aaaaa, aaaaaaaah!
実はもっと面白いコマンドが沢山あります:
● e??anal.
さらに詳細な調査を狙う為のコマンド:
● aac, aar, aae, aav, aab, ...
いくつかのコマンドでESILによるエミュレーターを使用できる
解析とディスアセンブリ
リスト機能
● afl
基本ブロックのリスト
● afb
グラフ化
● agf
名前の変更
● afn
単一オペコードの解析
● ao
単一関数の解析
● af (e anal.hasnext)
代替解析ループ
● a2f
オートネーム機能
● afna
解析オプション
もっと調べるコードがある場合:
● anal.hasnext
文字列検索:
● anal.strings
実行コマンドが存在しない領域では下記のコマンドが便利
● anal.noncode
xrefやJump-Tables調査
● anal.jmptbl
デモ
複数フォーマットでデータを表示する機能
デフォルトは‘b’(ブロックサイズ)表示
ズームビュー機能, エントロピー調査, データブロックのカラーリング, 実行命令コード など
● "p" コマンドとは?
指定されたアドレスのメモリをパースして文字列のように整形する
● pf xxi foo bar cow @ addr
デモ
デバッギングとエミュレーター機能
スタティック解析モードではR2は全てのデバッガアクションを エミュレーターエンジン
(ESIL VM)にブリッジする。 -d のオプションでターゲットファイルをダイナミック解析モー
ド(デバッガ)で動かす事が出来る
● r2 -d
指定アドレスへのジャンプ命令 
● dcu addr
ステップイン/ステップオーバー
● ds や dso
デバッギングとエミュレーター機能
ネイティブとリモートデバッギングエンジンに接続可能
● dbg:// winedbg:// gdb:// windbg:// qnx:// ..
その他多数のローレベルデバッギング機能:
● バックステップ (Thanks Ren Kimura!)
● メモリスナップショット
● ソフトウェア/ハードウェア ブレークポイント
● デバッグのアシスト (emulation + debug)
● トレース
● Filedescriptor 操作
Rarun2 プロファイル
実行環境は下記のような設定が可能:
● r2 -r または dbg.profileでテキストファイル指定
● dor または -R コマンドラインフラグによるカンマ区切りリスト指定
radare2環境の上でgid, uid, chroot, chdir, environment, arguments, filedescriptors
の変更する事ができる
● 任意のディレクティブ値は、文字列、明示的なファイル、またはプログラムの出力と
することができます
$ man rarun2
デバッガーのデータ表示
スタックの内容を表示
● dbt - backtrace
● pxr@r:SP
ローカル変数とその値を表示
● afvd
カラーバーを見失ったら
● p=
デモ
インターフェース
● メインはコマンドプロンプトCLI
● 最近はビジュアルモードが人気
● ウェブサーバのGUI (r2 -c=H)
ビジュアルモードの時には、コマンドでな
くはキーにアクションをバインド
● pP”|=... でビューの変更
● ‘s’を押すと, bpを循環的に切り替える
● コマンド履歴/history
● ビジュアルアセンブラー
● インタラクティブ・グラフ
グラフUI / GUIについて
必要な時に r2pmでインストール可能(時系列)
● Gradare2 (simple gtk2/3 + vte ui)
● Ragui (unreleased)
● Bokken (unmaintained)
● Blessr2 (nodejs-blessed based UI)
● WebUIs (material, enyo, tiled, …)
● Radare2gui (.net for windows)
● Cutter (previously known as Iaito)
● ...
デモ
カスタマイズ(read:"r2 hack")について
● ライブラリー
○ symlinksによる規定のインストール方法
○ cd libr/* ; vim ; make; run
● プラグイン
○ ./configure-plugins
○ r2pm
● バインディング
○ C APIのバインディング(Python, Perl, Ruby, Scheme, Haskell)
○ Thanks to Valabind
● スクリプト
○ スクリプトは RLangでPython, C, やValaでコーディングが可能
○ バンドの自動ローディング設定も可能
r2pipe
r2を自動化する簡単な方法
● シングル api 機能: 1個コマンドを実行、結果出力
● 多くのプログラミング言語をサポート
複数のpipeコミュニケーションチャンネル
● Pipe
● Socket
● HTTP
● Native
● Spawn
デモ
Third Party アドオンについて
色んなアドオン機能の開発プロジェクトがあります、例えば:
● scripts, plugins, patchesでr2は拡張可能…
● r2pmまたはパッケージマネージャー経由でインストール
○ デフォルトでホームにインストール ( -g を使用しない場合)
● デコンパイラ, SMT ソルバ, 多くの逆アセンブラ, ツール, …
● r2pm -sのコマンドで一覧を見ることができる
(デモ)
r2frida
● Fridaはradare2のフックエンジンであり, javascript をインジェックションし、ローカルや
リモートのプロセスにフックした後さまざまなやりとりを行います
○ REPL, トレーサー, プロセスリスト, など..
● Radare2 を使えばFridaのフロントエンドとして使う事ができます
○ IO プラグインの機能を使うことができる
○ io->system 経由でのアクセス機能
○  や =! を使用するコマンド
● rarun2にあるr2preload を使うとself:// で自分自身のプロセスインジェクションも可能
WineDBG
● Wine は Windows エミュレータではない
● winedbgに付属し, とても素朴なコマンドライン低レベルデバッガ
● io.winedbg プラグインとのインターフェイスが可能
● bochs:// と似ている
● LinuxおよびMacプラットフォームでr2を使用してWindowsのプログラムをデバッグ
できます。
● 開発の初期段階
○ 多くの可能性
その他 3rd Partyデバッガーバックエンド
● GDB / LLDB
○ qemu、vmware、vbox、..に埋め込まれたgdbserverを介してカーネルをデバッグする ..
○ Appleのデバッグサーバ、 GNUのgdbserver
○ AVRエミュレータとJTAG
● WINDBG
○ windbgサーバーに接続する
● WINEDBG
○ wine (Linux, Mac, ..)でWindowsプログラムをデバッグ
■QNX
○ 自動車で使用されるデバッグサーバ
● Bochs
○ X86 CPUデバッガーdebugger
デモ
ご質問は?
(Questions?)
Thanks For Watching!

More Related Content

PDF
Master Canary Forging: 新しいスタックカナリア回避手法の提案 by 小池 悠生 - CODE BLUE 2015
PDF
入門 シェル実装
PDF
AI時代の要件定義
PDF
目grep入門 +解説
PPTX
北護大/FHIR 開發簡介與應用
PDF
REST API のコツ
PDF
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
PDF
高速な倍精度指数関数expの実装
Master Canary Forging: 新しいスタックカナリア回避手法の提案 by 小池 悠生 - CODE BLUE 2015
入門 シェル実装
AI時代の要件定義
目grep入門 +解説
北護大/FHIR 開發簡介與應用
REST API のコツ
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
高速な倍精度指数関数expの実装

What's hot (20)

PDF
PWNの超入門 大和セキュリティ神戸 2018-03-25
PDF
katagaitai CTF勉強会 #5 Crypto
PPTX
【CEDEC2018】Scriptable Render Pipelineを使ってみよう
PDF
RSA暗号運用でやってはいけない n のこと #ssmjp
PDF
初心者向けCTFのWeb分野の強化法
PPTX
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
PDF
Unityでオニオンアーキテクチャ
PDF
PDF
JSON SchemaとPHP
PDF
コンセプトから理解するGitコマンド
PDF
Deflate
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
PDF
画面状態を抽象化してテスタブル設計ライフを送ろう
PDF
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
PDF
明日使えないすごいビット演算
PDF
Pythonが動く仕組み(の概要)
PDF
Spring Boot × Vue.jsでSPAを作る
PDF
WebSocket / WebRTCの技術紹介
PDF
Rustに触れて私のPythonはどう変わったか
PWNの超入門 大和セキュリティ神戸 2018-03-25
katagaitai CTF勉強会 #5 Crypto
【CEDEC2018】Scriptable Render Pipelineを使ってみよう
RSA暗号運用でやってはいけない n のこと #ssmjp
初心者向けCTFのWeb分野の強化法
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
Unityでオニオンアーキテクチャ
JSON SchemaとPHP
コンセプトから理解するGitコマンド
Deflate
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
画面状態を抽象化してテスタブル設計ライフを送ろう
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
明日使えないすごいビット演算
Pythonが動く仕組み(の概要)
Spring Boot × Vue.jsでSPAを作る
WebSocket / WebRTCの技術紹介
Rustに触れて私のPythonはどう変わったか
Ad

Similar to 2017年11月02日「radare2」トーク/ワークショップAVTokyo 2017 (15)

PDF
デバドラを書いてみよう!
PPTX
オープンソース・ソフトウェアで始めるバイナリ解析
PDF
リバースエンジニアリングのための新しいトレース手法 - PacSec 2010
PPTX
No.2 超初心者向け セキュリティ入門
PPTX
Webセミナー「RAD Studio 10.1 Berlin Update 2 Anniversary Edition 新機能ガイド」
PDF
[CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes
PDF
【学習メモ#3rd】12ステップで作る組込みOS自作入門
PDF
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
PDF
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
PDF
Debug Hacks at Security and Programming camp 2011
ODP
Programming camp Debug Hacks
PDF
Hokkaido.cap#1 Wiresharkの使い方(基礎編)
PDF
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
PDF
Programming camp 2010 debug hacks
PDF
V6 unix in okinawa
デバドラを書いてみよう!
オープンソース・ソフトウェアで始めるバイナリ解析
リバースエンジニアリングのための新しいトレース手法 - PacSec 2010
No.2 超初心者向け セキュリティ入門
Webセミナー「RAD Studio 10.1 Berlin Update 2 Anniversary Edition 新機能ガイド」
[CB17] Trueseeing: Effective Dataflow Analysis over Dalvik Opcodes
【学習メモ#3rd】12ステップで作る組込みOS自作入門
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Debug Hacks at Security and Programming camp 2011
Programming camp Debug Hacks
Hokkaido.cap#1 Wiresharkの使い方(基礎編)
Devsumi2013 Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
Programming camp 2010 debug hacks
V6 unix in okinawa
Ad

2017年11月02日「radare2」トーク/ワークショップAVTokyo 2017