W32.Changeup は Visual Basic で書かれたポリモーフィックワームです。ポリモーフィックワームは数多く存在しますが、Visual Basic で書かれたポリモーフィックワームは、とても稀です。今回は、W32.Changeup がどのようにポリモーフィックエンジンを実装しているのかを解析しました。 まず、このワームが実行された時、まずは自身のあるフォームから LinkTopic を取得します。この LinkTopic に W32.Changeup が利用するフォーム名やモジュール名のベースとなる文字列が記録されていて、感染する度にこの文字列がランダムに変化します。 次にこの LinkTopic の文字列に “x” を足した文字列を自分の自身のファイルの中から探します。この文字列が見つかったアドレスの次のバイトの位置に 2525 バイトの暗号化データが置かれています。バイナリのイメージは以下のようになります。ハイライトされている部分が LinkTopic に設定されている文字列です。 この領域は元々画像が収められているべき領域なのですが、実際には画像ではなく、このワームが利用する文字列を RC4 で暗号化したデータが収められています。この画像は非表示に設定されたフォームの中にあり、実際に画像として利用されることはありません。 このワームが次に行うことは、この領域を暗号解除することです。この領域には、このワームが利用する Windows API の関数名などもこの領域に格納されていて、この領域の暗号が解かれるまで、このワームは限られた Windows API のみを利用して動作します。 一つ興味深いことは、この領域に含まれる文字列から文字を細切れに集めてきて、接続先の URL を動的に作成していることです。接続先のホストを隠すための細工だと思われます。具体的には以下の図に示すようなコードが使われています。 画像領域の暗号が解かれた後は、このワームに実装されている以下のような悪意のあるコードが実行されます。