C言語プログラムは、ウイルスとして検出されます
質問
#include<stdio.h>
#include<conio.h>
union abc
{
int a;
int x;
float g;
};
struct pqr
{
int a;
int x;
float g;
} ;
void main()
{
union abc b;
struct pqr c;
clrscr();
b.a=10;
textbackground(2);
textcolor(6);
cprintf(" A = %d",b.a);
printf("\nUnion = %d",sizeof(b));
printf("\nStructure = %d",sizeof(c));
getch();
}
私はvirus.cppとしてこのプログラムが保存されています。私はこのプログラムをコンパイルし、ターボC(Ctrlキー+ F9)から実行するようにターボCコンパイラを使用しています。
私は、Windows 7を使用していると私はは、Avira AntiVirのウイルスシステムをインストールしました。
私はプログラム上で実行しようとしたときに、、それはワーム(DOS /キャンディ)を作成します。私はプログラムで間違っては何もないと信じています。
今ここで何か特別なものです。以下の違いで同じプログラムを実行します。ここで唯一の違いは\n
の間にスペースがあります:
#include<stdio.h>
#include<conio.h>
union abc
{
int a;
int x;
float g;
};
struct pqr
{
int a;
int x;
float g;
} ;
void main()
{
union abc b;
struct pqr c;
clrscr();
b.a=10;
textbackground(2);
textcolor(6);
cprintf(" A = %d",b.a);
printf("\n Union = %d",sizeof(b));
printf("\n Structure = %d",sizeof(c));
getch();
}
の違いは、\ n、およびスペースです。私の質問は、なぜ私の簡単なプログラムは、ウイルスとして検出されるのですか?
ここで別のコードサンプルは、C ++のためのこの時間:
#include<iostream.h>
#include<conio.h>
class A
{
int a,b;
public:
A()
{
a=0;b=0;
}
A(int x)
{a=x;
b=0;
}
A(int x,int y)
{
a=x;
b=y;
}
~A()
{
cout<<"All things are deleted.";
}
void get()
{
cout<<"\nA = "<<a;
cout<<"\nB = "<<b;
}
};
void main()
{
A a1(5,10);
clrscr();
a1.get();
getch();
}
でも、それはウイルスではありません - 私はこのプログラムを実行すると、それは「ウイルス警告」を与えます。さて、悲劇はあなたがデストラクタを削除すると、それがウイルスとして検出しませんです。
ここではスクリーンショットと同様の質問があります:
ウイルスを作成問題は、どのように、なぜですか?
解決
偽陽性のように見えます。現代のウイルスは、ウイルス対策プログラムから隠すために多型を使用しているため、アンチウイルスプログラムでも部分一致を報告している、と明らかに与えられたソースコードを使用して、コンパイラは、そのマルウェアに部分一致を生成します。
他のヒント
ウィルススキャナは、脆弱性を検出するために、ヒューリスティック及び署名を使用します。偽陽性が避けられません。あなたのプログラムは、ヒューリスティックをトリガするようです。おそらくそのチェックサム、ファイルサイズやその他の特性は、既知のウイルスと一致します。これは、小さな変更が問題を解決するのに十分であるという事実によって出向されます。
編集アプリケーションの Virus.exe の呼び出しはかなり残念な選択であり、私はそれは確かに完璧な名前ではありませんが、それは(すぐにほとんどのウイルススキャナをトリガーすると推定したいです本物のウイルスのために...)。
私は、おそらく標準ライブラリを変更したことを、あなたはどこかに本当のウイルスを持っていると思います または単にアンチウイルスは、実行ファイル内のパターンを検出します。
http://www.viruslist.com/en/viruses/を参照してください。百科事典?virusid = 1857 のます。
私の推測では、AntiVirは、DOS /キャンディが含まれているテキスト文字列をスキャンし、コードの第二の部分の1はそれが探しているもののようであることから、はAntiVirは、ウイルスのようなコンパイル済みの実行可能ファイルを検出したということです。