[Web Tool] PE Inspector — EXE・DLL の中身を読む ブラウザ完結型 解析ツール

[Web Tool] PE Inspector — EXE・DLL の中身を読む ブラウザ完結型 解析ツール

概要

PE Inspectorは、ブラウザの中だけで動く、EXE・DLL の中身を読むツールです。ファイルは、サーバーへ送られません。実行もしません。バイト列として読むだけです。

「このEXEは、中に何が入っているのか」を、自分の目で確かめるために作りました。ファイルを開くと、まず概要が出ます。気になる所をクリックすると、右の16進ダンプで、その場所のバイトが光ります。ふだんの画面は、それだけで足ります。困ったときは、F1 キーを押すと、使い方が出ます。

  • 対応するファイル: PE 形式の .exe、.dll、.sys、.ocx、.scr、.cpl、.efi、.pyd、.mui。x64、x86(32bit)、ARM64 のヘッダーを読みます
  • 概要: バージョン情報、PDB のパス、セクションとエントロピー、インポート、エクスポート、リソース、署名の有無などを、1 画面で
  • 構造: ヘッダーの各項目を、値・位置・日本語の説明つきで。クリックすると、16進ダンプの該当バイトが光ります
  • 文字列: ファイルの中の文字列(ASCII、UTF-8、UTF-16。日本語も)を、一覧で
  • ファイル全体の地図: 場所ごとのエントロピー(ばらつき)と、領域の色分け
  • 関数と逆アセンブル: x64 の関数の一覧と、機械語の逆アセンブル。API の呼び出しには、名前が付きます
  • 読むだけ: ファイルを書き換えたり、保存したりは、しません

開く

インストールは不要です。下のリンクから、そのまま開けます。

スタートメニューから起動

トップページのスタートメニューからも起動できます。

PE Inspector の概要タブ。セクションの表と、インポートした関数の一覧

スクリーンショット

概要

ファイルを開くと、まず「概要」が出ます。位置のある行は、クリックすると、右の16進ダンプの該当位置へ飛びます。

PE Inspector の概要タブ。セクションの表と、インポートした関数の一覧

文字列

ファイルの中の文字列を、一覧にします。長さ、種類、場所で、絞り込めます。

文字列タブ。場所の絞り込みで、コード以外の場所が選ばれている

関数と逆アセンブル

左の「関数」で関数を選ぶと、右に、その関数の命令が並びます。

関数タブの一覧と、右の逆アセンブル。call の行に、呼び先の関数が出ている

F1 ヘルプ

F1 キーで、使い方が出ます。

アプリの特徴

  • ファイルは、サーバーへ送られません。実行もしません: 読み込みも、解析も、逆アセンブルも、ブラウザの中だけで行います
  • 構造と16進ダンプが、つながっています: 左で選んだ項目の、右のバイトが光ります。値と位置と説明が、下の欄に出ます
  • 検算を、取ってあります: 解析は、Python の pefile と突き合わせました。文字列は strings、逆アセンブルは objdump と、比べました
  • 大きいファイルでも軽く動きます: 16進ダンプは、見えている行だけを描きます。26 MB の EXE で、解析は 0.1 秒ほどです
  • ふだんの画面は、シンプル: 探すときは、F1 です

まず試す

  1. PE Inspectorを開きます。
  2. EXE か DLL を、画面にドロップします。「ファイルを開く」からも選べます。自分で作った EXE や、Windows にある DLL で、かまいません。
  3. 左の「概要」の、セクションの表の行を、クリックします。右の16進ダンプが、そのセクションの先頭へ飛びます。
  4. 「構造」タブで、項目を 1 つクリックします。右のバイトが光って、下に説明が出ます。
  5. 「文字列」タブを開きます。ファイルの中のメッセージやパスが、読めます。
  6. x64 のファイルなら、「関数」タブで関数を 1 つクリックします。右に、命令が並びます。

ファイルは、変更されません。

画面の見方

画面は、左と右に分かれています。

