Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C/Win32] Uitvogelen waar de heuristics om zeuren

Pagina: 1
Acties:

  • Orwell
  • Registratie: December 2009
  • Laatst online: 20-11 20:58
Ben op het moment in gevecht met onder andere Symantec en McAfee. Een stapeltje virusscanners vindt het blijkbaar leuk om een onschuldig programmaatje dankzij de wonderen van de heuristiek als virus te zien. Dit programmaatje heeft de volgende source op het moment:

C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <windows.h>
#include "Main.h"

#define IDC_MAIN_TEXT 1001

LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
    switch(Message) {
        case WM_CREATE:
            CreateWindow("EDIT", "",WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL|ES_MULTILINE|ES_WANTRETURN,CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,hwnd, (HMENU)IDC_MAIN_TEXT, GetModuleHandle(NULL), NULL);
            SendDlgItemMessage(hwnd, IDC_MAIN_TEXT, WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT), MAKELPARAM(TRUE,0));
            break;
        case WM_SIZE:
            if(wParam != SIZE_MINIMIZED)
                MoveWindow(GetDlgItem(hwnd, IDC_MAIN_TEXT), 0, 0, LOWORD(lParam),HIWORD(lParam), TRUE);
            break;
        case WM_SETFOCUS:
            SetFocus(GetDlgItem(hwnd, IDC_MAIN_TEXT));
            break;
        case WM_CLOSE:
            DestroyWindow(hwnd);
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hwnd, Message, wParam, lParam);
    }
    return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow) {
    WNDCLASSEX wc;
    HWND hwnd;
    MSG Msg;

    wc.cbSize        = sizeof(WNDCLASSEX);
    wc.style         = 0;
    wc.lpfnWndProc   = WndProc;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    wc.hInstance     = hInstance;
    wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wc.lpszMenuName  = "MAINMENU";
    wc.lpszClassName = "WindowClass";
    wc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);

    if(!RegisterClassEx(&wc)) {
        MessageBox(0,"Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK|MB_SYSTEMMODAL);
        return 0;
    }

    hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","File Editor Example Program",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT, 320, 240, NULL, NULL, hInstance, NULL);

    if(hwnd == NULL) {
        MessageBox(0, "Window Creation Failed!", "Error!",MB_ICONEXCLAMATION|MB_OK|MB_SYSTEMMODAL);
        return 0;
    }

    ShowWindow(hwnd,1);
    UpdateWindow(hwnd);

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

/////////////* Resourcebestand */////////////////

#include "Main.h"

MAINMENU MENU 
{
 POPUP "&File"
 {
  MENUITEM "&Open...", CM_FILE_OPEN
  MENUITEM "Save &As...", CM_FILE_SAVEAS
  MENUITEM SEPARATOR
  MENUITEM "E&xit", CM_FILE_EXIT
 }

 POPUP "&Help"
 {
  MENUITEM "&About", CM_ABOUT
 }
}


De mensen die Win32 kennen zien in deze code niks anders dan een standaard window met een tekstveld erin. Ik ben al eventjes aan het snoeien geweest, dit was namelijk een functionele editor. Met random deleten probeer ik dus het schuldige stukje code te vinden. Het wil nog niet echt lukken helaas.

En dit stukje code is blijkbaar gevaarlijk. Ik compileer overigens op deze manier:

code:
1
2
3
4
rm -f Main.o FileEditor_private.res FileEditor.exe
gcc.exe -c Main.c -o Main.o -I"C:/Program Files (x86)/Dev-Cpp/include"   
windres.exe -i FileEditor_private.rc --input-format=rc -o FileEditor_private.res -O coff 
gcc.exe Main.o FileEditor_private.res -o "FileEditor.exe" -L"C:/Program Files (x86)/Dev-Cpp/lib" -L"C:/Program Files (x86)/Dev-Cpp/lib/gcc" -static-libstdc++ -static-libgcc -mwindows


Heeft iemand enig idee waarom deze code zo gevaarlijk lijkt te zijn? Ik snap er niks meer van.

* gaat verder met snoeien *

Ik test overigens door de exe op virustotal.com te submitten. Elke keer krijg ik dit:

CAT-QuickHeal...........12.00.............2011.11.27.......(Suspicious) - DNAScan
McAfee-GW-Edition.....2010.1D.........2011.11.27.......Heuristic.LooksLike.Win32.Suspicious.J!84
PCTools.....................8.0.0.5............2011.11.27.......HeurEngine.ZeroDayThreat
Symantec..................20111.2.0.82....2011.11.27.......Suspicious.MLApp

[ Voor 6% gewijzigd door Orwell op 27-11-2011 22:14 ]


  • kalikatief
  • Registratie: September 2010
  • Laatst online: 02-02 15:03
Ik neem aan dat je al geprobeerd hebt de hele EDIT control er uit te gooien zonder resultaat?

Waarom override je de WM_SIZE, trouwens? Mijn Win32 dagen zijn al een tijdje geleden, maar het lijkt me dat je op het allerminst DefWindowProc wilt aanroepen in het geval dat die niet is geminimaliseerd. Persoonlijk zou ik het doen in alle gevallen aangezien jouw resize-de-EDIT-control een additief iets is, niet een vervang-het-standaard-zooitje-door-mijn-nieuwe-implementatie.

Probeer ook eens de string 'example program' enzo aan te passen. Die heuristieken triggeren op de gekste zaken, en het zou me niet verbazen als een heleboel moderne 'virussen' aangepaste 'hello world' gevalletjes zijn. :)

  • Orwell
  • Registratie: December 2009
  • Laatst online: 20-11 20:58
