HEX編集モード

HEX編集モードは、ファイルの内容を 1 バイト単位で直接書き換える機能です。
バイナリファイルの修正、ファームウェアの書き換え、ファイルフォーマットの検証・手動修正、 特定バイト列のパッチ当てなど、ファイルを「バイト列」として扱う必要があるあらゆる場面で使えます。
編集中はファイルを直接書き換えず、保存を確定するまで元のファイルは変更されません。

1. 編集モードの開始と終了

開始方法 HEX表示中(Ctrl+H でHEX表示)に、
メニュー「編集 → HEX編集モードを開始」または、HEXビュー上部の 鉛筆アイコン をクリックします。
編集モードに入ると、タイトルバーに [HEX編集中] と表示され、ビュー上部に警告帯が表示されます。
終了方法(保存して終了) メニュー「編集 → HEX編集モードを終了(保存)」または鉛筆アイコンをクリック。
保存前プレビューダイアログが表示され、内容を確認してから保存を確定できます。
終了方法(破棄して終了) メニュー「編集 → HEX編集モードを終了(破棄)」を選択すると、すべての編集内容を捨ててモードを終了します。
確認ダイアログが表示されます。
他モードへの切り替え時 HEX編集中に別のファイルを開いたり、テキスト表示に切り替えようとすると、 保存・破棄・キャンセルを選ぶ確認ダイアログが自動で表示されます。 誤って編集内容を失うことがないよう設計されています。
バックアップ 設定でバックアップ作成をONにすると、上書き保存前に .bak ファイルを自動作成します。 何かあった場合に備えて、重要なファイルの編集時はONにしておくことをお勧めします。

2. 画面の見方

HEX編集モード中の画面は大きく 3 つのエリアに分かれます。

オフセット列 各行の先頭バイトがファイル先頭から何バイト目かを 16 進数で表示します。
例: 00000010 は先頭から 16 バイト目の行です。
HEX エリア 各バイトの値を 16 進数 2 桁で表示します。
ここに直接 16 進数を入力して値を書き換えます。
16 バイト / 32 バイト表示を切り替えられます。
ASCII エリア 各バイトを印字可能文字として表示します(印字できないバイトは . で表示)。
テキスト部分の確認や、ASCII 文字を直接入力して書き換えることができます。
変更バイトの色分け 書き換えたバイト(上書き・挿入)はオレンジ系の色で表示され、元のバイトと視覚的に区別できます。
削除されたバイトは現在の表示上には現れませんが、変更一覧で確認できます。
インスペクタパネル カーソル位置のバイトを各種数値として表示します。
int8 / uint8 / int16 / uint16 / int32 / uint32 / int64 / uint64(リトルエンディアン・ビッグエンディアン)、 float32 / float64、UTC日時(Unix time)などを一覧確認できます。
編集中にカーソルを動かすとリアルタイムで更新されます。
フッターの情報 現在のファイルサイズ(編集中の長さ)、カーソルのオフセット(10進・16進)、 選択範囲のバイト数をフッターバーで確認できます。
変更カウンター タイトルバーまたは専用インジケーターに、挿入・上書き・削除のバイト数が随時表示されます。 どれだけ変更を加えたかを俯瞰で把握できます。

3. カーソル移動と選択

マウスクリック HEX エリアまたは ASCII エリアの任意のバイトをクリックするとカーソルが移動します。
キーボード移動 :1バイト / 1行移動
Ctrl+← / Ctrl+→:8バイト単位移動
Home / End:行頭 / 行末へ
Ctrl+Home / Ctrl+End:ファイル先頭 / 末尾へ
Page Up / Page Down:ページ移動
HEX ⇔ ASCII エリア切り替え Tab で HEX エリアと ASCII エリアを交互に切り替えます。
HEX エリアでは 16 進数 2 桁で入力、ASCII エリアでは印字可能文字を直接入力できます。
オフセットジャンプ Ctrl+Shift+O でオフセット入力ダイアログが開きます。
10 進数・16 進数(0x プレフィックス)どちらでも入力できます。
範囲選択 マウスドラッグ で範囲を選択します。
Shift+クリック でカーソル位置からクリック位置まで選択を拡張します。
Shift+↑↓←→ でキーボードから選択範囲を広げられます。
Ctrl+A でファイル全体を選択します。

