リバースエンジニアリング

―Pythonによるバイナリ解析技法

[cover photo]
TOPICS
Programming , Security , Python
発行年月日
PRINT LENGTH
272
ISBN
978-4-87311-448-4
原書
Gray Hat Python
FORMAT
Print PDF
Ebook
3,520円
Ebookを購入する
Print
3,520円

Pythonはリバースエンジニアやソフトウェアテスターといったセキュリティのプロにも人気の言語です。本書では、ハッキングツールやテクニックの概念を解説したうえで、Pythonを使ったバイナリ解析技法について詳しく解説します。読者は、独自デバッガの構築、バグを発見するためのツールの作り方、オープンソースのライブラリを活用した処理の自動化、商用ソフトとオープンソースのセキュリティツールを連動させる方法などについて学ぶことができるでしょう。日本語版では、本書をより深く理解するための補足情報とリバーシングに役立つツールについての解説を加筆しました。/ART/OF/REVERSINGシリーズ第1弾。

関連ファイル

正誤表

ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。

正誤表 - 2010年5月掲載(2刷以降は修正済み)

■P.5 12行目
  • 【誤】http://pydev.sourceforge.net/updates/
  • 【正】http://pydev.org/updates/
■P.125 下から15行め
  • 【誤】Size=287 Encoder=None http://metasploit.com */
  • 【正】# Size=287 Encoder=None http://metasploit.com */
■P.128 本文の6行め
  • 【誤】我々がバックドアである
  • 【正】我らがバックドアである
■P.221 下から2行め
  • 【誤】右クリックしえ
  • 【正】右クリックし

目次

序文
まえがき
1章 開発環境のセットアップ
    1.1 本書で前提とするオペレーティングシステム
    1.2 Python 2.5のインストール
        1.2.1 PythonをWindowsにインストールする
        1.2.2 PythonをLinuxにインストールする
    1.3 EclipseとPyDevのセットアップ
        1.3.1 ハッカーの最強の友:ctypes
        1.3.2 動的リンクライブラリを使う
        1.3.3 Cのデータ型を使う
        1.3.4 パラメータを参照で渡す
        1.3.5 構造体と共用体を定義する
2章 デバッガの基本原理
    2.1 汎用レジスタ
    2.2 スタック
    2.3 デバッグイベント
    2.4 ブレークポイント
        2.4.1 ソフトウェアブレークポイント
        2.4.2 ハードウェアブレークポイント
        2.4.3 メモリブレークポイント
3章 Windowsデバッガの構築
    3.1 デバッギーよ、汝はいずこ?
    3.2 レジスタ状態の捕捉
        3.2.1 スレッドを列挙する
        3.2.2 デバッガを拡張する
    3.3 デバッグイベントハンドラの実装
    3.4 ブレークポイントは全能
        3.4.1 ソフトウェアブレークポイント
        3.4.2 ハードウェアブレークポイント
        3.4.3 メモリブレークポイント
    3.5 まとめ
4章 PyDbg―ピュアPythonのWindowsデバッガ
    4.1 ブレークポイントハンドラの拡張
    4.2 アクセス違反ハンドラ
    4.3 プロセススナップショット
        4.3.1 プロセススナップショットを取得する
        4.3.2 PyDbgの各種機能を組み合わせる
5章 Immunity Debugger―両方の世界をまたにかけ
    5.1 Immunity Debuggerのインストール
    5.2 Immunity Debuggerの基礎
        5.2.1 PyCommand
        5.2.2 PyHook
    5.3 エクスプロイトの開発
        5.3.1 エクスプロイトに優しい命令を見つける
        5.3.2 不都合な文字を調べる
        5.3.3 WindowsのDEPを回避する
    5.4 マルウェアのアンチデバッグルーチンを回避する
        5.4.1 IsDebuggerPresent関数
        5.4.2 プロセスの順次チェックを回避する
6章 フック
    6.1 PyDbgによるソフトフック
    6.2 Immunity Debuggerによるハードフック
7章 DLLインジェクションとコードインジェクション
    7.1 リモートスレッド生成
        7.1.1 DLLインジェクション
        7.1.2 コードインジェクション
    7.2 バックドアの作成
        7.2.1 ファイルを隠す
        7.2.2 バックドアを作る
        7.2.3 py2exeでコンパイルする
8章 ファジング
    8.1 バグクラス
        8.1.1 バッファオーバフロー
        8.1.2 整数オーバフロー
        8.1.3 書式指定文字列攻撃
    8.2 ファイルファザー
    8.3 今後の課題
        8.3.1 コードカバレッジ
        8.3.2 自動静的解析
9章 Sulley
    9.1 Sulleyのインストール
    9.2 Sulleyプリミティブ
        9.2.1 文字列
        9.2.2 デリミタ
        9.2.3 静的データとランダムデータ
        9.2.4 バイナリデータ
        9.2.5 整数
        9.2.6 ブロックとグループ
    9.3 SulleyでWarFTPDを破壊する
        9.3.1 FTPの基礎
        9.3.2 FTPプロトコルスケルトンを作成する
        9.3.3 Sulleyセッション
        9.3.4 ネットワークとプロセスを監視する
        9.3.5 ファジングとSulley Webインタフェース
10章 Windowsドライバのファジング
    10.1 ドライバとの通信
    10.2 Immunity Debuggerによるドライバファジング
    10.3 driverlib―ドライバ向け静的解析ツール
        10.3.1 デバイス名を検出する
        10.3.2 IOCTLディスパッチルーチンを見つける
        10.3.3 IOCTLコードを調べる
    10.4 ドライバファザーの作成
11章 IDAPython―IDA Proでのスクリプティング
    11.1 IDAPythonのインストール
    11.2 IDAPythonの関数
        11.2.1 ユーティリティ関数
        11.2.2 セグメント
        11.2.3 関数
        11.2.4 相互参照
        11.2.5 デバッガフック
    11.3 サンプルスクリプト
        11.3.1 危険な関数への相互参照を検出する
        11.3.2 関数カバレッジ
        11.3.3 スタックサイズを求める
12章 PyEmu―スクリプティング対応のエミュレータ
    12.1 PyEmuのインストール
    12.2 PyEmuの概要
        12.2.1 PyCPU
        12.2.2 PyMemory
        12.2.3 PyEmu
        12.2.4 実行
        12.2.5 メモリとレジスタの値へのアクセス
        12.2.6 ハンドラ
    12.3 IDAPyEmu
        12.3.1 関数エミュレーション
    12.4 PEPyEmu
        12.4.1 実行ファイルパッカーについて
        12.4.2 UPXパッカー
        12.4.3 PEPyEmuによるアンパック
付録A 補足と追加情報(中津留 勇●株式会社ラック)
    A.1 補足
        A.1.1 Windowsの基礎知識
        A.1.2 Subversionによるソースファイルの取得
        A.1.3 より新しいPythonを使用する
    A.2 その他のPython環境
        A.2.1 setuptools
        A.2.2 IPython
    A.3 リバースエンジニアリングに役立つその他のPythonツール
        A.3.1 pefile
        A.3.2 PDFiD、pdf-parser
索引