Application Compatibility (Shim)とは
Windowsシステム上で実行されるプログラムの互換性に関する問題を解消するための仕組みです。Application Compatibility (Shim)の存在によって、例えばWindows XPでしかサポートされていないプログラムをWindows 7 で動かすことができます。
通常、アプリケーションはWindowsと直接やりとりを行います。Application Compatibility (Shim)はアプリケーションとWindowsの間に入り、両者のやりとりを仲介することによって、プログラムの互換性に関する様々な問題を解消します。
例えば、Windows XPでしかサポートされていないアプリケーションをWindows 7で実行したとします。アプリケーションはまず、実行環境を確認するためWindowsのバージョンを尋ねるAPIコールを送ります。通常ならばこのAPIコールはWindowsに直接送られ、それに対してWindowsは「バージョンはWindows 7です」と回答するでしょう。その時点でアプリケーションはそれ以上処理を進めずに終了してしまいます。
Application Compatibility (Shim)を活用すれば、アプリケーションから送られたバージョン確認のAPIコールはWindowsではなくApplication Compatibility (Shim)によって処理されます。ここで、Application Compatibility (Shim)が「バージョンはWindows XPです ( 本当はWindows 7だけど 😛 )」と回答すると、それを受けてアプリケーションは実行を継続します。
Application Compatibility (Shim)の概要についてはここが詳しいです。
上記はあくまで一例です。ユーザーは任意のShim database (sdb) ファイルを作成することによって様々な動作を定義することができます。
便利な仕組みですが悪用されることもあります。例えば、ブラウザ・アプリケーションに悪意のあるDLLを読み込ませるようなShim databaseを作成することも可能なのです。
以上。
参考URL
https://docs.microsoft.com/en-us/windows/desktop/DevNotes/application-compatibility-database
https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-7/dd837644(v=ws.10)
https://www.fireeye.com/blog/threat-research/2015/06/caching_out_the_val.html
https://www.fireeye.com/blog/threat-research/2015/10/shim_shady_live_inv/shim-shady-part-2.html
https://www.fireeye.com/content/dam/fireeye-www/services/freeware/shimcache-whitepaper.pdf