4. 1 バイト単位の編集

最も基本的な操作です。カーソルを目的のバイトへ移動し、値を入力します。

上書きモード(既定) HEX エリアで 0〜9・A〜F を入力します。
1 文字目を入力すると上位 4 ビットが確定し、2 文字目で 1 バイト分が確定してカーソルが進みます。
例: カーソルが 3C の位置で 4 1 と入力すると 41(文字 A)に書き換わります。

ASCII エリアでは印字可能文字(スペース〜チルダ)をそのまま入力できます。 入力した文字のコードポイントが 1 バイトとして書き込まれます。
挿入モード Insert キーで上書きモードと挿入モードを切り替えます。
挿入モードでは、入力した 1 バイトがカーソル位置の直前に挿入され、 後続のバイト列が 1 バイト後ろへシフトします。ファイルサイズが 1 バイト増加します。
ステータスバーに 挿入 と表示されている間が挿入モードです。
1 バイト削除 Delete キーでカーソル位置の 1 バイトを削除します。
後続のバイト列が 1 バイト前へシフトし、ファイルサイズが 1 バイト減ります。
削除したバイトが元ファイルのデータであった場合、変更一覧の「削除」として記録されます。
元に戻す(Undo) Ctrl+Z で直前の 1 操作を取り消します。
操作単位でスタックが積まれるため、複数回押すと段階的に戻せます。
Undo は編集セッション中いつでも利用でき、最終的に「変更なし」の状態まで戻ることも可能です。

5. 範囲選択と範囲編集

複数バイトを選択してからコンテキストメニュー(右クリック)または「編集」メニューを開くと、 範囲に対する一括操作が利用できます。大量のバイトをまとめて書き換える際に便利です。

特定値で埋める(Fill) 選択範囲を指定した 1 バイトの値で埋めます。
例: 00 で埋めてゼロクリア、FF で全ビット 1 に設定、90(x86 NOP)で埋めてパッチ領域を確保、など。
Fill には Add バッファへのコピーが不要な軽量実装を使っており、数百 MB の範囲でも OOM になりません。
上限: 特に設定はなく、ファイルサイズの範囲内で実行できます。
乱数で埋める(Random Fill) 選択範囲を暗号強度の乱数(RandomNumberGenerator)で埋めます。
テスト用の無意味なバイト列を挿入したいとき、鍵領域のサニタイズ確認など。
上限: 64 MB(それ以上の選択では操作できません)。
ビット反転(Invert) 選択範囲の各バイトを bitwise NOT(ビット全反転)します。
例: AA550FF0
シンプルな XOR スクランブル解除、マスクデータの復元などに使えます。
上限: 64 MB。
エンディアン反転(Endian Swap) 選択範囲をユニットサイズ(2 / 4 / 8 バイト)ごとにバイト順を反転します。
リトルエンディアン・ビッグエンディアンが混在するデータの変換に使います。
例: 4 バイトユニットで 01 02 03 0404 03 02 01
選択範囲がユニットサイズで割り切れない端数は対象外です(切り捨て)。
上限: 64 MB。
クリップボードから貼り付け(HEX) クリップボードに HEX 文字列(48 65 6C 6C 6F48656C6C6F など)がある場合、 右クリック →「HEX 貼り付け」で解析してバイト列として書き込みます。
上書きモードでは選択範囲を置換、挿入モードではカーソル位置に挿入します。
クリップボードの HEX コピー 選択範囲を右クリック →「HEX コピー」で、選択バイトを HEX 文字列形式でクリップボードへコピーします。
スペース区切り(48 65 6C)または区切りなし(48656C)を選択できます。

6. テキストをバイト列として貼り付ける

「編集 → テキストを HEX に貼り付け」または右クリックメニューから「テキスト貼り付け(エンコード指定)」を選ぶと、 HEX テキスト貼り付けダイアログ が開きます。

使い方 テキストボックスに貼り付けたい文字列を入力し、エンコードを選択してから「挿入」または「上書き」をクリックします。
入力した文字列が選択エンコードでバイト列に変換され、カーソル位置に書き込まれます。
対応エンコード UTF-8 / UTF-16 LE / UTF-16 BE / Shift-JIS / ASCII
バイト数プレビュー ダイアログ内に「変換後バイト数: N bytes」がリアルタイムで表示されます。
実際に書き込まれるサイズを確認してから操作できます。
挿入 vs 上書き 「挿入」: カーソル位置の直前に挿入(ファイルサイズが増加)
「上書き」: カーソル位置から同バイト数を置換(ファイルサイズ変化なし)
上限 変換後のバイト数が 64 MB を超える入力はエラーになります。

