Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
platform_external_gptfdisk_AOSP10_r33_CVE-2021-0308 | Kitploit
ツール/GitHubGitHub/trinadh465/platform_external_gptfdisk_aosp10_r33_cve-2021-0308
汎用ユーティリティ脆弱性分析エクスプロイトフォレンジックデータ復旧バイナリ解析
GitHubtrinadh465/platform_external_gptfdisk_aosp10_r33_cve-2021-0308

platform_external_gptfdisk_AOSP10_r33_CVE-2021-0308

リポジトリを見る

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
14年前未レビュー

GPT fdisk(別名 gdisk、cgdisk、sgdisk)と FixParts Roderick W. Smith 著、[email protected]

はじめに

このパッケージには、関連する 4 つのディスクパーティショニングプログラムのソースコードが含まれています。

  • gdisk -- このプログラムは Linux の fdisk をモデルにしていますが、fdisk が変更するマスターブートレコード(MBR)ディスクではなく、GUID パーティションテーブル(GPT)ディスクに対して動作します。したがって、gdisk はパーティションを操作するための対話型テキストモードツールですが、それらのパーティションの内容(通常はファイルシステム、場合によってはスワップ領域やその他のデータ)には一切変更を加えません。

  • cgdisk -- このプログラムは Linux の cfdisk をモデルにしていますが、cfdisk が変更する MBR ディスクではなく、GPT ディスクに対して動作します。したがって、cgdisk は curses ベースのテキストモードツールであり、gdisk が使用するコマンド文字とスクロール表示ではなく、矢印キーと動的表示に依存するインターフェイスを使用します。

  • sgdisk -- このプログラムは概念的には Linux の sfdisk や FreeBSD の gpt プログラムに似ていますが、動作の詳細は異なります。コマンドラインオプションを使用して GPT ディスクを操作できるため、スクリプトでの使用や、gdisk では複数のコマンドを必要とする特定のタスクを実行する専門家に適しています。

  • fixparts -- このプログラムは、前の 3 つとは異なり、MBR ディスクに対して動作します。さまざまなユーティリティによって発生する可能性のある特定の問題を修正することを目的としています。具体的には、サイズが誤った拡張パーティションと、拡張パーティションの途中に配置されたプライマリパーティションを修正できます。また、プライマリパーティションと論理パーティションのステータスの変更(MBR 方式で合法的な範囲内で)や、その他いくつかの小さな変更も可能です。新しいパーティションの作成はサポートしていません。その場合は、fdisk、parted、または他のツールを使用してください。

これらのツールの機能の詳細については、以下で説明します。

4 つのプログラムはすべて同じ基盤となるコードベースに依存しています。異なるのは、それぞれの制御インターフェイス(それぞれ gdisk.cc、cgdisk.cc、sgdisk.cc、fixparts.cc で定義)と、使用するサポートコードだけです。

GPT fdisk(gdisk、cgdisk、sgdisk)の詳細

gdisk プログラムは、GPT パーティショニングされたディスク用の(ある意味)fdisk 互換プログラムとして意図されており、cgdisk も同様に fdisk の互換プログラムであり、sgdisk は gdisk の機能のほとんどを、よりスクリプトに適したプログラムとして提供します。libparted およびそれを使用するプログラム(GNU Parted、gparted など)は GPT ディスクを処理する機能を提供しますが、gdisk が克服するいくつかの制限があります。gdisk、cgdisk、sgdisk の具体的な利点は次のとおりです。

  • MBR パーティショニングされたディスクを、データを失うことなくその場で GPT 形式に変換する機能

  • BSD ディスクラベルをその場で変換して GPT パーティションを作成する機能。データは失われません。

  • GPT 形式から MBR 形式へのデータ損失なしの変換機能(gdisk と sgdisk のみ)

  • GNU Parted が破損させがちなファイルシステムタイプコード GUID のより柔軟な指定

  • ディスク上の未割り当てセクタ数の明確な識別

  • Linux の fdisk と cfdisk を長年使用しているユーザーに親しみのあるユーザーインターフェイス(gdisk と cgdisk のみ)

  • MBR ブートローダーコードはそのまま残される

  • ハイブリッド MBR を作成する機能。これにより、GPT を認識しない OS がディスク上の最大 3 つの GPT パーティションにアクセスできるようになります(gdisk と sgdisk のみ)

もちろん、GPT fdisk にも制限がないわけではありません。最も顕著なのは、GParted のようなファイルシステム認識やファイルシステム関連機能が欠けていることです。たとえば、パーティションのファイルシステムのサイズを変更したり、gdisk でファイルシステムが既にあるパーティションを作成したりすることはできません。gdisk には GUI バージョンはありません。

GPT fdisk パッケージは 3 つのプログラムファイルを提供します。対話型テキストモードの gdisk、curses ベースの対話型 cgdisk、コマンドライン駆動の sgdisk です。最初の 2 つは、ディスクの手動パーティショニングやパーティショニング詳細の変更を目的としています。sgdisk は、ディスクのクローン作成や Linux インストール用の複数ディスクの準備などのタスクを自動化するスクリプトでの使用を目的としています。

