- 発売日:2024/10/17
- 出版社:科学情報出版
- ISBN:9784910558356
通常価格
4,400 円(税込)
通常価格
セール価格
4,400 円(税込)
単価
/
あたり
税込
- 発売日:2024/10/17
- 出版社:科学情報出版
- ISBN:9784910558356
読み込み中...
My店舗在庫
My店舗登録で在庫確認と店舗お受け取りのご利用が可能になります。(要ログイン)
店舗在庫
商品説明
本書はバイナリ解析の初心者でも苦労なく読めるよう、基本的な事柄から丁寧に解説するように配慮されていますが、読み進めていくと専門家でも読み応えのある内容が随所にちりばめられております。
初心者の方は、先頭から順にColab × Python で実践しながら読み進めていくと、自然に高度なバイナリ解析が身に付く構成になっています。経験者の方は、興味のある章から読み始めて、分からないところがあれば、前の章に戻って確認するというスタイルでも良いでしょう。本書は後ろの章に進むにつれて高度なバイナリ解析のテクニックが自然に身に付くように構成されています。
本書は、バイナリデータの解析を行ったことがない初学者を対象に簡単なバイナリ操作から応用手法までを解説します。第1章の初めでは、Python 未経験者向けに、開発・実行環境(GoogleColaboratory)の使い方や、基本的なPython の使い方を簡単に紹介しています。ただし、1章の後半以降は基礎的なPython のプログラムを書くことができることが前提となっております。
2章ではバイナリファイルの基本操作についての解説、3章ではバイナリファイルの基本構造を解説しつつ、画像ファイルを例に具体的な解析例を紹介していきます。
4章では、様々な種類のファイルや、異なる圧縮ソフトで圧縮されたデータをひとまとめ(コンテナ)に保持できるファイル形式であるコンテナファイルを実践的に解析していきます。
5章は、Python ベースのツールであるBinary Refineryを用いた応用編となっております。
6章から8章までは実行可能形式のファイルについて解説します。Python を用いて逆アセンブリを具体的に解析する手法やLinux で使用される実行形式のELF フォーマット、機械学習を用いた解析等について解説し、また、アセンブリコードの読み方についても説明していきます。
初心者の方は、先頭から順にColab × Python で実践しながら読み進めていくと、自然に高度なバイナリ解析が身に付く構成になっています。経験者の方は、興味のある章から読み始めて、分からないところがあれば、前の章に戻って確認するというスタイルでも良いでしょう。本書は後ろの章に進むにつれて高度なバイナリ解析のテクニックが自然に身に付くように構成されています。
本書は、バイナリデータの解析を行ったことがない初学者を対象に簡単なバイナリ操作から応用手法までを解説します。第1章の初めでは、Python 未経験者向けに、開発・実行環境(GoogleColaboratory)の使い方や、基本的なPython の使い方を簡単に紹介しています。ただし、1章の後半以降は基礎的なPython のプログラムを書くことができることが前提となっております。
2章ではバイナリファイルの基本操作についての解説、3章ではバイナリファイルの基本構造を解説しつつ、画像ファイルを例に具体的な解析例を紹介していきます。
4章では、様々な種類のファイルや、異なる圧縮ソフトで圧縮されたデータをひとまとめ(コンテナ)に保持できるファイル形式であるコンテナファイルを実践的に解析していきます。
5章は、Python ベースのツールであるBinary Refineryを用いた応用編となっております。
6章から8章までは実行可能形式のファイルについて解説します。Python を用いて逆アセンブリを具体的に解析する手法やLinux で使用される実行形式のELF フォーマット、機械学習を用いた解析等について解説し、また、アセンブリコードの読み方についても説明していきます。
目次
第1章バイナリ解析に向けた準備運動
1.1Pythonである理由
1.1.1シンプルで読みやすいコード
1.1.2豊富なライブラリ
1.1.3オープンソースで活発なコミュニティ
1.2プログラミング環境構築
1.2.1Colabの特徴
1.2.2Googleドライブ上にNotebookを作成する
1.2.3プログラミング環境の設定変更と確認
1.2.4セルにコードを入力して実行する
1.2.5ColabNotebookの機能
1.3Pythonの基本
1.3.1Pythonの演算処理
1.3.2変数と主なデータ型
1.3.3コメント
1.3.4コレクション
1.3.5制御フロー
1.3.6関数
1.4Pythonでバイナリを扱う準備
1.4.1整数の表記法
1.4.2整数型から2進数、8進数、16進数表記の文字列型への変換
1.4.32進数、8進数、16進数表記の文字列型から整数型への変換
1.4.4Pythonにおける整数型の実装の深堀り
1.4.5ビット演算.
1.5バイナリシーケンス型.
1.5.1bytesオブジェクト
1.5.2bytearrayオブジェクト
1.5.3bytesとbytearrayの基本操作
1.6各種エンコード
1.6.1シーザー暗号
1.6.2Base64.
1.6.3Deflate
1.7バイナリデータを扱う練習:Base64相互変換関数の自作
コラム:本書からの挑戦状:名刺でCTF
第2章バイナリファイルの操作
2.1バイナリファイルの読み書き
2.1.1解析用ファイルの準備.
2.1.2ファイル操作の基本
2.1.3セッションストレージにファイルをアップロード
2.1.4Googleドライブ上のファイルの参照
2.2ファイル全体の俯瞰
2.2.116進ダンプしてみよう
2.2.2練習:stringsを自作してみよう
2.2.3ヒストグラムを用いたファイル全体の俯瞰
2.2.4情報エントロピーを用いたファイル全体の俯瞰
2.2.5画像化によるファイル全体の俯瞰
コラム:バイナリエディタStirlingと目grep
第3章バイナリファイルの構造解析の練習:画像ファイル
3.1バイナリファイルのファイル構造
3.1.1ファイル構造の基本要素
3.2ファイル形式の判定
3.2.1ライブラリを使ったファイル形式の判定
3.2.2簡易的なファイル形式判定プログラムの自作
3.2.3Magika:AIを使ったファイル形式の判定
3.3BMP形式.
3.3.1解析用BMPファイルの準備
3.3.2ライブラリを使った解析
3.3.3BMPファイルのフォーマット概要
コラム:コンピューターの性能向上とカラーパレットの衰退
3.3.4structモジュールの紹介
コラム:C文字列とPascal文字列:メモリ上の文字列表現
3.3.5BMPファイルの情報を表示するプログラムの作成
3.3.6応用:BMPファイルを使ったステガノグラフィ
コラム:新技術と研究倫理~ステガノグラフィを例に~
3.4PNG形式
3.4.1解析用PNGファイルの準備
3.4.2ライブラリを使った解析
3.4.3PNGファイルの構造.
3.4.4PNGファイルを分解するプログラムの作成
コラム:GIFの特許問題とPNGの誕生
3.5JPEG形式
3.5.1解析用JPEGファイルの準備
3.5.2ライブラリを使った解析
3.5.3JPEGファイルの構造.
3.5.4JPEGファイルを分解するプログラムの作成
コラム:なぜ便利なライブラリがあるのに自作するのか
第4章バイナリファイルの構造解析実践編:コンテナファイル(アーカイブ、文書ファイル)
4.1zip形式
4.1.1解析用zipファイルの準備
4.1.2ライブラリを使った解析
4.1.3zipファイルフォーマットの構造
4.1.4zip展開プログラムの自作
4.1.5応用:破損したzipファイルの復元
コラム:解析業務とアジャイル開発
4.2PDF形式
4.2.1解析用PDFファイルの準備
4.2.2ライブラリを使った解析
4.2.3PDFの仕様概要
4.2.4PDFを解析しながら仕様を学ぶ.
コラム:o-checker:ファイルフォーマットに着目したマルウェア検知ツール
第5章応用編1 バイナリファイル解析の道具箱BinaryRefinery
5.1BinaryRefineryとは
5.1.1実行環境のセットアップ
5.2BinaryRefineryのドキュメントとヘルプ
5.3入出力に使う機能
5.3.1ファイルの内容の出力
5.3.2データに関する情報の出力
5.3.3efコマンドの機能を使ったPythonスクリプト
5.3.4手入力によるバイナリデータの出力
5.3.5emitコマンドの機能を使ったPythonスクリプト
5.3.6ファイルへの出力
5.3.7dumpコマンドの機能を使ったPythonスクリプト
5.4データの表示に使う機能
5.4.1ファイルの内容の16進ダンプ表示
5.4.2peekコマンドの機能を使ったPythonスクリプト
5.5データの切り出しに使う機能
5.5.1範囲指定によるデータの切り出し
5.5.2データの分割
5.5.3snipコマンドとchopコマンドの機能を使ったPythonスクリプト
5.6バイナリと数値の変換に使う機能
5.6.116進数からのデコード
5.6.22進数、8進数等のデコード
5.6.3packコマンドの機能を使ったPythonスクリプト
5.7ビット演算に使う機能
5.7.1加算と減算
5.7.2addコマンドとsubコマンドの機能を使ったPythonスクリプト202
5.7.3ビットの反転、ローテート、シフト
5.7.4negコマンド等の機能を使ったPythonスクリプト
5.8XOR演算関係の機能
5.8.1XOR演算
5.8.2xorコマンドとrotlコマンドの機能を組み合わせたPythonスクリプト
5.8.3XORキーの推定
5.8.4xkeyコマンドがXORキーを推定する方法
5.8.5XORキー推定による自動デコード
5.8.6xkeyコマンドの機能を使ったPythonスクリプト
コラム:xkeyコマンドとautoxorコマンドが役立つ場面
5.9デコードとエンコードに使う機能
5.9.1Base64デコード
5.9.2カスタム文字セットを使ったBase64エンコードとデコード
5.9.3バイト列の逆順への並べ替え
5.9.4各ブロック内のバイト列の逆順への並べ替え
5.9.5シーザー暗号
5.9.6URLデコード
5.9.7revコマンド等の機能を組み合わせたPythonスクリプト
5.10圧縮関係の機能.
5.10.1zlibで圧縮されたデータの展開
5.10.2LZMAで圧縮されたデータの展開
5.10.3様々な圧縮アルゴリズムによる圧縮データの自動展開
5.10.4decompressコマンドの機能を使ったPythonスクリプト
5.11その他の機能
5.11.1暗号関係の機能
5.11.2ファイルの構造をパースする機能
5.11.3ファイルカービングの機能
5.12演習:難読化されたPHPスクリプトの解析
5.12.1解析対象のPHPスクリプト
5.12.2可読化方法の解明
5.12.3難読化された部分を可読化するPythonスクリプト
5.12.4別解:コマンド実行による可読化
5.12.5難読化を行うPHPスクリプト
コラム:BinaryRefineryを活用して開発しているバイナリファイル解析ツール
第6章バイナリファイルの構造解析 実践編:実行ファイル
6.1解析用ファイルの準備
6.2ELF解析ライブラリ:elftoolsの準備
6.3ELFファイルの構造
6.3.1ELFヘッダーの構造
6.3.2セクションヘッダーの構造
6.4最初に実行されるプログラムコードの取得
6.5Pythonで逆アセンブル
コラム:パッカーとエントリーポイント
6.6アセンブリコードの読み方入門
6.6.1(逆)コンパイルと(逆)アセンブル
6.6.2アセンブリコードを読む自習の準備
6.6.3アセンブリの文法
6.6.4スタック
6.6.5条件分岐:フラグレジスタとジャンプ命令
6.6.6関数
6.6.7命令セット
第7章応用編2 バイナリ解析実践CTF
7.1CTFとバイナリ解析
7.2x86-64プログラムの解析
7.2.1例題1:メモリに展開されたパスワード
7.2.2例題2:ソルバーを作成してパスワードを推測
7.2.3例題3:ビット演算の難読化
7.3Pythonバイトコードの解析
7.3.1Pythonバイトコードを解析する方法
7.3.2例題4:.pycを解析する問題
7.4本章のまとめ
コラム:CTF(CaptureTheFlag)のススメ
第8章応用編3 機械学習を用いたバイナリ解析~マルウェアの種類推定を例に~
8.1マルウェアとは
8.2機械学習とは
8.3マルウェア解析と機械学習
8.3.1マルウェア解析
8.3.2機械学習によるマルウェア解析
8.4特徴量の作成
8.5グラフニューラルネットワークを使用したマルウェア分類
8.5.1グラフニューラルネットワーク
8.5.2データセットの確認
8.5.3学習と評価
8.6独自のデータセットを作成する方法
8.6.1仮想環境とは
8.6.2マルウェアを扱う際の注意点
8.6.3VirtualBoxのインストール
8.6.4仮想マシンの準備.
8.6.5データセットの作成
8.6.6データセットの取り出し
8.6.7仮想マシンをクリーンな環境に戻す
8.7機械学習を用いたマルウェア分類における課題と展望
8.8本章のまとめ
コラム:様々なサイバーセキュリティ分野の学術会議.
おわりに
付録
付録APythonのバイナリデータ操作のチートシート
付録B各数値表記とASCIIの対応表
付録CColab以外の環境で使用できる便利なバイナリファイル解析ツール達
索引
著者紹介
1.1Pythonである理由
1.1.1シンプルで読みやすいコード
1.1.2豊富なライブラリ
1.1.3オープンソースで活発なコミュニティ
1.2プログラミング環境構築
1.2.1Colabの特徴
1.2.2Googleドライブ上にNotebookを作成する
1.2.3プログラミング環境の設定変更と確認
1.2.4セルにコードを入力して実行する
1.2.5ColabNotebookの機能
1.3Pythonの基本
1.3.1Pythonの演算処理
1.3.2変数と主なデータ型
1.3.3コメント
1.3.4コレクション
1.3.5制御フロー
1.3.6関数
1.4Pythonでバイナリを扱う準備
1.4.1整数の表記法
1.4.2整数型から2進数、8進数、16進数表記の文字列型への変換
1.4.32進数、8進数、16進数表記の文字列型から整数型への変換
1.4.4Pythonにおける整数型の実装の深堀り
1.4.5ビット演算.
1.5バイナリシーケンス型.
1.5.1bytesオブジェクト
1.5.2bytearrayオブジェクト
1.5.3bytesとbytearrayの基本操作
1.6各種エンコード
1.6.1シーザー暗号
1.6.2Base64.
1.6.3Deflate
1.7バイナリデータを扱う練習:Base64相互変換関数の自作
コラム:本書からの挑戦状:名刺でCTF
第2章バイナリファイルの操作
2.1バイナリファイルの読み書き
2.1.1解析用ファイルの準備.
2.1.2ファイル操作の基本
2.1.3セッションストレージにファイルをアップロード
2.1.4Googleドライブ上のファイルの参照
2.2ファイル全体の俯瞰
2.2.116進ダンプしてみよう
2.2.2練習:stringsを自作してみよう
2.2.3ヒストグラムを用いたファイル全体の俯瞰
2.2.4情報エントロピーを用いたファイル全体の俯瞰
2.2.5画像化によるファイル全体の俯瞰
コラム:バイナリエディタStirlingと目grep
第3章バイナリファイルの構造解析の練習:画像ファイル
3.1バイナリファイルのファイル構造
3.1.1ファイル構造の基本要素
3.2ファイル形式の判定
3.2.1ライブラリを使ったファイル形式の判定
3.2.2簡易的なファイル形式判定プログラムの自作
3.2.3Magika:AIを使ったファイル形式の判定
3.3BMP形式.
3.3.1解析用BMPファイルの準備
3.3.2ライブラリを使った解析
3.3.3BMPファイルのフォーマット概要
コラム:コンピューターの性能向上とカラーパレットの衰退
3.3.4structモジュールの紹介
コラム:C文字列とPascal文字列:メモリ上の文字列表現
3.3.5BMPファイルの情報を表示するプログラムの作成
3.3.6応用:BMPファイルを使ったステガノグラフィ
コラム:新技術と研究倫理~ステガノグラフィを例に~
3.4PNG形式
3.4.1解析用PNGファイルの準備
3.4.2ライブラリを使った解析
3.4.3PNGファイルの構造.
3.4.4PNGファイルを分解するプログラムの作成
コラム:GIFの特許問題とPNGの誕生
3.5JPEG形式
3.5.1解析用JPEGファイルの準備
3.5.2ライブラリを使った解析
3.5.3JPEGファイルの構造.
3.5.4JPEGファイルを分解するプログラムの作成
コラム:なぜ便利なライブラリがあるのに自作するのか
第4章バイナリファイルの構造解析実践編:コンテナファイル(アーカイブ、文書ファイル)
4.1zip形式
4.1.1解析用zipファイルの準備
4.1.2ライブラリを使った解析
4.1.3zipファイルフォーマットの構造
4.1.4zip展開プログラムの自作
4.1.5応用:破損したzipファイルの復元
コラム:解析業務とアジャイル開発
4.2PDF形式
4.2.1解析用PDFファイルの準備
4.2.2ライブラリを使った解析
4.2.3PDFの仕様概要
4.2.4PDFを解析しながら仕様を学ぶ.
コラム:o-checker:ファイルフォーマットに着目したマルウェア検知ツール
第5章応用編1 バイナリファイル解析の道具箱BinaryRefinery
5.1BinaryRefineryとは
5.1.1実行環境のセットアップ
5.2BinaryRefineryのドキュメントとヘルプ
5.3入出力に使う機能
5.3.1ファイルの内容の出力
5.3.2データに関する情報の出力
5.3.3efコマンドの機能を使ったPythonスクリプト
5.3.4手入力によるバイナリデータの出力
5.3.5emitコマンドの機能を使ったPythonスクリプト
5.3.6ファイルへの出力
5.3.7dumpコマンドの機能を使ったPythonスクリプト
5.4データの表示に使う機能
5.4.1ファイルの内容の16進ダンプ表示
5.4.2peekコマンドの機能を使ったPythonスクリプト
5.5データの切り出しに使う機能
5.5.1範囲指定によるデータの切り出し
5.5.2データの分割
5.5.3snipコマンドとchopコマンドの機能を使ったPythonスクリプト
5.6バイナリと数値の変換に使う機能
5.6.116進数からのデコード
5.6.22進数、8進数等のデコード
5.6.3packコマンドの機能を使ったPythonスクリプト
5.7ビット演算に使う機能
5.7.1加算と減算
5.7.2addコマンドとsubコマンドの機能を使ったPythonスクリプト202
5.7.3ビットの反転、ローテート、シフト
5.7.4negコマンド等の機能を使ったPythonスクリプト
5.8XOR演算関係の機能
5.8.1XOR演算
5.8.2xorコマンドとrotlコマンドの機能を組み合わせたPythonスクリプト
5.8.3XORキーの推定
5.8.4xkeyコマンドがXORキーを推定する方法
5.8.5XORキー推定による自動デコード
5.8.6xkeyコマンドの機能を使ったPythonスクリプト
コラム:xkeyコマンドとautoxorコマンドが役立つ場面
5.9デコードとエンコードに使う機能
5.9.1Base64デコード
5.9.2カスタム文字セットを使ったBase64エンコードとデコード
5.9.3バイト列の逆順への並べ替え
5.9.4各ブロック内のバイト列の逆順への並べ替え
5.9.5シーザー暗号
5.9.6URLデコード
5.9.7revコマンド等の機能を組み合わせたPythonスクリプト
5.10圧縮関係の機能.
5.10.1zlibで圧縮されたデータの展開
5.10.2LZMAで圧縮されたデータの展開
5.10.3様々な圧縮アルゴリズムによる圧縮データの自動展開
5.10.4decompressコマンドの機能を使ったPythonスクリプト
5.11その他の機能
5.11.1暗号関係の機能
5.11.2ファイルの構造をパースする機能
5.11.3ファイルカービングの機能
5.12演習:難読化されたPHPスクリプトの解析
5.12.1解析対象のPHPスクリプト
5.12.2可読化方法の解明
5.12.3難読化された部分を可読化するPythonスクリプト
5.12.4別解:コマンド実行による可読化
5.12.5難読化を行うPHPスクリプト
コラム:BinaryRefineryを活用して開発しているバイナリファイル解析ツール
第6章バイナリファイルの構造解析 実践編:実行ファイル
6.1解析用ファイルの準備
6.2ELF解析ライブラリ:elftoolsの準備
6.3ELFファイルの構造
6.3.1ELFヘッダーの構造
6.3.2セクションヘッダーの構造
6.4最初に実行されるプログラムコードの取得
6.5Pythonで逆アセンブル
コラム:パッカーとエントリーポイント
6.6アセンブリコードの読み方入門
6.6.1(逆)コンパイルと(逆)アセンブル
6.6.2アセンブリコードを読む自習の準備
6.6.3アセンブリの文法
6.6.4スタック
6.6.5条件分岐:フラグレジスタとジャンプ命令
6.6.6関数
6.6.7命令セット
第7章応用編2 バイナリ解析実践CTF
7.1CTFとバイナリ解析
7.2x86-64プログラムの解析
7.2.1例題1:メモリに展開されたパスワード
7.2.2例題2:ソルバーを作成してパスワードを推測
7.2.3例題3:ビット演算の難読化
7.3Pythonバイトコードの解析
7.3.1Pythonバイトコードを解析する方法
7.3.2例題4:.pycを解析する問題
7.4本章のまとめ
コラム:CTF(CaptureTheFlag)のススメ
第8章応用編3 機械学習を用いたバイナリ解析~マルウェアの種類推定を例に~
8.1マルウェアとは
8.2機械学習とは
8.3マルウェア解析と機械学習
8.3.1マルウェア解析
8.3.2機械学習によるマルウェア解析
8.4特徴量の作成
8.5グラフニューラルネットワークを使用したマルウェア分類
8.5.1グラフニューラルネットワーク
8.5.2データセットの確認
8.5.3学習と評価
8.6独自のデータセットを作成する方法
8.6.1仮想環境とは
8.6.2マルウェアを扱う際の注意点
8.6.3VirtualBoxのインストール
8.6.4仮想マシンの準備.
8.6.5データセットの作成
8.6.6データセットの取り出し
8.6.7仮想マシンをクリーンな環境に戻す
8.7機械学習を用いたマルウェア分類における課題と展望
8.8本章のまとめ
コラム:様々なサイバーセキュリティ分野の学術会議.
おわりに
付録
付録APythonのバイナリデータ操作のチートシート
付録B各数値表記とASCIIの対応表
付録CColab以外の環境で使用できる便利なバイナリファイル解析ツール達
索引
著者紹介
カスタマーレビュー
honto本の通販ストアのレビュー(0件)
並び順:
- 最新順
- 評価高い順
- 評価低い順
1/1ページ
最近チェックした商品
- 選択結果を選ぶと、ページが全面的に更新されます。
- 新しいウィンドウで開きます。