7. ファイルからバイト列を挿入する

「編集 → ファイルから挿入」を使うと、別ファイルの内容全体をバイト列として カーソル位置の直前に挿入できます。
画像・バイナリ・テキストファイルなど、種類を問わず全バイトが挿入対象になります。

手順 「編集 → ファイルから挿入」→ ファイル選択ダイアログで挿入したいファイルを指定する。
挿入が完了するとステータスバーに挿入バイト数が表示されます。
上限 64 MB までのファイルを挿入できます。それを超えるファイルはエラーになります。
注意 挿入後のファイルサイズ = 元ファイルサイズ + 挿入ファイルサイズ になります。
大きいファイルを挿入する場合は、保存時のディスク空き容量にご注意ください。

8. HEX 編集中の検索

HEX 編集モード中は、まだ保存していない未保存バイト(挿入・上書き済み)も含めて検索が行われます。 元ファイル + 編集内容の現在の状態全体が検索対象です。

バイト列検索 ツールバーの検索欄に HEX 文字列(例: FF D8 FFFFD8FF)を入力して F3 / Shift+F3 で前後検索できます。
スペース区切り・スペースなしの両形式に対応しています。
ワイルドカード検索 バイト列検索で ?? をワイルドカードとして使えます。
例: FF ?? FF は「FF、任意の 1 バイト、FF」という 3 バイトのパターンを検索します。
バイナリ構造の解析や、値は違うが前後の文脈が同じ箇所を探したい場合に有用です。
テキスト検索 HEX 文字列でない通常テキストを入力すると、ファイルのエンコードに合わせて バイト列に変換してから検索します。 バイナリファイル中の ASCII / UTF-8 文字列を探したい場合に使えます。
ラップアラウンド ファイル末尾まで検索しても見つからない場合、先頭に戻って検索を続けます(ラップアラウンド)。
すべてを検索し終えた時点で「見つかりません」と表示されます。
HEX 検索/置換ダイアログ HEX 編集モード中は Ctrl+F で HEX 専用の検索/置換ダイアログを開けます。
バイト列・テキスト・ワイルドカードでの検索と、バイト列・テキストでの置換に対応しています。
参照モードでは Ctrl+F はテキストモードの詳細検索ダイアログが開きます(HEX 検索も可能)。

9. 変更内容の確認(変更一覧)

「編集 → 変更一覧を表示」または専用ボタンを押すと、現在の編集セッション全体での変更箇所が一覧で確認できます。

変更一覧ダイアログ 各変更範囲について、種別(変更 / 削除)・オフセット・バイト数・終端オフセットを一覧表示します。
変更: 上書きまたは挿入されたバイト範囲(現在のファイル座標)
削除: 元ファイルから削除されたバイト範囲(元ファイルの座標で表示)
削除行は赤みがかった文字色で表示され区別できます。
変更行をダブルクリックまたは Enter を押すと、該当オフセットへジャンプします。
統計表示 ダイアログ上部に「挿入: N bytes / 削除: N bytes / 上書: N bytes」の集計を表示します。
どれほどの変更を加えたかをバイト種別ごとに把握できます。
表示件数の上限 変更範囲が 5,000 件を超える場合は先頭 5,000 件を表示し、残りの件数を末尾に案内します。
件数自体は変更一覧を開く前の統計に正確に反映されます。

10. 保存前プレビューと上書き保存

「HEX 編集モードを終了(保存)」を選ぶと、保存の前に必ず保存前プレビューダイアログが表示されます。 内容を確認してから保存を確定するため、誤保存を防げます。

プレビューダイアログの表示内容
  • 変更件数
  • 挿入バイト数 / 削除バイト数 / 上書きバイト数
  • ファイルサイズの変化(元サイズ → 保存後サイズ、増減量)
  • 変更範囲一覧(オフセット・長さ・種別、最大 5,000 件)