FixParts の詳細

このプログラムの作成は、さまざまなバグのあるパーティショニングツールによってパーティションテーブルが破損したというユーザーのオンラインフォーラムでの助けを求める声によって動機付けられました。ほとんどの OS は影響を受けたディスクを処理できますが、libparted ベースのツール(GParted、parted、ほとんどの Linux インストーラなど)は、これらのディスクを提示されると誤動作する傾向があります。典型的な症状は、パーティションが存在しないように見えるディスクです。ただし、libparted ツールが OS が認識するもの以外のパーティションを提示することがあります。

私はこれらの症状の 4 つの原因を観察しましたが、そのうち 3 つは FixParts で修正できます。

  • 古い GPT データ -- ディスクが GPT ディスクとして使用され、その後 MBR ディスクとして再利用されると、GPT データが不完全に消去される可能性があります。これは、たとえば、ディスクが fdisk または Microsoft Windows インストーラで再パーティショニングされた場合に発生します。(libparted ベースのツールは、GPT から MBR 形式に変換するときに古い GPT データを正しく削除します。)FixParts は、起動時にこの問題をチェックし、修正を提案します。GPT データを消去することを選択した場合、この消去はプログラムが行う他の変更とは異なり、即座に実行されます。

  • サイズが誤った拡張パーティション -- 一部のツールは、大きすぎる拡張パーティションを作成します。通常はディスクの最後のセクタより後に終わります。FixParts は、'w' オプションを使用してパーティションテーブルを保存すると、この問題を自動的に修正します。

  • 拡張パーティション内のプライマリパーティション -- 一部のユーティリティは、拡張パーティションがカバーする範囲内にプライマリパーティションを作成または移動します。FixParts は通常、プライマリパーティションを論理パーティションに変換するか、1 つ以上の他の論理パーティションをプライマリに変更することで、この問題を修正できます。ただし、そのような修正は常に可能であるとは限りません。少なくとも、他のパーティションを削除またはサイズ変更せずに修正することはできない場合があります。

  • 残存 RAID データ -- ディスクが RAID アレイで使用され、その後非 RAID ディスクとして再利用されると、一部のユーティリティが混乱し、ディスクを認識できないことがあります。FixParts はこの問題を修正できません。この問題を修正するには、古い RAID データを破棄するか、システムから dmraid パッケージを削除する必要があります。

実行すると、FixParts は fdisk 風のインターフェイスを表示し、パーティションタイプ(プライマリ、論理、または省略)の調整、タイプコードの変更、起動可能フラグの変更などを行うことができます。パーティションを削除することはできますが(省略することにより)、プログラムで新しいパーティションを作成することはできません。ディスクのパーティショニング、特に Linux fdisk に慣れている場合、FixParts の 2 つの珍しい機能について詳しく説明する必要があります。

  • 拡張パーティションなし -- 内部的に、FixParts はパーティションテーブルを読み取り、見つけた拡張パーティションのデータを破棄します。パーティションテーブルを保存すると、プログラムは新しい拡張パーティションを生成します。この設計により、プログラムは拡張パーティションに関連する多くの問題を自動的に修正します。また、FixParts のユーザーインターフェイスに拡張パーティションの証拠が表示されないことも意味しますが、要件を追跡し、2 つの論理パーティションの間のプライマリなど、不正なレイアウトを作成できないようにします。

  • パーティション番号 -- ほとんどの Linux ツールでは、パーティション 1〜4 はプライマリで、パーティション 5 以降は論理です。FixParts にロードされた正当なパーティションテーブルは最初はこの規約に準拠していますが、一部の種類の破損したテーブルは準拠しない場合があり、行うさまざまな変更によっても逸脱が発生する可能性があります。FixParts がパーティションテーブルを書き込むとき、その番号は標準の MBR 規約に準拠するように変更されますが、パーティションのステータスを判断するには、パーティション番号ではなく、パーティションのプライマリまたは論理としての明示的なラベルを使用する必要があります。

インストール

