デバッガによる x86プログラム解析入門

概 要

本書は、x86系CPUで作動するWindows Vista/XP用ゲームソフトなどのプログラムを解析するための基礎知識やプログラム解析手順を解説したプログラム解析の入門書です。本書はプログラミングの初心者でも理解しやすいように、難解な専門用語を使わずに、プログラム解析に必要な事項に絞って紹介するとともに、デバッガの使い方や、最も基本となるプログラムの動作原理、アセンブリ言語によるプログラミングの基礎について、やさしく詳細に解説しました。ゲームのクラッキングだけでなく、ウイルスやトロイといったマルウェアへの対応などプログラム解析に興味のあるすべての人におすすめします。

著者 Digital Travesia管理人 うさぴょん
価格 本体2400円(税別)
ISBN 978-4-7980-1705-1
発売日 2007/07/10
判型 A5
色数 1色
ページ数 336
CD/DVD
対象読者 初級
シリーズ
表紙イメージ
購入 アマゾンで購入する
楽天で購入する

※リンク先によっては、販売ページが用意されていないことがあります。あらかじめご了承ください。

新しいウィンドウで開く 書籍購入のご案内

サポート

サポート情報は以下からご参照下さい。

サポート情報へのリンク

目次

Chapter 1 デバッガとは

1-1 デバッガの用途

1-2 デバッガの種類

1-2-1 対象による分類

1-2-2 ソースコード対応による分類

1-2-3 その他

1-3 代表的なデバッガ

1-3-1 OllyDbg

1-3-2 SoftICE

1-3-3 Debugging Tools For Windows

1-3-4 IDA Pro

1-3-5 その他

1-4 機能の構成要素

1-5 デバッガと一般的なソフトウェアとの違い

1-6 デバッガの主な機能

1-6-1 アプリケーションの実行制御機能

1-6-2 その他の機能

1-7 デバッグ対象

1-8 デバッガの可能性

Chapter 2 デバッガと関連ツールを使用するために必要な基礎事項

2-1 はじめに

2-2 CPUが2進数を使う理由

2-3 16進数・リトルエンディアン

2-4 数値表現、データ型

2-5 マシン語、アセンブリ言語、C/C++言語

2-6 アセンブリ言語の基本的な知識

2-7 アセンブリ言語の主要な命令

2-8 スタックの仕組みとスタックフレーム

2-9 API関数とWindowsメッセージ

2-10 ネイティブAPI

2-11 PEファイル

2-12 IATとは

2-13 DLLとは

2-14 カーネルドライバとは

2-15 プロセスが実行される仕組み

2-16 プロセスとスレッド

2-17 プロセスメモリ

2-18 例外処理

2-19 各種資料の入手先

2-20 ブレークポイントの仕組み

2-20-1 INT 3命令を用いたブレークポイント

2-20-2 メモリアクセス違反を用いたブレークポイント

2-20-3 ハードウェアブレークポイント

2-21 ステップ実行やステップオーバー・ステップイン・ステップアウトの仕組み

2-22 一般的な解析手法

2-22-1 解析対象による分類

2-22-2 解析方法による分類

2-22-3 補足

Chapter3 デバッガと関連ツール

3-1 フリーウェアで揃えるプログラム解析環境

3-2 OllyDbgと日本語化パッチとプラグイン(OllyDump等)

3-2-1 OllyDbgのインストール

3-2-2 OllyDbg日本語化パッチの入手と適用

3-2-3 OllyDbgプラグインの入手

3-3 ヘキサエディタ(バイナリエディタ)

3-4 プロセスメモリエディタ

3-5 逆アセンブラ

3-6 プロセスモニタリングツール(Process Monitor等)

3-7 リソースエディタ

3-8 仮想マシン構築ソフト

3-9 パッカー判定ソフト

3-10 .NET Framework対応アプリケーション用逆コンパイラ

Chapter4 デバッガでプログラムの実行処理を追いかける

4-1 OllyDbgの基本操作についての予備知識

4-1-1 共通ショートカットキー

4-1-2 メニュー

4-1-3 条件式

4-1-4 検索オプション

4-1-5 ラントレース

4-2 OllyDbgの各ウィンドウについて

4-2-1 CPUウィンドウ

