久しぶりDLLインジェクションをしようとおもったのですが、
DLLのロードがsysWOW64内のuser32.dllから始まるため、
それ以降の呼び出しはすべてsysWOW64内のDLLを使うせいで
自作のDLLを挿入する隙がありませんでした。
置換する目標であるSHELL32.DLLまでの呼び出しは以下のとおりでした。
(dependencywalkerにて確認)
USER32.DLL
ADVAPI32.DLL
WINTRUST.DLL
CRYPT32.DLL
USERENV.DLL
SHELL32.DLL
おそらく、OSがアプリケーションが32bit版であることを察知してsysWOW64フォルダにあるDLL群をロードさせることが
原因だと思うのですが、それを回避して自作DLL(SHELL32.dll)を本物の代わりに読み込ませることができるでしょうか?
読み込ませたいアプリケーションと、偽DLL(SHELL32.dll)まで必要な上記DLLを同じフォルダに入れて実行してみたところ
sysWOW64内のUSER32.DLLが呼び出されたためか、以降のDLLがsysWOW64由来のものになり
自作DLLの挿入がうまくいきませんでした。
さすがに、"C:\Windows\SysWOW64\SHELL32.DLL"を偽DLLで上書きするのは影響が大きすぎるので避けたいと思います。
DLLインジェクションをしたいが、WOW64に阻まれる
Re: DLLインジェクションをしたいが、WOW64に阻まれる
いろいろと試してみたのですが、私には無理そうでした、sysWOW64を置換するより他思いつきません。
一応これでトピックは閉じさせて頂きます。
ありがとうございました。
一応これでトピックは閉じさせて頂きます。
ありがとうございました。
Re: DLLインジェクションをしたいが、WOW64に阻まれる
DLLインジェクションが脆弱性だということで、システムDLLは絶対パスで読み込む(システムディレクトリ以外からは読み込まない)ようになっているはずです。
著名なアプリケーションの多くも特定のディレクトリ以外からDLLを読み込まないよう対策するようになっています。
著名なアプリケーションの多くも特定のディレクトリ以外からDLLを読み込まないよう対策するようになっています。