The Backyard - DllLoadOrder Diff
- Added parts are displayed like this.
- Deleted parts are displayed
like this.
!Win32のDLLロード順序
DLLのロードについては、
*複数バージョン混在による問題(いわゆるDLLヘル)
*トロイの木馬による挿げ替え(キーロガーなど)への対策
*システム配備者による意図的な挿げ替え(アプリケーションの異常判定)
*システム的な整合性の保持(共有メモリーの利用)
などのさまざまな観点から、Windowsのサービスパックのレベルで変更が行われることがある。
また、アプリケーション側でも、動的ロード([[LoadLibrary|http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/loadlibrary.asp]]/[[GetProcAddress|http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getprocaddress.asp]])、静的ロード(リンク時にimportライブラリを指定)、さらに静的ロードでの遅延ロード、マニフェストによる指定などの種々の方法によって制御できたりできなかったりする。
ここでは、DLLのロードに関する資料へのポインタを示す。
!!MSDN
!!!KnownDLLs
[[INFO: Windows NT/2000/XP Uses KnownDLLs Registry Entry to Find DLLs|http://support.microsoft.com/kb/164501/en-us]]
KnownDLLsキーは、共用メモリーなどを利用しているため、全プロセスで同一インスタンスの利用が必要なDLLを特定するために設定されている。
Windows Vistaでは、ブート時にKnownDLLsに登録されたDLLが参照するDLLもKnownDLLsとして扱うように変更されている。
!!!SafeDllSearchMode
[[Dynamic-Link Library Search Order|http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/dynamic-link_library_search_order.asp]]
SafeDllSearchModeキーによる制御は、カレントディレクトリの参照優先順位を下げることで、トロイの木馬などによる挿げ替えを防止することが目的と考えられる。
!!NyaRuRuさんのページ
!!![[DLLの闇|http://d.hatena.ne.jp/NyaRuRu/20060715/p2]]
DLLのロード問題に関するNyaRuRuさんの言及へのポインタ。
!!![[ DirectX Graphicsの隠し設定を利用した開発テクニック|https://codezine.jp/a/article.aspx?aid=235&p=1]]
DirectX APIはDLLとして提供されているため、DLL操作に関する種々のテクニックに言及されている。
*[[プロセス終了処理とDLL_PROCESS_DETACH|https://codezine.jp/a/article.aspx?aid=235&p=3#col9]]
**DLLEntryで呼び出し可能なAPIが限定されていることに関する注意
!!![[DLL検索順序(1)|http://d.hatena.ne.jp/NyaRuRu/20040931/p2]]
SafeDllSearchModeやSetDllDirectory APIについて。
!!![[Side-by-Side|http://d.hatena.ne.jp/NyaRuRu/20040923]]
Side-by-Sideについて調べられたこと。
!!![[GDI+セキュリティFIX……|http://d.hatena.ne.jp/NyaRuRu/20040915]]
GDI+セキュリティFIXによるDLL置き換えによって発生した問題に関する調査。
!!![[APIフック|http://d.hatena.ne.jp/NyaRuRu/20040614/p3]]
APIフックに関する話題。
!!![DLL!!![[DLLの闇 (2)|http://d.hatena.ne.jp/NyaRuRu/20060716/p1](2)|http://d.hatena.ne.jp/NyaRuRu/20060716/p1]]
Dependency Walker の使い方など。
!!DependencyWalker
[[Dependency Walker|http://dependencywalker.com/]]
DLLやEXEファイルが依存するDLLを調査するための最も重要なツール。
Visual Studioにも付属しているが、最新版は作者のSteve P. Millerのページに置かれている。
!!APIHijack
[[APIHijack|http://www.codeproject.com/dll/apihijack.asp]]
DLLにフックを埋め込む
[[Win32 API hooking: Another reason why it might not work|http://www.codeproject.com/dll/Win32APIHooking_Trouble.asp]]
上記に関連して。直接IATを参照せずにローダーファンクション(と仮称する)経由で呼び出されることがあるということを示す。
DLLのロードについては、
*複数バージョン混在による問題(いわゆるDLLヘル)
*トロイの木馬による挿げ替え(キーロガーなど)への対策
*システム配備者による意図的な挿げ替え(アプリケーションの異常判定)
*システム的な整合性の保持(共有メモリーの利用)
などのさまざまな観点から、Windowsのサービスパックのレベルで変更が行われることがある。
また、アプリケーション側でも、動的ロード([[LoadLibrary|http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/loadlibrary.asp]]/[[GetProcAddress|http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getprocaddress.asp]])、静的ロード(リンク時にimportライブラリを指定)、さらに静的ロードでの遅延ロード、マニフェストによる指定などの種々の方法によって制御できたりできなかったりする。
ここでは、DLLのロードに関する資料へのポインタを示す。
!!MSDN
!!!KnownDLLs
[[INFO: Windows NT/2000/XP Uses KnownDLLs Registry Entry to Find DLLs|http://support.microsoft.com/kb/164501/en-us]]
KnownDLLsキーは、共用メモリーなどを利用しているため、全プロセスで同一インスタンスの利用が必要なDLLを特定するために設定されている。
Windows Vistaでは、ブート時にKnownDLLsに登録されたDLLが参照するDLLもKnownDLLsとして扱うように変更されている。
!!!SafeDllSearchMode
[[Dynamic-Link Library Search Order|http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/dynamic-link_library_search_order.asp]]
SafeDllSearchModeキーによる制御は、カレントディレクトリの参照優先順位を下げることで、トロイの木馬などによる挿げ替えを防止することが目的と考えられる。
!!NyaRuRuさんのページ
!!![[DLLの闇|http://d.hatena.ne.jp/NyaRuRu/20060715/p2]]
DLLのロード問題に関するNyaRuRuさんの言及へのポインタ。
!!![[ DirectX Graphicsの隠し設定を利用した開発テクニック|https://codezine.jp/a/article.aspx?aid=235&p=1]]
DirectX APIはDLLとして提供されているため、DLL操作に関する種々のテクニックに言及されている。
*[[プロセス終了処理とDLL_PROCESS_DETACH|https://codezine.jp/a/article.aspx?aid=235&p=3#col9]]
**DLLEntryで呼び出し可能なAPIが限定されていることに関する注意
!!![[DLL検索順序(1)|http://d.hatena.ne.jp/NyaRuRu/20040931/p2]]
SafeDllSearchModeやSetDllDirectory APIについて。
!!![[Side-by-Side|http://d.hatena.ne.jp/NyaRuRu/20040923]]
Side-by-Sideについて調べられたこと。
!!![[GDI+セキュリティFIX……|http://d.hatena.ne.jp/NyaRuRu/20040915]]
GDI+セキュリティFIXによるDLL置き換えによって発生した問題に関する調査。
!!![[APIフック|http://d.hatena.ne.jp/NyaRuRu/20040614/p3]]
APIフックに関する話題。
Dependency Walker の使い方など。
!!DependencyWalker
[[Dependency Walker|http://dependencywalker.com/]]
DLLやEXEファイルが依存するDLLを調査するための最も重要なツール。
Visual Studioにも付属しているが、最新版は作者のSteve P. Millerのページに置かれている。
!!APIHijack
[[APIHijack|http://www.codeproject.com/dll/apihijack.asp]]
DLLにフックを埋め込む
[[Win32 API hooking: Another reason why it might not work|http://www.codeproject.com/dll/Win32APIHooking_Trouble.asp]]
上記に関連して。直接IATを参照せずにローダーファンクション(と仮称する)経由で呼び出されることがあるということを示す。