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로 저장했습니다. Turbo C 컴파일러를 사용 하여이 프로그램을 컴파일하고 Turbo C (Ctrl + F9)에서 실행 중입니다.
Windows 7을 사용하고 있으며 Avira Antivir 바이러스 시스템을 설치했습니다.
프로그램을 위에서 실행하려고 할 때 벌레 (DOS/CANDY)를 만듭니다. 나는 프로그램에 아무런 문제가 없다고 생각합니다.
이제 여기 특별한 것이 있습니다. 다음 차이로 동일한 프로그램을 실행하십시오. 여기서 유일한 차이점은 공간의 공간입니다 \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 꽤 불행한 선택이며, 나는 그것이 대부분의 바이러스 스캐너를 빠르게 유발할 것이라고 가정합니다 (실제 바이러스의 완벽한 이름은 아니지만 ...).
나는 당신이 어딘가에 실제 바이러스를 가지고 있다고 생각합니다. 아마도 표준 라이브러리를 수정했을 것입니다. D 또는 단순히 항 바이러스는 실행 파일의 패턴을 감지합니다.
보다 http://www.viruslist.com/en/viruses/encyclopedia?virusid=1857 .
제 생각에는 안티 바이어가 DOS/CANDY가 포함하는 텍스트 문자열을 통해 스캔하고 두 번째 코드의 코드에서 찾는 것과 같기 때문에 Antivir는 컴파일 된 실행 파일을 바이러스로 감지합니다.