Virenmeldung eigenes Programm

Hallo Experten,

ich habe ein sehr seltames Problem:

Ich habe ein kleines Programm in C/C++ geschrieben, das nichts anderes macht, als eine
Meldung auszugeben. (Datei xxx.xx) nicht gefunden. (Mit einem Beenden-Button).

Nun meldet AVIRA:

Virus oder unerwünschtes Programm gefunden !
Zugriff verweigert.
TR/Dldr.Small.ewd.2

Ich kann mir das nicht erklären. Vielleicht hat ja jemand eine Idee.

Hier der Quellcode:

#include

LRESULT CALLBACK
MainWndProc (HWND hwnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
{

static HWND hwndButton = 0;
static int cx, cy;

HDC hdc;
PAINTSTRUCT ps;
RECT rc;

switch (nMsg)
{
case WM_CREATE:
{

TEXTMETRIC tm;

hdc = GetDC (hwnd);
SelectObject (hdc, GetStockObject (DEFAULT_PALETTE));
//SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT));
GetTextMetrics (hdc, &tm);

cx = tm.tmAveCharWidth * 14;
cy = (tm.tmHeight + tm.tmExternalLeading) * 1.7;

ReleaseDC (hwnd, hdc);

hwndButton = CreateWindow (

„button“,

„Schliessen“,

WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON ,
0, 0, cx, cy,
hwnd,
(HMENU) 1,
((LPCREATESTRUCT) lParam)->hInstance,
NULL
);

return 0;
break;
}

case WM_DESTROY:
PostQuitMessage (0);
return 0;
break;

case WM_PAINT:
hdc = BeginPaint (hwnd, &ps);
GetClientRect (hwnd, &rc);

SetTextColor( hdc, RGB( 0, 0, 0) );

SetBkColor ( hdc, RGB( 211, 211, 211) );
TextOut ( hdc, 20, 20, „Die Datei lib32.dll fehlt oder ist defekt !“, 45);

rc.bottom = rc.bottom / 1.5;

DrawText (hdc, " ", -1, &rc,
DT_CENTER | DT_VCENTER);

EndPaint (hwnd, &ps);
return 0;
break;

case WM_SIZE:

if (hwndButton &&
(wParam == SIZEFULLSCREEN ||
wParam == SIZENORMAL)
)
{
rc.left = (LOWORD(lParam) - cx) / 2;

rc.top = HIWORD(lParam) * 2.5 / 4 - cy / 2;

MoveWindow (
hwndButton,
rc.left, rc.top, cx, cy, TRUE);
}
break;

case WM_COMMAND:

if (LOWORD(wParam) == 1 &&
HIWORD(wParam) == BN_CLICKED &&
(HWND) lParam == hwndButton)
{

DestroyWindow (hwnd);
}
return 0;
break;
}

return DefWindowProc (hwnd, nMsg, wParam, lParam);
}

int STDCALL
WinMain (HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmd, int nShow)
{
HWND hwndMain; window.
MSG msg; structure.
WNDCLASSEX wndclass; structure.

char*szMainWndClass = „WinTestWin“;
// Hintergrund Fenster
HBRUSH MyBrush = CreateSolidBrush( RGB( 211, 211, 211 ) ); //grauer Hintergrund

memset (&wndclass, 0, sizeof(WNDCLASSEX));

wndclass.lpszClassName = szMainWndClass;
wndclass.cbSize = sizeof(WNDCLASSEX);
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = MainWndProc;
wndclass.hInstance = hInst;
wndclass.hIcon = LoadIcon (NULL, IDI_ERROR);
wndclass.hIconSm = LoadIcon (NULL, IDI_ERROR);
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW);
wndclass.hbrBackground = MyBrush;

RegisterClassEx (&wndclass);

hwndMain = CreateWindow (
szMainWndClass,

" ERROR",

WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
320, 160, NULL, NULL, hInst, NULL
);

ShowWindow (hwndMain, nShow);
UpdateWindow (hwndMain);

while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
return msg.wParam;
}

// EOF

Hallo Fragewurm,

Nun meldet AVIRA:

Virus oder unerwünschtes Programm gefunden !
Zugriff verweigert.
TR/Dldr.Small.ewd.2

Ich kann mir das nicht erklären. Vielleicht hat ja jemand eine
Idee.

Herzlichen Glückwunsch, morgen wirst du verhaftet!
*SCNR*

Es gibt auch Falschmeldungen von Virenscannern.

Damit die Erkennungstabellen nicht riesig werden und damit auch leicht veränderte Viren erkannt werden, bestehen die Erkennungstabellen, nur aus markanten Bytekombinationen des Maschinen-Codes.
Scheinbar hat dein Compiler eine solche Kombination erzeugt.

Vermutlich reicht es den Code oder die Optimierungen des Compilers etwas zu verändern und dein Programm geht problemlos durch den Virenscanner durch.

Manchmal befindet sich eine solche Bytekombination auch im „Rasen“ zwischen den Funktionen, dann sind es meist relativ zufällige Werte.

Ich hatte auch länger ein FTP-Codebeispiel aus einem Buch auf meiner Festplatte rumliegen, welches Virenalarm ausgelöst hat. Da hatte wahrscheinlich ein Virenprogrammierer das selbe Buch wie ich.

Also, nimms nicht tragisch.

MfG Peter(TOO)

Hallo!
Vielleicht stolpert Avira auch über eine Heuristik.
Dein Programm meldet ohne irgendwelche Überprüfungen, dass eine DLL nicht vorhanden sei. Warum ein normales Programm so etwas machen soll, ist mir schleierhaft. Ein Schädling könnte dadurch versuchen, den Benutzer dazu zu bringen, die „fehlende/beschädigte“ DLL durch eine infizierte Version zu ersetzen.

Also: Was ist der Zweck des Ganzen? Warum hast Du genau diese Meldung gewählt?

Gruß,
Martin

Hallo Martin,

danke für die Antwort.

Das Programm hat wie Du siehst keinerlei Funktion. Es ist rein nur eine „universal“ Fehlermeldung die für alles mögliche verwendet werden kann.
z.B. in einer Batchabfrage (if exist …exe else Fehlermeldung)
Es wird nur ein beliebiger Text ausgegeben.
Ich habe einfach nur eine beliebige Datei (im Beispiel lib32.dll die es eh nicht gibt) eingetragen. Da könnte auch z.B. liesmich.txt stehen.

Also was soll der Virenscanner da anmotzen ?

Es wird ja nichts verarbeitet. An der "#include " kann es ja auch nicht liegen, ist ja eine C/C++ Standardbibliothek.

Gruss
Chris