たのしいバイナリの歩き方

著者 :
  • 技術評論社
3.82
  • (5)
  • (8)
  • (9)
  • (0)
  • (0)
本棚登録 : 229
感想 : 8
本ページはアフィリエイトプログラムによる収益を得ています
  • Amazon.co.jp ・本 (320ページ)
  • / ISBN・EAN: 9784774159188

作品紹介・あらすじ

濃くて楽しい機械語の世界へようこそ!基本的なアセンブリーディングから最新の応用事例まで、コンピュータを自在に操るための基礎が身につく。

感想・レビュー・書評

並び替え
表示形式
表示件数
絞り込み
  • http://gihyo.jp/book/2013/978-4-7741-5918-8

    ■概要
    「シューティングゲームをチートから守るには?」
    「リバースエンジニアリングされないためには?」
    「脆弱性を見つけ,権限を奪取するには?」

    低レイヤーのおもしろさを体感できる!

    普通のプログラミングだけでは意識しない低レイヤーの世界は,コンピュータを自在に操れる楽しさでいっぱい。

    セキュリティキャンプにてソフトウェアセキュリティクラスの講師を務める著者が、アセンブラの読み方から最新の応用事例まで,技術と考え方をやさしく解説します。

    ■ToC
    第1章 リバースエンジニアリングでバイナリの読み方を身につける

    1.1 まずは解析の流れを体感してみよう

    安全に解析できる環境を作る
    解析に必要な3つのツール
    プロセスモニターのログから挙動を確認する
    レジストリへのアクセスから読み取れること
    リバースエンジニアリングとは
    コラム リバースエンジニアリングの技術力を競う大会
    1.2 静的解析をやってみよう

    静的解析と動的解析
    コラム StirlingとBZエディタの違い
    バイナリエディタでファイルの中身を眺めてみる
    アセンブラを読めなくても解析はできる
    ソースコードがない状態から動作を把握する
    逆アセンブルされたソースコードを確認する
    1.3 動的解析をやってみよう

    Process Monitorのフィルタルールを設定する
    デバッガの役割とは
    OllyDbgでより詳細な動作を見極める
    逆アセンブルされた処理を分析する
    コラム レジスタとは
    解析結果とソースコードを見比べる
    コラム 好みのデバッガを選ぼう
    1.4 最低限のアセンブラ命令だけざっくり把握する

    すべてのアセンブラ命令を覚える必要はない
    アセンブラではどのように条件分岐が実現されているのか
    引数はスタックに積まれる
    アセンブラからC言語のソースコードをイメージできるか
    1.5 アセンブラ命令から動作を把握しよう

    関数にブレイクポイントをセットする
    逆アセンブルして重要な部分を見ていく
    コラム アセンブラを書こう
    第2章 シューティングゲームをチートから守るには

    2.1 メモリダンプを読み解く

    シューティングゲームのルール
    たった4バイト書きかえるだけで高得点に
    メモリダンプを取得するには
    プロセスが異常終了した瞬間の状態からクラッシュの原因を探る
    Just-In-Timeデバッグを有効にするには
    ダンプファイルから原因の手がかりを見つける
    コラム パソコン以外のコンピュータを解析することはできるのか
    コラム Java製アプリを解析するには
    2.2 動作を解析されないようにするには

    アンチデバッギングの手法
    コラム デバッグを検知するさまざまな手法
    コードを難読化して解析されるのを防ぐ
    コラム 難読化に関する話題
    実行ファイルを実行できる状態のまま圧縮する
    圧縮された実行ファイルを展開する ~アンパック
    UPXを手動でアンパックして仕組みを理解する
    ハードウェアブレイクポイントを使ってASPackをアンパックする
    コラム .NET製アプリを解析するには
    第3章 ソフトウェアの脆弱性はこうして攻撃される

    3.1 バッファオーバーフローを利用して任意のコードが実行される仕組み

    バッファオーバーフローが起こるプログラムの例
    一般ユーザーが所有者権限でプログラムを実行する仕組み
    どのようにして権限は奪われるのか
    スタックにおけるメモリの使われ方
    こうして攻撃者が用意したコードは実行される
    gdbでコードが実行されてしまう状況にあることを確認する
    攻撃用コードの例
    shellcodeとして使えるマシン語コードを生成する
    0x00を使わないように改良する
    コラム printf系関数に起因するフォーマットストリングバグ
    3.2 攻撃を防ぐ技術

    アドレスをランダムに決定する ~ASLR
    実行コードが置かれるメモリ空間以外には,極力実行権限を持たせない ~Exec-Shield
    スタックが破壊されたことを検知するマシン語をコンパイル時に挿入する ~StackGuard
    3.3 セキュリティ機能を迂回する技術

    libcの中にある関数を利用して攻撃する ~Return-into-libc
    ランダム化されていないモジュール内にあるアセンブラコードを使って攻撃する ~ROP
    コラム セキュリティがいたちごっこになる理由
    第4章 処理を自在に実行させるプログラミングのテクニック

    4.1 デバッガを自作して動作を理解する

    「かんたんなものを作ってみる」ことでたのしく理解を深める
    デバッガはどのような仕組みになっているのか
    逆アセンブラを実装する
    改良したデバッガを実行してみる
    4.2 他プロセス内で任意のコードを実行させる ~コードインジェクション

    他プロセスへコードを注入させる3つの方法
    SetWindowsHookExでOSのシステムメッセージをフックする
    レジストリのAppInit_DLLsにDLLのパスを登録しておく
    CreateRemoteThreadで他プロセス内にスレッドを生成する
    関数を挿入する
    4.3 処理を任意のものに置きかえる ~APIフック

    APIフックの2つのタイプ
    DetoursでかんたんにAPIフックを実現
    メッセージのタイトルを変えて動作を確認してみる
    コラム 「ハッキングらしい」技術の象徴がDLLインジェクションとAPIフック?
    第5章 ツールを駆使してより深い世界へ

    5.1 Metasploit Frameworkで脆弱性を検証/調査する

    Metasploit Frameworkとは
    脆弱性情報はどこで手に入るのか
    Exploitを試す環境を作る
    脆弱性を突いてみる
    コラム shellcodeをもっと勉強したいならば
    ROPの実例を見る
    5.2 EMETでROP対策の仕組みをのぞく

    EMETとは
    Anti-ROPのアイディアはBlueHat Prizeで入賞したもの
    いかにして攻撃を防ぐか
    ローダーの処理を把握する
    DLLはどのような処理をしているのか
    CALL-RETNをチェックする
    どうやって誤検知を防ぐか
    スタックの正当性をチェックする
    5.3 REMnuxでマルウェアを解析する

    REMnuxとは
    パターンデータベースを更新する
    ディレクトリをスキャンする
    5.4 ClamAVでマルウェアやExploitを検知する

    ClamAVのパターンファイルの特徴
    .cvdファイルを展開してみる
    検知したファイルの詳細を知る
    使われているパッカーやマルウェアらしいものを検出する
    5.5 Zero Wine Tryoutsでマルウェアを解析する

    REMnuxとZero Wine Tryoutsの違い
    動作の仕組み
    ユーザーインターフェースを表示させる
    解析レポートの情報を確認する
    コラム 自分でツールを開発してみよう
    5.6 人の手による解析を極力減らすには ~ヒューリスティック技術

    1日平均で60000個のマルウェアに対応する限界
    ヒューリスティック技術というイノベーション
    2つのマルウェアでテストしてみると
    Appendix

    A.1 IDAをインストールする

    A.2 OllyDbgをインストールする

    A.3 WinDbgをインストールする

    A.4 Visual Studio 2010をインストールする

    A.5 Metasploitをインストールする

    A.6 解析ツール

    Stirling/BZエディタ
    Process Monitor
    Process Explorer
    Sysinternalsツール
    うさみみハリケーン
    A.7 参考文献

  • たのしかった

  • リバースエンジニアリングの雰囲気が掴める。広く浅くバイナリ解析の技術の世界を学ぶことができる。

  • ざっと読むには少し実践的で難しかった。

  • 前半はリバースエンジニアリング、後半は脆弱性攻撃を主とした解説。
    後半はセキュリティの話にもつながるので、色々と面白い。
    アセンブラレベルのコードが随所に出てくるが、著者がいうように「流れをざっと追う」くらいに見ておけば、それほど難しくはないと思う。

  • バイナリ解析の基本的な方法についてツールの紹介や使い方について書かれた本。

    パッと開いて内容を読んで昔(まあ、数年前のことではあるのですが、ものすごく昔に感じられます。。。)会社で自主的に開かれたバイナリ解析の勉強会を思い出しました。

    10回近く回数があって半分も出られなかったのが悔やまれますが、おお、こんなことできるのかとワクワクしたことを思い出しました。

    そんなワクワクを思い出させてくれた本でした。

    (以上、ほぼブログ全文です。)

    ブログはこちら。
    http://blog.livedoor.jp/oda1979/archives/4557365.html

  • 簡単なリバースエンジニアリングを経てアセンブラの流れを押さえることから始め、デバッギング防止策や、プログラムの脆弱性をついた攻撃などを学んでいく流れ。後半は簡単なデバッガの自作や、ROPやマルウェア検知ツールの紹介。
    サイトからダウンロードできるサンプルコードや実行ファイルと組み合わせることにより、本書の手順通りに進めれば、後半でDLLインジェクションまでできるところがよい。
    基本的にはWindows向け。MacだとHexEditとかXcodeのDBGやDDDを駆使すれば、同等のことはできるかも

全8件中 1 - 8件を表示

愛甲健二の作品

  • 話題の本に出会えて、蔵書管理を手軽にできる!ブクログのアプリ AppStoreからダウンロード GooglePlayで手に入れよう
ツイートする
×