場所内容
左(タブ)「概要」「構造」「文字列」「関数」を切り替えます
右の上(地図)ファイル全体を横一列にした地図。クリック、ドラッグで移動します
右(16進ダンプ / 逆アセンブル)右上のボタンで切り替えます。左は位置、中央は 1 行 16 バイト、右は文字としての表示です
右の下(説明欄)選んだ場所の、値・ファイル上の位置・バイト列・説明が出ます

上のバーに、開いたファイルの名前、形式(PE32 / PE32+)、CPU、解析にかかった時間が出ます。ファイルに不審な点(壊れている、一部が読めない)があるときは、左の上に、警告が出ます。PE 形式でないファイルは、理由が出ます。

使い方

1. ファイルを開く

画面にドロップするか、「ファイルを開く」で選びます。ウィンドウのどこにドロップしても、開けます。

2. 概要

開くと、まずこれが出ます。

項目何が分かるか
ファイルの情報形式、CPU、ビルドした日時、エントリポイント(実行が始まる場所)など
バージョン情報ファイルバージョン、製品名、会社名など
ビルド情報PDB のパス、Rich ヘッダー(ビルドに使ったコンパイラなどの記録)
セクション名前、大きさ、エントロピー、権限(R=読み / W=書き / X=実行)
インポートこのファイルが、外から借りている関数
エクスポートこのファイルが、外に公開している関数(DLL)
リソースアイコンや文字列、マニフェストなど
署名署名の有無と、位置・大きさ

位置のある行は、クリックすると、右の16進ダンプの該当位置へ飛びます。

インポートの関数から、位置へ飛ぶ

インポートの、関数名をクリックしてください。その関数のアドレスが入る場所(IAT)へ飛びます。説明欄の「→ 関数名の実物へ」を押すと、関数名の文字列そのものへ飛びます。

IAT には、ファイルの中では、関数名を指す値が入っています。実行するとき、Windows が、本物のアドレスで上書きします。コードは、ここを経由して、関数を呼びます。

3. 構造

DOS ヘッダーから、各セクションまで、ヘッダーの項目を 1 つずつ読めます。

  • 項目(例: e_lfanew)をクリックすると、右の16進ダンプで、該当のバイトが光ります。下の欄に、値、位置、日本語の説明が出ます
  • グループ名(例: COFF ファイルヘッダー)をクリックすると、その範囲全体が光り、開閉もできます
  • 各セクションの「→ セクションの実体」を押すと、そのセクションの中身へ飛びます

4. ファイル全体の地図

16進ダンプの上の、横長の帯です。

場所見方
上段場所ごとのエントロピー。暗いと規則的、明るいと、ばらばらです。琥珀色は、7.2 以上で、圧縮・暗号化・画像などの可能性があります
下段領域の色分け。水色はヘッダー、青灰はセクション、桃は署名、橙はオーバーレイ(ファイルの末尾の余分なデータ)です
白い枠いま16進ダンプに見えている範囲

クリックやドラッグで、その場所へ移動できます。マウスを載せると、その場所の領域名とエントロピーが出ます。エントロピーは、1 マスの先頭 4,096 バイトだけで計算した、目安です。

5. 文字列

ファイルの中に入っている文字列(メッセージ、パス、URL、API 名など)を、一覧にします。日本語(UTF-8 / UTF-16)も拾います。行をクリックすると、16進ダンプの該当位置へ飛びます。

絞り込み説明
語句入力した語句を含むものだけにします(例: http、.dll、設定)
長さ4 / 6(初期値)/ 8 / 12 / 20 文字以上
種類ASCII、UTF-8(日本語など)、UTF-16
場所どのセクションにあるか。初期値は「コード以外の場所」

「場所」の初期値は、機械語の断片ばかりになる、実行コードのセクションを除いた状態です。実行コードの中も見たいときは、「すべての場所」を選んでください。

6. 関数と逆アセンブル

x64 の EXE・DLL で使えます。

