メタモルフィックコードとは、実行時に何らかの解釈の下で自身のコードと論理的に等価なバージョンを出力するコードのことである。これはクワインに似ているが、クワインのソースコードは自身の出力と完全に等価である点が異なる。また、メタモルフィックコードは通常、自身のソースコードではなくマシンコードを出力します。
メタモルフィックコードは、コンピュータウイルスがアンチウイルスソフトウェアのパターン認識を回避するために使用します。メタモルフィックウイルスは、多くの場合、自身のバイナリコードを一時的な表現に変換し、その一時的な表現を編集してから、編集した形式を再びマシンコードに変換します。[ 1 ]この手順はウイルス自身で行われるため、メタモルフィックエンジン自体も変化し、ウイルスのどの部分も同じままではいられません。これは、ポリモーフィックエンジンが自身のコードを書き換えることができないポリモーフィックコードとは異なります。
メタモルフィックコードは、ウイルスが新しいファイルに感染する際に使用される手法で、その結果、次世代のコードは現在のコードとは全く異なるものになります。変異したコードは(使用される解釈の下では)全く同じ動作をしますが、子コードのバイナリ表現は通常、親コードのバイナリ表現とは完全に異なります。変異は、NOP命令の挿入(総当たり攻撃)、使用するレジスタの変更、ジャンプによるフロー制御の変更、マシン命令を同等の命令に変更、または独立した命令の順序変更といった手法を用いて実現できます。
変容はウイルスをヒューリスティック分析から保護するものではない。
メタモルフィックコードとは、ウイルスが2つ以上の異なるオペレーティングシステム( WindowsとLinuxなど)または異なるコンピュータアーキテクチャの実行可能ファイルに感染できることを意味する場合もあります。多くの場合、ウイルスは複数のウイルスを内部に保持することでこれを実現します。ウイルスの冒頭部分は、実行されるすべてのプラットフォームに対して正しいマシンコードに変換されるようにコード化されています。[ 2 ]これは主に、ターゲットプラットフォームが不明なリモートエクスプロイトインジェクションコードで使用されます。