[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
lain-lab.com の EXE・DLL 解析ツール。ファイルを、サーバーへ送らずに、ブラウザの中だけで読みます。
lain-lab.comスタートメニューから起動
トップページのスタートメニューからも起動できます。
スクリーンショット
概要
ファイルを開くと、まず「概要」が出ます。位置のある行は、クリックすると、右の16進ダンプの該当位置へ飛びます。
文字列
ファイルの中の文字列を、一覧にします。長さ、種類、場所で、絞り込めます。
関数と逆アセンブル
左の「関数」で関数を選ぶと、右に、その関数の命令が並びます。
F1 ヘルプ
アプリの特徴
- ファイルは、サーバーへ送られません。実行もしません: 読み込みも、解析も、逆アセンブルも、ブラウザの中だけで行います
- 構造と16進ダンプが、つながっています: 左で選んだ項目の、右のバイトが光ります。値と位置と説明が、下の欄に出ます
- 検算を、取ってあります: 解析は、Python の
pefileと突き合わせました。文字列はstrings、逆アセンブルはobjdumpと、比べました - 大きいファイルでも軽く動きます: 16進ダンプは、見えている行だけを描きます。26 MB の EXE で、解析は 0.1 秒ほどです
- ふだんの画面は、シンプル: 探すときは、
F1です
まず試す
- PE Inspectorを開きます。
- EXE か DLL を、画面にドロップします。「ファイルを開く」からも選べます。自分で作った EXE や、Windows にある DLL で、かまいません。
- 左の「概要」の、セクションの表の行を、クリックします。右の16進ダンプが、そのセクションの先頭へ飛びます。
- 「構造」タブで、項目を 1 つクリックします。右のバイトが光って、下に説明が出ます。
- 「文字列」タブを開きます。ファイルの中のメッセージやパスが、読めます。
- 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 を超えると、圧縮や暗号化されたデータの可能性が高いです(画像のリソースも高く出ます) |
| IAT | Import Address Table。インポートした関数のアドレスが入る表 |
| PDB | デバッグ用の別ファイル。関数や変数の名前が入っています |
.pdata | x64 の例外情報。関数の開始位置と終了位置の一覧として、使えます |
対応していないもの
| 内容 | 扱い |
|---|---|
| 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進数のバイナリを、直接編集したいときは、バイナリエディタをお使いください。
技術記事
実装の詳細は、技術記事にまとめています。
[Astro] #182 ブラウザだけで動く EXE・DLL 解析ツール — 構造を読んで、機械語まで逆アセンブルする
ブラウザの中だけで動く、EXE・DLL の中身を読むツール PE Inspector を作りました。
lain-lab.com更新履歴
| バージョン | 日付 | 内容 |
|---|---|---|
| v1.0 | 2026/10/20 | 初回公開(概要、構造と16進ダンプの連動、ファイル全体の地図、文字列、インポート関数の位置ジャンプ、関数の一覧と x64 の逆アセンブル、F1 ヘルプ) |
クレジット
- 逆アセンブル: Capstone(BSD ライセンス)。ブラウザ用の WASM 版
@alexaltea/capstone-js(BSD-3-Clause)を使っています - PE 形式の解析、構造の一覧、文字列の抽出、ファイル全体の地図、注釈(API 名・関数)は、自作です
- 検算には、
pefile、GNU のstrings、objdumpを使いました(このツールには、含まれていません)
The Ultimate Disassembly Framework
The Ultimate Disassembler
www.capstone-engine.orgご自身で用意したファイルの権利は、それぞれの権利者にあります。PE Inspectorは、個人の制作物です。