「関数」タブに、ファイルに入っている関数の一覧(開始アドレスと大きさ)が出ます。「アドレス順」と「大きさの大きい順」を、切り替えられます。アドレスや名前で、絞り込めます(例: 「エントリ」と入れると、実行が始まる関数が出ます)。

関数をクリックすると、右が「逆アセンブル」に切り替わり、その関数の命令が並びます。

列内容
1 列目命令のアドレス
2 列目命令のバイト列
3 列目命令の名前(call、jmp、ret は色が違います)
4 列目オペランド(命令の対象)
末尾注釈

注釈は、2 種類あります。

  • → KERNEL32.dll!LoadLibraryA: インポートした API を呼んでいる所です
  • → 関数 0x…(青い下線): 別の関数を呼ぶ、または飛ぶ所です。クリックすると、その関数に移れます。右上の「← 戻る」で戻れます

命令の行をクリックすると、その命令のバイトが、16進ダンプで光ります。右上の「16進ダンプ」ボタンで、元の表示に戻せます。

関数に、名前は付きません。名前は、PDB という別のファイルにあって、EXE には、入っていないためです。名前が付くのは、エントリポイント、DLL のエクスポート、インポートした API です。

初めて逆アセンブルするときだけ、逆アセンブラ(Capstone。約 1 MB)を読み込みます。少し待つことがあります。

7. ショートカットキー

キー動作
F1ヘルプを開く / 閉じる
Escヘルプを閉じる

8. 用語

用語意味
RVAメモリに読み込んだときの、先頭からの相対位置。ファイル上の位置とは違います(セクションごとにずれます)
セクションファイルの区画。.text は実行コード、.rdata は読み取り専用のデータ、.rsrc はリソースなど
エントロピー0〜8 の「ばらつき」。7.5 を超えると、圧縮や暗号化されたデータの可能性が高いです(画像のリソースも高く出ます)
IATImport Address Table。インポートした関数のアドレスが入る表
PDBデバッグ用の別ファイル。関数や変数の名前が入っています
.pdatax64 の例外情報。関数の開始位置と終了位置の一覧として、使えます

対応していないもの

内容扱い
PE 形式でないファイル(ELF、Mach-O など)読めません。理由が出ます
パッカーで圧縮・暗号化されたファイル構造は読めても、中身は読めません。エントロピーが高く出ます。対象外です
わざと壊した構造のファイル読める所までは読みます。保証はしません
x86(32bit)・ARM の逆アセンブル未対応です。「関数」タブに、理由が出ます
.NET の中身(IL、メタデータの表)ヘッダーとバージョンだけを読みます。命令としては読みません
署名(証明書)の中身の検証できません。位置と大きさだけです
アイコンなど、リソースの取り出しできません。一覧と位置、マニフェスト、バージョン情報だけです
命令が使う文字列の表示(どの関数が、どの文字列を使うか)未対応です
ファイルの編集・保存できません。読むだけです
スマートフォンでの動作確認していません。専用の設計は、していません
Safari、Firefox での動作確認していません

注意事項

  • 動作の確認は、実機(Windows の Chrome)で、自作の EXE を開いて行いました。概要、構造、文字列、インポートの位置ジャンプ、関数の一覧、逆アセンブルは、動くことを確認しています
  • 解析の正しさは、pefile(16 個のファイルで 2,214 項目)、strings、objdump(3,313 関数・241,564 命令)との突き合わせで、確かめました
  • 日本語の文字列は、合成したファイルでは確認しましたが、実際の EXE では、確かめていません
  • 逆アセンブルで、API 名の注釈が出る行は、サンプルのファイルでは確認しています。自作の EXE では、まだ見ていません
  • 遅延インポート(必要になってから読み込む DLL)の関数名は、手元に例がなく、確かめていません
  • 関数の範囲に、ジャンプ表などのデータが混ざっていると、そこから先は、命令として読めないことがあります。読めなかったバイト数は、末尾に出ます
  • 1 つの関数は、先頭の 256 KB まで読みます
  • PDB のパスには、ビルドした人のフォルダ名(ユーザー名など)が、残っていることがあります。自分のファイルを公開する前に、概要の「ビルド情報」で、確かめてください
  • 数百 MB のファイルは、確かめていません。ファイルは、全部をメモリに読みます
  • ファイルは、ご自身が、読んでよいものを、使ってください。ファイルは、こちらでは、配っていません

