DLL ファイルの役割
DLL ファイルはDynamic Link Libraryの略で、日本語では動的リンクライブラリと呼ばれます。Windowsのプログラムは、共通の機能、データ、リソースが必要なときにDLLを読み込むことがあります。ひとつのアプリ専用のものも、関連する複数の部品が使うものもあります。そのため、通常はインストーラーが選んだフォルダーやシステムが管理する場所に保存されています。
DLL ファイルはコンパイルされたソフトウェアであり、Word文書、画像、普通のテキストファイルではありません。ダブルクリックしても役立つ内容が表示されないのが一般的です。「プログラムから開く」が出ても、ファイルが壊れているとは限りません。DLL ファイルを開く方法を探していても、適当なアプリを選んでコードを確実に読めるようにはなりません。
DLL ファイルを開くことが目的でも、正体を確認する、埋め込みアイコンを見る、エクスポート関数を一覧する、.NETアセンブリを調べる、アプリにライブラリを読み込ませる作業は別々です。DLL ファイルを開く方法は目的に合わせて選びましょう。最初は読み取り専用にして、ファイルを元の場所から移動しないでください。
- メタデータの確認では、アプリにライブラリの機能を呼び出させず、ファイルに保存された情報を読み取ります。
- リソースビューアーでは、一部のアイコン、文字列、ダイアログを表示できる場合がありますが、プログラム全体の動作は分かりません。
- DLLをプロセスに読み込むとコードが実行される可能性があります。プロパティを見るだけの場合とは、リスクが異なります。
DLL ファイルを開く方法を目的から選ぶ
DLL ファイルを開く方法は、何を知りたいかで決まります。ファイルを調べることと、プログラムに読み込ませることは同じではありません。正体やアイコンを確かめるだけなら、読み取り専用の表示で十分です。デコンパイルやWindowsへの登録を最初に行う必要はありません。
| 確認したいこと | 最初に使う方法 | 分かる可能性がある内容 |
|---|---|---|
| 名前、場所、サイズ、バージョン | エクスプローラーのプロパティ | 基本情報と、提供元が記録したバージョン情報。 |
| 提供元や署名の状態 | Windowsの署名表示またはMicrosoft Sysinternals Sigcheck | 署名の有無と、記録されている署名者の情報。 |
| アイコンや埋め込みリソース | 信頼できるリソースビューアーの閲覧モード | ライブラリに含まれる一部の素材。内部の動作全体ではありません。 |
| ヘッダーやエクスポート関数 | PE解析ツールまたは開発ツール | 構造や公開関数。元のソースコードではありません。 |
| .NETアセンブリのメタデータ | 実績のある.NET解析ツール | 対応するアセンブリの型や中間表現。 |
| DLL不足エラーの修復 | アプリまたはランタイムを修復・再インストール | ソフトウェア提供元が案内するファイルと修復手順。 |
WindowsでDLLのプロパティを確認する
DLL ファイルを開く前に基本情報を見たい場合は、エクスプローラーで対象を探し、右クリックして「プロパティ」を選びます。「全般」には場所、種類、サイズ、日付が表示されます。「詳細」には提供元が追加したバージョン情報などが載る場合があります。項目が空でも珍しくなく、それだけで安全性は判断できません。
「デジタル署名」タブは、Windowsが署名を認識したときにだけ表示されます。詳細を開き、署名者と状態を確認します。有効な署名は、誰がファイルのデータに署名したか、署名後に変更されたかを判断する手掛かりになりますが、マルウェア判定ではありません。
- ファイルを探します。 DLLの場所と、どのアプリのフォルダーにあるかを記録します。
- プロパティを読みます。 種類、サイズ、詳細、表示される場合は署名タブを確認します。
- 照合して閉じます。 提供元と場所が想定どおりかを確認し、DLLを変更せずに閉じます。
DLLを読み込まずに署名を確認する
DLL ファイルを読み込まずに署名を確認するなら、コードを実行する必要はありません。PowerShellでAuthenticodeのメタデータを確認し、エクスプローラーで確認した正確なパスを指定してください。NotSignedは、認識できる署名が見つからなかったという意味で、直ちに悪意を示すものではありません。
Microsoft Sysinternals Sigcheckでは、バージョン、タイムスタンプ、デジタル署名、証明書チェーンを表示できます。一部のオプションはVirusTotalを照会したり、ファイルを送信したりすることがあります。共有の許可がない限り、個人用ファイルをアップロードしないでください。
PowerShellで署名を確認する
例のパスを、確認するDLLの実際のパスに置き換えます。
Get-AuthenticodeSignature -FilePath "C:\Path\example.dll" | Format-List Status,SignerCertificate
Sigcheckでメタデータを見る
既にSysinternalsがインストールされている場合に使える基本表示です。ファイルのアップロードは要求しません。
sigcheck.exe -nobanner "C:\Path\example.dll"
アイコンなどの埋め込みリソースを見る
DLL ファイルによっては、アイコン、文字列、バージョン情報、ダイアログなどが含まれています。リソースビューアーで一部を確認できることがあります。ツールは元の提供元から入手し、表示またはエクスポート機能を使います。DLLを実行、登録、編集、置換しないでください。
この表示でネイティブDLLの命令すべてが分かるわけではありません。アイコンが見つからなくても、ライブラリが空とは限りません。正体を知りたいだけなら、プロパティや署名の確認の方が簡単です。書き出したリソースは元ファイルと分けて保管しましょう。
ヘッダーやエクスポート関数を調べる
PE解析ツールでは、DLL ファイルのヘッダーやエクスポート関数を表示できます。Microsoft Visual Studioの開発者向けツールにはDUMPBINがあり、Developer Command Promptから使用できます。開発者は、既知のファイルを起動せずに構造を調べられます。
表示されるメタデータはソースコードではありません。関数名は手掛かりにすぎず、互換性を証明しません。ファイルの入手元とアーキテクチャを確かめ、出所不明のファイルは管理された環境で解析してください。
開発用の解析例
Visual Studioのツールがインストールされ、ファイルを調べる権限がある場合にだけ使います。
dumpbin /headers /exports "C:\Path\example.dll"
DLLが.NETアセンブリの場合
DLL ファイルの中には、管理された.NETアセンブリがあります。対応ツールなら、メタデータや中間表現を表示できます。ネイティブDLLとは仕組みが異なり、拡張子だけで種類を特定することはできません。
逆コンパイラーを使っても、元のプロジェクト、コメント、コンパイル設定がそのまま戻るわけではありません。調べる権利のあるソフトウェアだけを解析してください。読みやすいプレビューが表示されたからといって、出所不明のDLLを実行する理由にはなりません。
regsvr32やrundll32をDLLビューアーにしない
regsvr32とrundll32は、DLLの内容を表示するビューアーではありません。登録は自己登録型の一部のCOM部品を対象にし、rundll32は対応するエントリーポイントだけを呼び出します。任意のDLLに使うと、コードの読み込みやシステム状態の変更が起きる可能性があります。
出所不明のDLL ファイルをWindowsやアプリのフォルダーへコピーしたり、保護機能を無効にしたり、確認目的で登録したりしないでください。信頼できる提供元が登録を求める場合は、対象ファイル、アーキテクチャ、正確なコマンドを先に確認します。必要がなければ読み取り専用の方法にとどめましょう。
DLL不足エラーを直したい場合
DLL不足の警告は、ファイルを開く依頼ではなく修復が必要な状態を示します。エラー全文とアプリ名を記録し、ソフトウェア提供元からアプリとランタイムを修復または再インストールします。Windows部品の場合は、サポートされている修復機能と更新を使用してください。
同じ名前でもバージョンやアーキテクチャが異なるDLL ファイルがあります。代替をSystem32やゲームのフォルダーへコピーしないでください。この問題の修復手順は、関連ガイドで別に確認できます。
よくある質問
DLLファイルを開くにはどのプログラムを使いますか?
すべてのDLLに使える単一のプログラムはありません。ファイル情報にはプロパティ、署名には確認ツール、リソースにはビューアー、ヘッダーや関数には開発者向けツールを使います。目的に合う方法を選びましょう。
メモ帳でDLLを開いても安全ですか?
判読できないバイナリ文字が表示され、保存するとファイルを壊すことがあります。メモ帳はDLLの解析には向きません。プロパティ、署名、リソース、または読み取り専用の構造解析ツールを使ってください。
デジタル署名が有効ならDLLは安全ですか?
いいえ。有効な署名は署名者を示し、署名後にデータが変更されていないか確認する手掛かりになります。それでも、想定した提供元と保存場所かを確かめてください。
DLLを開くためにregsvr32を使うべきですか?
いいえ。regsvr32は自己登録する一部のCOM部品を登録するもので、任意のDLLを表示しません。そのファイル向けの確認済み手順を提供元が示した場合に限って使います。
同じ名前のDLLをダウンロードすれば不足エラーを直せますか?
名前だけではバージョン、アーキテクチャ、提供元、互換性を確認できません。まず要求元のアプリやランタイムを修復し、必要なファイルはソフトウェア提供元から入手します。
公式リファレンス
- Microsoft Sysinternals Sigcheck バージョン、タイムスタンプ、デジタル署名、証明書チェーンの確認に関する公式ドキュメントです。