セキュリティソフトでは、Windowsが公開しているAPIに割り込みを行う「APIフック」という手法がしばしば採用されています。
SKYSEA Client Viewでもこれを採用しています。
「APIフック」とは、Windowsが公開しているAPI、例えば、CreateProcessW APIがコールされた場合に、自社製品のコードを実行させて、ログを取得したりパラメータ内容をチェックしたりする手法です。
具体的には、kernelbase.dllで公開されているCreateProcessW APIの先頭を書き換え、自社製品のコードにジャンプさせて実装されています。
以下がCreateProcessWの先頭がジャンプ命令に書き換わっている様子です。
アセンブラのジャンプ命令は数多く種類がありますが、奇妙なことに各社のセキュリティソフトは同じ種類のジャンプ命令(0xE9)を使っています。
なぜでしょうか?
それは、他のセキュリティソフトと相性問題を起こしにくいからです。
APIフックは、自社の処理を行った後、待避したオリジナルのコードを実行して元の場所に戻さなければなりません。
戻る場所は、ジャンプ命令のサイズとオリジナルのアセンブラのサイズによって決まります。
もし、複数のセキュリティソフトが同じAPIにフックをかけた場合、ジャンプ命令の長さが異なると致命的な問題が発生する場合があります。
戻る位置は、ジャンプ命令のサイズによって変化するため、長いジャンプ命令を書き込まれると、こちらは書き換えられた途中に戻ってしまってクラッシュします。
逆に短いジャンプ命令を使われると、こちらがその場所以降を書き換えてしまうのでクラッシュします。
ジャンプ命令が5バイトである「E9 XX XX XX XX」はちょうど使い勝手もよく、相性問題回避の効果もあり、このジャンプ命令を採用する製品が多い理由となっています。