変更なしの場合は「変更なし」と表示されます。
保存の仕組み 保存は temp ファイルへ書き出し → バックアップ作成(任意)→ アトミック置換 の順で行われます。
書き出し中にクラッシュしても、元ファイルは上書きされません。
書き出し完了後にファイル名を差し替えるため、中断時のファイル破損リスクを最小限に抑えています。
ディスク空き容量チェック 保存前に「保存後ファイルサイズ + バックアップサイズ + 1 MB マージン」分の空き容量を確認します。 不足している場合は保存前にエラーを表示します。
外部変更の検出 編集セッション開始後に別のアプリが同じファイルを書き換えた場合、保存時にエラーで通知します。 外部変更を上書きしてしまうことを防ぐためのチェックです。
別名保存(Save As) 「編集 → 別名で HEX 保存」を使うと、元ファイルを変更せずに現在の編集内容を別ファイルへ書き出せます。
元ファイルを保持しながら改変バージョンを作りたい場合や、比較用に取っておきたい場合に使えます。

11. 選択範囲のハッシュ計算・バイト分析

ハッシュ計算 選択範囲を右クリック →「ハッシュ計算」で、選択バイト列の MD5 / SHA-1 / SHA-256 / CRC-32 を計算してダイアログ表示します。
ファイルの改ざん確認や、パッチ前後の値の一致確認に使えます。
編集モード中の上限: 32 MB(編集内容を含むため UI スレッドで読み込みます)
非編集モード(閲覧)での上限: 256 MB
バイト頻度分析 選択範囲を右クリック →「バイト分析」で、選択範囲内の各バイト値(0x00〜0xFF)の 出現頻度をグラフ表示します。
データのエントロピーや偏りを視覚的に確認でき、暗号化・圧縮済みデータの識別、 ランダムデータか否かの判断などに役立てられます。
編集モード中の上限: 32 MB
非編集モード(閲覧)での上限: 256 MB

12. Undo(元に戻す)の詳細

操作単位 1 回の Ctrl+Z で取り消せる範囲は「1 操作」です。
1 バイト上書き、1 バイト削除、Fill(範囲一括)、ファイルから挿入なども それぞれ 1 操作として扱われ、1 回で取り消せます。
Undo の回数 編集セッション中のすべての操作を Undo できます。 Undo を繰り返すと最終的に「変更なし」の状態まで戻ります。
Redo Redo 機能はありません。Undo した後に別の操作を行うと、元の操作には戻れなくなります。
保存後の Undo 保存が完了すると Undo スタックはリセットされます。保存後の状態には戻れません。

13. 制約・注意事項

  • HEX 編集モード中はファイルが他のアプリから書き換えられないようにロックされます。
    編集を開始したら、完了するまで別ツールで同じファイルを編集しないでください。 外部から書き換えが検出された場合、保存時にエラーで通知されます。
  • 乱数埋め・Invert・Endian Swap・ファイルから挿入の最大サイズはそれぞれ異なります。
    ランダム Fill・Invert・Endian Swap は各 64 MB まで。ファイルから挿入は 64 MB まで。 テキスト貼り付けの変換後バイト数は 64 MB まで。
  • ファイルサイズが増減する操作(挿入・削除)は、構造が壊れるリスクがあります。
    特定フォーマット(EXE、DLL、ZIP、画像など)は内部のオフセット値を厳密に管理しています。 バイトを挿入・削除するとそれ以降のオフセットがズレ、ファイルが壊れる可能性があります。 オフセットの整合性はPhantisでは自動修正しないため、フォーマット仕様を理解した上で操作してください。
  • Redo はありません。 重要な編集の前にバックアップを取るか、設定でバックアップ自動作成を有効にすることをお勧めします。
  • 編集セッション中は元ファイルのファイルハンドルを保持しています。
    編集モードを終了するまで、ファイルを移動・削除することはできません。

14. HEX 編集モード ショートカット一覧