Het is een (verwaarloosd) voorbeeldproject van een IDE die ik een beetje aan het bijhouden ben, dus het hele Example/Hello-idee moet er wel een beetje inblijven. Dit stuk code komt bijna exact van theforger's overigens, dus een echte onderbouwing voor het waarom ontbreekt af en toe een beetje. :P

Het is in Win32 wel het idee dat je bij een eventuele WM_SIZE alle controls aan het nieuwe formaat van het top-level-window aanpast. Ik zou het zelf met SetWindowPos doen, maar goed, dat zou niet uit moeten maken. Voor zover ik weet moet je zelfs bij standaardwindows gewoon zelf sizen.

Wat ik nu wel opmerk is dat als ik het handlen van WM_CREATE en WM_SIZE weglaat, dat Symantec niet meer zeurt. Die andere drie zijn blijkbaar diehard volhouders. :|

Ugh, virustotal heeft problemen op 't moment. Dan maar even niet testen. Morgen verder! :O

Heb overigens het window de caption Aap gegeven. Zou wel is kunnen helpen.

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
'k Zou er ook Unicode van maken, dat is tegenwoordig toch de norm. Code die claimt uit 2011 te komen, maar ANSI is, is iewat vreemd.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Mijzelf
  • Registratie: September 2004
  • Niet online
Ik neem aan dat het grootste gedeelte van de executable bestaat uit gcc libraries, en die zouden dan ook best de 'schuldigen' kunnen zijn.
Al een lege WinMain() geprobeerd?

Natuurlijk hebben die virusscanners gelijk. Iemand die het reactionaire gcc gebruikt om Win32 code te schrijven, is bijna zeker een cyberterrorist, en de executables zijn dus verdacht. :+

  • MLM
  • Registratie: Juli 2004
  • Laatst online: 12-03-2023

MLM

aka Zolo

heb je het al eens gecompiled met VC++ van MS? (Downloaden is gratis voor de Express editie, die kan prima Win32 projecten compilen). Geeft het dan ook false positives?

En heb ej al onderzocht of je niet een virus hebt op je PC die besmet voordat het geupload is? :P

-niks-


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

kalikatief schreef op zondag 27 november 2011 @ 22:33:
Probeer ook eens de string 'example program' enzo aan te passen. Die heuristieken triggeren op de gekste zaken, en het zou me niet verbazen als een heleboel moderne 'virussen' aangepaste 'hello world' gevalletjes zijn. :)
Ik zou het hier ook eerst in zoeken eigenlijk, en dan bijv. ook die "Window Registration Failed!" constantes e.d. Kan best zijn dat er een keer een virus is geweest met (vrijwel) dezelfde strings erin...

Over de compleet andere boeg zou ik met een verhaal als dit ook rustig naar de McAfee of Symantec helpdesks stappen - als het niet is om jouw probleem te vinden dan wel om een false positive uit hun systemen te helpen halen ;)

Professionele website nodig?


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 13:18

.oisyn

Moderator Devschuur®

Demotivational Speaker

Dergelijke results krijg je soms ook al bij een
C++:
1
2
3
int main()
{
}

8)7

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Orwell
  • Registratie: December 2009
  • Laatst online: 20-11 20:58
Sorry voor het zo laat reageren (Calculus e.d. vereisten aandacht), maar:

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Symantec en McAfee vinden deze case gevaarlijk
case WM_CREATE:
    
    // Symantec en CAT-QuickHeal vinden dit gevaarlijk...
    CreateWindow("EDIT","",WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL|ES_MULTILINE,0,0,0,0,hwnd,(HMENU)IDC_MAIN_TEXT,GetModuleHandle(NULL),NULL);

    // Symantec en CAT-QuickHeal vinden dit gevaarlijk...
    SendDlgItemMessage(hwnd,IDC_MAIN_TEXT,WM_SETFONT,(WPARAM)GetStockObject(DEFAULT_GUI_FONT),(LPARAM)1);

    break;
    
// Symantec en McAfee vinden deze case gevaarlijk
case WM_SIZE:
    if(wParam != SIZE_MINIMIZED)
        MoveWindow(GetDlgItem(hwnd,IDC_MAIN_TEXT),0,0,LOWORD(lParam),HIWORD(lParam),TRUE);
    break;


Samengevat best wel erg lame. |:(

Zelfde idee dus met system(), wat AVG schijnt te verbieden (niet dat system nou zulke mooie code is, maar toch). En eh, .oisyn, het kan dus blijkbaar erger. :o

Uhm, compilen zonder static libs levert helaas niks op.
Natuurlijk hebben die virusscanners gelijk. Iemand die het reactionaire gcc gebruikt om Win32 code te schrijven, is bijna zeker een cyberterrorist, en de executables zijn dus verdacht.
Je hebt een punt. :P

Alleen zocht ik een IDE waarmee je wèl resourcebestanden kon verbouwen. Wilde helaas niet met MSVC++ Express 2010. Toen maar op GCC overgestapt. En raad is, alles werkt gewoon! Direct3D werkte wonderbaar ook in één keer! Jammer is wel weer dat ik een stapel .a-libs mis, zodat ik niet alle headers kan gebruiken. :/

Oh, ehm, jup, die code komt voor 90% van theForger. Zogezegd googlehit #1 als je 'Win32 tutorial' intikt. Ideaal beginpunt voor kwaaie progs. ;)
Pagina: 1