よくある質問 (FAQ)

Q. ファイルは、どこかに送信されますか。
A. 送信しません。読み込みも、解析も、逆アセンブルも、ブラウザの中だけで行います。

Q. 開いたEXEが、実行されることはありますか。
A. ありません。バイト列として読むだけで、プログラムとしては動かしません。

Q. どんなファイルが読めますか。
A. PE 形式のファイルです。.exe、.dll、.sys、.ocx、.scr、.cpl、.efi、.pyd、.mui などです。読めないときは、理由が出ます。

Q. 文字列に、意味のない文字が、たくさん出ます。
A. 実行コードのセクションには、機械語が、偶然、文字に見える並びが、混ざります。「場所」の初期値は、それを除いた「コード以外の場所」です。「すべての場所」を選ぶと、出てきます。

Q. 文字列が、つながって 1 行になっています。
A. Rust で作られたプログラムは、文字列の最後に終端(0)を付けず、隙間なく並べます。そのため、バイト列だけでは、区切りが分かりません。このツールでは、分けられません。

Q. 「関数」タブに、何も出ません。
A. 関数の一覧は、x64 のファイルだけです。x86(32bit)や ARM のファイルでは、出ません。理由が、タブの中に出ます。

Q. 関数に、名前が出ません。
A. 名前は、PDB という別のファイルにあって、EXE には、入っていないためです。名前が付くのは、エントリポイント、DLL のエクスポート、インポートした API の呼び出しだけです。

Q. 逆アセンブルで、「命令として読めませんでした」と出ます。
A. 関数の範囲の中に、命令ではないデータ(ジャンプ表など)が、混ざっているためです。そこまでの命令は、読めています。

Q. エントロピーが高い(琥珀色)のは、何ですか。
A. 圧縮や暗号化されたデータ、または、画像などです。EXE の .rsrc(リソース)が高く出るのは、ふつうです。.text(コード)が高いときは、パッカーで固められている可能性があります。

Q. PDB のパスに、自分のフォルダ名が出ています。
A. ビルドしたマシンのパスが、そのまま残っているためです。公開する前に、気にしたい項目です。ビルドの設定で、変えられます。

Q. 署名が「ある」と出ましたが、正しい署名ですか。
A. このツールは、署名の位置と大きさを出すだけで、中身の検証は、しません。

Q. 結果は、ほかのツールと同じですか。
A. 解析は pefile、文字列は strings、逆アセンブルは objdump と、突き合わせて確かめています。ただし、「一致した」ことは、「正しい」ことの保証ではありません。表記が違う所もあります(例: wait と fnstcw を、2 命令に分ける)。

Q. ファイルを書き換えたり、保存したりできますか。
A. できません。読むだけのツールです。

関連

Inspector シリーズには、PDF、Office 文書、WASM、ソースコードの構文木、フォントを読むツールもあります。16進数のバイナリを、直接編集したいときは、バイナリエディタをお使いください。

技術記事

実装の詳細は、技術記事にまとめています。

更新履歴

バージョン日付内容
v1.02026/10/20初回公開(概要、構造と16進ダンプの連動、ファイル全体の地図、文字列、インポート関数の位置ジャンプ、関数の一覧と x64 の逆アセンブル、F1 ヘルプ)

クレジット

  • 逆アセンブル: Capstone(BSD ライセンス)。ブラウザ用の WASM 版 @alexaltea/capstone-js(BSD-3-Clause)を使っています
  • PE 形式の解析、構造の一覧、文字列の抽出、ファイル全体の地図、注釈(API 名・関数)は、自作です
  • 検算には、pefile、GNU の strings、objdump を使いました(このツールには、含まれていません)

ご自身で用意したファイルの権利は、それぞれの権利者にあります。PE Inspectorは、個人の制作物です。