表示・移動
HEX 表示切り替えCtrl+H
オフセットジャンプCtrl+Shift+O
ファイル先頭 / 末尾へCtrl+Home / Ctrl+End
行頭 / 行末へHome / End
8 バイト単位移動Ctrl+← / Ctrl+→
HEX ⇔ ASCII エリア切り替えTab
検索
次を検索 / 前を検索F3 / Shift+F3
検索/置換ダイアログ(編集モード)Ctrl+F
ブックマーク
ブックマーク追加 / 削除Ctrl+B
次のブックマークへF2
前のブックマークへShift+F2
ブックマーク一覧右クリック →「ブックマーク一覧」
編集
元に戻す(Undo)Ctrl+Z
全選択Ctrl+A
選択範囲を拡張Shift+矢印キー
1バイト削除Delete
挿入モード切り替えInsert
HEX コピーCtrl+C(HEX エリア選択中)
HEX 貼り付けCtrl+V(クリップボードが HEX 文字列の場合)
テキストを HEX に貼り付け右クリック → テキスト貼り付け
Fill / 乱数 / Invert / Endian Swap選択してから右クリック →「範囲編集」サブメニュー
ファイルから挿入メニュー「編集 → ファイルから挿入」
変更一覧を表示メニュー「編集 → 変更一覧」
セッション
HEX編集モード終了(保存)メニュー「編集 → HEX編集モードを終了(保存)」または鉛筆ボタン
HEX編集モード終了(破棄)メニュー「編集 → HEX編集モードを終了(破棄)」
キー操作一覧F1(編集モード中)
すべてのショートカットは設定画面の「キー」タブで変更・確認できます。

15. HEX ブックマーク

HEX ブックマークは、バイト単位でファイル内の位置に印を付ける機能です。
テキストモードの行ブックマークと同様に、重要なバイト位置を素早く行き来できます。
ブックマーク情報はファイルごとに JSON として保存され、次回起動後も復元されます。

追加 / 削除 カーソルを目的のバイトに合わせて Ctrl+B を押します。
ブックマーク済みのバイトでもう一度 Ctrl+B を押すと削除されます。
右クリックメニューの「ブックマーク」からも操作できます。
ジャンプ F2 で次のブックマーク、Shift+F2 で前のブックマークへジャンプします。
ブックマークが1件もない場合はメッセージが表示されます。
表示マーカー ブックマークされたバイトの直下に下線マーカーが表示されます(テーマのブックマーク色で描画)。
そのバイトが含まれる行の左端バーも色付きで表示されるため、スクロール中でもひと目でわかります。
コメント ブックマーク設定時にコメントを付けることができます。
後から右クリック →「コメントを編集」または一覧ダイアログからも編集できます。
ブックマーク一覧 右クリック →「ブックマーク一覧」でダイアログが開きます。
オフセット(16 進・10 進)・プレビュー(ブックマーク位置バイトを [XX] 形式で強調)・コメントを一覧表示し、 ジャンプ・コメント編集・削除が行えます。
保存先 ブックマークはアプリのユーザーデータフォルダ内の bookmarks/ ディレクトリに、 ファイルパスのハッシュを付与した *.hex.bookmarks.json として保存されます。
テキストモードのブックマークとは別ファイルで管理されます。

16. よくある使い方例

ファイルの先頭数バイト(マジックナンバー)を確認・修正したい Ctrl+Home で先頭へ移動 → 目的のバイトにカーソルを合わせ → 16 進数を入力して上書き。
保存前プレビューで変更箇所を確認してから保存します。
特定のバイト列を検索してパッチを当てたい 検索欄に対象バイト列を HEX で入力 → F3 でヒット → カーソル移動 → 新しい値を入力して上書き。
F3 で次の箇所を探すことも可能です。
特定の領域をゼロクリアしたい 対象範囲をマウスドラッグまたは Shift+クリック で選択 → 右クリック →「特定値で埋める(Fill)」→ 値 00 を指定して実行。
文字列を別の文字列に置換したい(同バイト数) 検索欄に対象文字列を入力して F3 で位置を特定 → ASCII エリアへ移動 → 上書きモードで新しい文字列を入力(同じバイト数になるよう注意)。
バイナリの中にある特定の構造を確認したい HEX 構造ビュー(左パネル)でフォーマットが認識されている場合、ツリーから該当フィールドをクリックすると その位置へジャンプします。インスペクタで数値解釈も確認できます。
2つのファイルのバイト列を比較したい ウィンドウを 2 枚開き(Ctrl+Shift+N で新規ウィンドウ)、 それぞれ別ファイルをHEX表示で開いて同期スクロールをONにすると、 同じオフセット位置を並べて目視比較できます。

17. 関連ページ

おすすめ書籍・アイテム