IMHO、テストウィルスのポイントは、無害であることが知られており、エンドユーザーがAVソフトウェアがオンになっていることを確認できるようにウイルスとして受け入れられるものですウイルス識別の効果を見ることができます。 AVソフトウェアのファイアドリルを考えてみましょう。
私は、ほとんどがそのための署名を持っていて、それを直接そのように認識していると思います。
実際のEICARテストのビットパターンに、疑わしいアクティビティのオペコードのような臭いが含まれているビットパターンが含まれていても、私は驚くことはありませんが、その場合はわかりません。そうであれば、単純なヒューリスティックなウイルス認識プログラムの有効なテストかもしれません。しかし、EICARテストでは、の時間が長くての時間だったので、それをキャッシュするヒューリスティックは、現在野生のものを捕まえるのに十分ではないと思います。
EICARを認識することは、「AVがインストールされ、スキャンされる予定のものをスキャンする」よりも重大な主張を証明するものではなく、AVシステムを開発する場合は、それについて主張する。
更新:
実際のEICARテストウイルスは以下の文字列です。
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
慎重に興味深い性質のカップルを持っている(Wikipedia articleに応じて)作られました。
まず、印刷可能なASCII文字のみで構成されています。最後に空白や改行を含むことが多いが、その認識やその機能には何の影響も与えない。
これは、実際には8086 CPU用の実行可能プログラムです。これは、拡張子.COMのファイルにメモ帳などで保存することができ、MSDOS、MSDOSのほとんどのクローン、WindowsコマンドプロンプトのMSDOS互換モード(Vista、 16ビットリアルモードとの互換性がもはや優先ではないと判断して以来、64ビットWindowsでは使用できません)。
実行すると、文字列「EICAR-STANDARD-ANTIVIRUS-TEST-FILE! "終了します。
なぜこのような努力をしたのですか?明らかに、研究者は実際にウイルスを検出して実際の感染を危険にさらすことなく、ライブスキャナをテストできるように、実行することが安全であることが分かっていたプログラムを望んでいました。彼らはまた、従来型と非従来型の両方の手段で配布が容易であることを望んでいました。すべてのバイトが印刷可能なASCII文字であるという制限を満たすx86リアルモード命令セットの有用なサブセットがあることが判明したので、両方の目標を達成しました。
wikiの記事には、プログラムが実際にどのように動作するかについてのblow-by-blow explanationへのリンクがあります。複雑さを増すことは、コンソールに印刷するか、DOSリアルモードでプログラムを終了する唯一の方法は、opcode(0xCD)が印刷可能な7ビットASCII文字でないソフトウェア割り込み命令を発行することです。さらに、2つの割り込みはそれぞれ1バイトの即値パラメータを必要とし、そのうちの1つはスペース文字である必要があります。自己課されたルールはスペースを許さないことだったので、プログラムの最後の4バイト(文字列中の "H + H *")は命令ポインタがそこに到達してそれらを実行する前にすべて修正される。
分解し、私のXPボックスにコマンドプロンプトでDEBUGコマンドでEICAR.COMをダンプ、私は以下を参照してください。
0C32:0100 58 POP AX
0C32:0101 354F21 XOR AX,214F
0C32:0104 50 PUSH AX
0C32:0105 254041 AND AX,4140
0C32:0108 50 PUSH AX
0C32:0109 5B POP BX
0C32:010A 345C XOR AL,5C
0C32:010C 50 PUSH AX
0C32:010D 5A POP DX
0C32:010E 58 POP AX
0C32:010F 353428 XOR AX,2834
0C32:0112 50 PUSH AX
0C32:0113 5E POP SI
0C32:0114 2937 SUB [BX],SI
0C32:0116 43 INC BX
0C32:0117 43 INC BX
0C32:0118 2937 SUB [BX],SI
0C32:011A 7D24 JGE 0140
0C32:0110 45 49 43 41 EICA
0C32:0120 52 2D 53 54 41 4E 44 41-52 44 2D 41 4E 54 49 56 R-STANDARD-ANTIV
0C32:0130 49 52 55 53 2D 54 45 53-54 2D 46 49 4C 45 21 24 IRUS-TEST-FILE!$
0C32:0140 48 DEC AX
0C32:0141 2B482A SUB CX,[BX+SI+2A]
JGE 0140
までの命令を実行した後、最後の2つの命令がために変更されました。
0C32:0140 CD21 INT 21
0C32:0142 CD20 INT 20
ほとんどのDOSのシステムコールを実行するための関数を指定するAH
またはAX
レジスタの値とINT 21
を通じて派遣されました。この場合、AH
は0x09です。これはオフセット文字列0x011Cで始まり、ドル記号で終わる文字列を出力する印刷文字列関数です。 (あなたは純粋なDOSで異なるトリックでドル記号を印刷しなければならなかった)。INT 20
呼び出しは、そのポイントを過ぎた余分なバイトが実行される前にプロセスを終了させます。
自己変更コードは初期のウイルストリックですが、ここでは文字列で使用できるバイト値の制限を維持するために使用されています。最新のシステムでは、COMファイルを実行するMSDOS互換モードで実行される場合、データ実行保護機能が変更をキャッチする可能性があります。
これは少しプログラミングに関連していますか? – user73993
彼はAVシステムを書く方法について考えているのでしょうか?もちろん、彼はそのようなシステムを過ぎ去らせる方法についても考えているかもしれません.... – RBerteig
私はウイルス検出メカニズムと、それらをプログラムに実装する方法について読んでいました。ヒューリスティクスと法医学はプログラミングに関連しているので、私はこれを質問に適した場所と考えていました:) –