GPT fdisk をコンパイルするには、適切な開発ツールがインストールされている必要があります。最も顕著なのは GNU Compiler Collection(GCC)とその C++ 用コンパイラ g++ です。また、Clang でのコンパイルもテストしましたが、これも動作するようです。ただし、いくつかの基本事項を確認する以外に、結果のバイナリの広範なテストは行っていません。Windows では、代わりに Microsoft Visual C++ 2008 を使用できます。さらに、次の要件に注意してください。

  • Linux、FreeBSD、OS X、Solaris では、libuuid をインストールする必要があります。これは Linux と OS X の標準ですが、ヘッダを取得するには uuid-dev またはそれに類似したパッケージをインストールする必要がある場合があります。FreeBSD では、e2fsprogs-libuuid ポートをインストールする必要があります。

  • Unicode パーティション名のサポートを提供する ICU ライブラリ(http://site.icu-project.org)は、Windows 以外のすべてのプラットフォームでオプションです。Windows ではサポートされていません。このライブラリの使用は、GPT fdisk バージョン 0.8.9 より前で適切な UTF-16 パーティション名サポートを得るために必要でしたが、そのバージョン以降は不要になったはずです。それでも、新しい UTF-16 サポートに問題がある場合は、これを使用できます。このライブラリは通常 Linux と OS X にインストールされていますが、開発ヘッダ(Linux では libicu-dev または類似のもの、OS X では libicu36-dev Fink パッケージ)をインストールする必要がある場合があります。ICU サポートでコンパイルするには、Makefile を変更する必要があります。USE_UTF16、-licuuc、-licudata、または -licucore を参照するコメントアウトされた行を探し、それらの行のコメントを解除し、これらの行を含まない同等の行をコメントアウトしてください。

  • cgdisk プログラムには、ncurses ライブラリとその開発ファイル(ヘッダ)が必要です。ほとんどの Linux ディストリビューションは ncurses をデフォルトでインストールしますが、ヘッダファイルを取得するには libncurses5-dev、ncurses-devel、または類似のパッケージをインストールする必要がある場合があります。これらのファイルは私の Mac OS X 開発システムには既にインストールされていました。ただし、私がインストールした他のプログラムの依存関係としてインストールされた可能性があります。ncurses のインストールに問題がある場合は、コンパイルするターゲットのみを make に指定して、cgdisk なしで gdisk や sgdisk をコンパイルできます。

  • sgdisk プログラムには、popt ライブラリとその開発ファイル(ヘッダ)が必要です。ほとんどの Linux ディストリビューションは popt をデフォルトでインストールしますが、ヘッダファイルを取得するには popt-dev、popt-devel、または類似のパッケージをインストールする必要がある場合があります。Mac OS ユーザーは、Darwin Ports(http://popt.darwinports.com)または Fink(http://www.finkproject.org)から Mac OS 用の popt のバージョンを見つけることができます。ただし、最初に DarwinPorts または Fink をインストールする必要があります(手順は関連プロジェクトのページにあります)。あるいは、sgdisk なしで gdisk や cgdisk だけをコンパイルすることもできます。gdisk は popt を必要としません。

必要な開発ツールとライブラリがすべてインストールされたら、パッケージを解凍し、結果のディレクトリでコマンドプロンプトに "make" と入力します。(Mac OS X では "make -f Makefile.mac"、FreeBSD では "make -f Makefile.freebsd"、Solaris では "make -f Makefile.solaris"、または Windows 用に MinGW を使用してコンパイルするには "make -f Makefile.mingw" と入力する必要がある場合があります。)また、CXXFLAGS 環境変数を設定するか、Makefile を編集して、ヘッダ(インクルード)ディレクトリやライブラリディレクトリを追加する必要がある場合もあります。結果として、gdisk、cgdisk、sgdisk、fixparts というプログラムファイルが作成されるはずです。"make gdisk"、"make cgdisk"、"make sgdisk"、または "make fixparts" と入力すると、要求されたプログラムのみがコンパイルされます。これらのプログラムをその場で使用するか、/usr/local/sbin などの適切なディレクトリにファイルをコピーできます。マニュアルページ(gdisk.8、cgdisk.8、sgdisk.8、fixparts.8)を /usr/local/man/man8 にコピーして利用可能にすることもできます。

注意事項

このソフトウェアはベータ版です!ハードディスクが消去されたり、猫が食べられたりしても、私のせいにしないでください!これまでに、QEMU と VirtualBox 環境の複数の USB フラッシュドライブ、物理ハードディスク、仮想ディスクでソフトウェアをテストしてきました。現在では、多くの他のユーザーも自分のコンピュータでこのソフトウェアを使用しています。すべてのデータ破損バグは修正されたと信じていますが、何かを見落とす可能性が高いこともよくわかっています。これは特に大容量(2TiB 超)ドライブに当てはまります。そのようなディスクでの直接テストは、仮想 QEMU および VirtualBox ディスクのみです。ただし、2TiB を超える RAID アレイでの成功報告はユーザーから受け取っています。

私の主な開発プラットフォームは、64 ビット版の Gentoo Linux を実行するシステムです。また、他のいくつかの 32 ビットおよび 64 ビット Linux ディストリビューション、Intel ベースの Mac OS X 10.5 および 10.6、64 ビット FreeBSD 7.1、Windows 7 でもテストしました。

再配布

このプログラムは GNU GPL の条件の下でライセンスされています(ファイル COPYING を参照してください)。

謝辞

このコードはほとんど私自身のものですが、他の 2 つの GPL プログラムから 3 つの関数を使用しています。

  • CRC を生成するために使用されるコードは、Krzysztof Dabrowski と ElysiuM deeZine による efone プログラムから取られています。(crc32.h および crc32.cc のソースコードファイルを参照してください。)

  • ディスクサイズを検出する関数は、A. V. Le Blanc による Linux fdisk から取られています。このコードはその後大幅に変更されています。

追加のコード貢献者には以下が含まれます:

  • Yves Blusseau ([email protected])

  • David Hubbard ([email protected])

  • Justin Maggard ([email protected])

  • Dwight Schauer ([email protected])

  • Florian Zumbiehl ([email protected])

  • Guillaume Delacour(gdisk_test.sh スクリプトを提供)

ツールをダウンロード