4-2-2 ログウィンドウ

4-2-3 実行可能モジュールウィンドウ

4-2-4 メモリマップウィンドウ

4-2-5 スレッドウィンドウ

4-2-6 ウィンドウ一覧表示ウィンドウ

4-2-7 ハンドルウィンドウ

4-2-8 パッチウィンドウ

4-2-9 ブレークポイントウィンドウ

4-2-10 ウォッチウィンドウ

4-3 実行処理を追いかける上でどこに注目するか、何を知っておくべきか

4-4 メッセージボックスセオリーとメッセージトラップセオリー

4-5 演習用プログラムについて

4-6 デバッギー起動とアタッチおよびデタッチ

4-7 プロセスとスレッドの作成

4-8 エントリーポイント

4-9 ニーモニックの実行とEIPレジスタ

4-10 条件ジャンプ命令による条件分岐とフラグ

4-11 スタック使用状況の把握

4-12 プロセスメモリの使われ方

4-13 プログラムの処理の流れ

4-14 プログラムの処理の流れを変更してみる

4-15 ステータスフラグを変更する

4-16 ジャンプ命令を修正する

4-17 プロセスメモリ上のバイナリデータを変更する

4-18 わざと例外を起こしてみる

Chapter5 実践的な処理の変更例

5-1 実践的なプログラム解析

5-2 CD/DVDチェック

5-3 2重起動チェック(その1)

5-4 2重起動チェック(その2)

5-5 画面切り替えチェック

5-6 OllyDbg起動チェック

5-7 デバッグ検出(API関数)

5-8 デバッグ検出(SEH)

5-9 プロセスメモリ上とディスク上の違い

5-10 OllyDbgのバグについて

5-10-1 デバッグ出力文字列の変換

5-10-2 OllyDbgの動作が極端に遅くなる

Chapter6 ゼロからはじめるデバッガ自作

6-1 プログラミング予備知識無しでも可能

6-2 デバッガの基本処理

6-3 対象OSと使用するコンパイラ

6-4 デバッグ特権や使用するAPI関数

6-5 最小構成のデバッガを作成

6-6 初期デバッグイベント取得と表示

6-7 デバッグ出力文字列を取得してみる

6-8 レジスタの格納データやフラグの状況を取得する

6-9 INT 3ブレークポイントの設定とブレーク

6-10 ステップ実行

6-11 デバッグレジスタを使ったブレークポイント

6-12 簡易プロセスメモリエディタの実装

6-13 逆アセンブラの実装

Chapter7 デバッガ対策

7-1 マルウェア解析の注意事項

7-2 基本的なデバッガ検出手法

7-3 パッカーとクリプター

7-4 UPXのアンパック例

7-5 ローダーがプログラム本体を復号して起動

7-6 プログラム自己書き替え

7-7 動的な復号と暗号化

7-8 コード難読化と問題点

7-9 .NET Framework対応アプリケーション

7-10 確保したメモリエリアにコードを展開して実行

7-11 参照文字列の隠蔽

7-12 プロセスメモリ上でのデータ暗号化

Chapter8 デバッガに関する問題

8-1 デジタルミレニアム著作権法

8-2 ネットゲームがルートキットの技術を応用したプログラム解析対策を実装

8-3 ネットゲームは解析・改造すべきではない?

8-4 Sysinternalsはセキュリティソフトでのルートキット技術の応用に否定的

8-5 デバッガ対策解除技術が販売されている

8-6 デバッガによる解析をトリガーとするロジックボム

8-7 Winny裁判の影響

8-8 デバッガ側で悪用されているか否かを判断するのは技術的に不可能

8-9 解析する側と解析を防ぐ側

Chapter9 アセンブリ言語によるプログラミングの基礎

9-1 概要

9-2 MASM32やWinAsm Studioの入手とインストール

9-3 ソースコード記述形式の基礎

9-4 簡略記述を使用せずアセンブルコードをそのまま書いてみる

9-5 プロセスメモリパッチャーの製作

補足 インラインアセンブラと逆アセンブルコードリストの再利用

Appendix

文字コード表

主要な命令とステータスフラグ一覧

主要なAPI関数一覧(カテゴリ別)

有用な副読書

PR

秀和システム