Каталог расширений

Популярные теги

3gp       avi       fb2       jpg       mp3       pdf      

Как найти изолированный файл


Как найти файлы на компьютере с Windows XP/7/8/10?: spayte — LiveJournal

Поговорим о том, как найти файлы на компьютере? Кто из нас не попадал в такую ситуацию. Например, сели вы одним прекрасным вечерком за компьютер или ноутбук и обратили внимание на то, что Рабочий стол сильно захламлён ярлыками, папками, текстовыми документами, видео и аудио файлами, соответственно вы решили навести здесь порядок. И правильно, это же ваш рабочий стол в конце концов!

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

">

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

Возможно, вы его в папку какую-то скопировали, когда порядок наводили или вовсе удалили. Открываете корзину, а там нужного файла нет. Посмотрели по папкам и тоже не нашли. По спине пробежали холодные мурашки.

Где только вы его не искали, и на диске C:, D:, в папке «Загрузки» и «Мои документы», но найти важный рабочий файл на компьютере вы не можете. Вот тогда наступает момент, когда вы задаётесь извечным вопросом Что делать? Как найти файлы на компьютере?

Во-первых, нужно успокоится и найти необходимые файлы на компьютере можно очень просто. Скорее всего ваш файл никуда не делся и никакие хакеры его с вашего компьютера не украли (зачем он им нужен 🙂 ). Всё что вам нужно сделать — это просто правильно воспользоваться Поиском файлов на вашем компьютере.

В первую очередь откройте Корзину и внимательно посмотрите её содержимое. Если нужного файла там нет, значит продолжаем поиски в других местах.

Итак, как найти файлы на компьютере? Читайте статью далее.


Как найти файлы на компьютере

с Windows XP/7?

Для этого в операционной системе Windows есть встроенная и довольно эффективная функция. Находится по адресу: Пуск -> Поиск.

Также окно поиска файлов можно запустить из любого окна каталога, к примеру, Мой компьютер, нажав на кнопку «Поиск»:

откроется такое окно:

Здесь мы можем выбрать тип файла: текстовые документы или мультимедиа файлы. При нажатии на нужном, появится окно выбора дополнительных параметров. К примеру, выберем поиск мультимедиа файлов (изображения, музыка, видео):

Поставим флажок возле необходимого типа и нажмем кнопку «Найти». Возьмем, к примеру, видео. Будут найдены все видеофайлы на вашем компьютере. Очень удобно, когда вы, наконец-то, решили навести порядок на своем жестком диске и хотите все фильмы, клипы и прочее разместить в одном месте, чтобы не тратить время на их постоянный поиск.

Или когда вы точно помните, что где-то у вас есть этот файл, но где же его найти?! Здесь как раз вам и поможет данная функция. Также осуществить поиск всех видеофайлов на компьютере можно открыв дополнительные параметры поиска, в строке « Часть имени или имя файла целиком»:

Здесь можно написать через запятую типы видео файлов в таком виде: *.avi, *.mp4, *.3gp, *.flv, *.swf, *.mpeg, *.mov. Это самые распространенные расширения видеофайлов. Будут найдены все файлы с таким расширением. Но в таком случае вы можете упустить некоторые файлы, не указав соответствующего расширения.

Кроме этого можно указывать дополнительные параметры, такие как размер файла, дата последнего изменения файла, осуществлять или нет поиск в скрытых/системных папках и файлах, путь поиска. Можно осуществлять поиск как по всему компьютеру, так и выбрав какой-либо диск или каталог.

Также можно искать по тексту в файле. Например, вам нужно найти все документы Word содержащее слово «реферат». Для этого выбираем пункт «Файлы и папки»:

и в дополнительных полях пишем:



  • В поле №1 указываем расширение файла — *.doc;

  • В поле №2 пишем слово/словосочетание, которое вы хотите найти;

  • В поле №3 место поиска.

И нажимаете «Найти». Таким образом будут найдены все документы в формате Microsoft Word с текстом «реферат», если конечно такие имеются.

Теперь давайте разберемся, как найти файлы на компьютере с Windows 8/10.

Итак…


Как найти файлы на компьютере

с Windows 8/10?

Как найти файлы на компьютере по имени?

Если вы помните название файла, то можете просто ввести его в поле «Поиск» окна «Этот компьютер» и нажать кнопку «Enter». Будет произведён поиск файла на всём пространстве жёсткого диска и файл наверняка будет найден.

Если ваш файл состоит из нескольких слов, но вы помните только одно слово, введите это слово в поле Поиска, наверняка ваш пропавший файл всё равно найдётся.

Как найти файлы на компьютере по расширению?

Поиск пропавшего файла может выглядеть немного сложнее, если вы не помните название файла. Но тогда вы наверняка знаете его рабочее расширение.

Что это такое расширение?

Расширения файлов придуманы программистами для определения типа файлов. То есть каждый файл принадлежит к определенной программе, и благодаря расширению файла Windows понимает какая программа может работать с этим файлом.

Расширение всегда отделяется от имени файла точкой, например, возьмём файл VirtualDub.zip, как видите название файла VirtualDub, а его расширение .zip говорит о том, что это архивный файл и работать с ним могут программы архиваторы WinRAR, Hamster Free ZIP Archiver или 7-Zip.

Другими словами, если у вас пропал текстовый файл, который вы печатали в программе Microsoft Office Word, значит расширение у вашего пропавшего файла .docx. Если у вас пропала фотография или картинка, значит расширение наверняка будет .jpg. Если пропал фильм, расширение вполне может быть .avi, flv, mp4 или mkv.

Что делать, если вы не помните расширение пропавшего файла?

Наверняка у вас на компьютере есть ещё подобные файлы, нужно просто посмотреть расширение у этих файлов. По умолчанию в Windows 7 и Windows 8 расширения файлов скрыты, и вы их не увидите. Чтобы увидеть расширения файлов идём в окно «Этот компьютер» и выбираем «Вид» -> «Параметры» -> «Изменить параметры папок и поиска» ->

-> на вкладке «Вид» снимаем галочку с пункта «Скрывать расширения для зарегистрированных типов файлов», нажимаем кнопки «Применить» и «ОК».

Обратите внимание, что теперь у многих файлов на вашем компьютере добавились после имени файла расширения. Если вы узнали расширение вашего пропавшего файла (например  .zip), то вводим его в поле «Поиск» и жмём «Enter». Как видим наш файл VirtualDub.zip нашёлся.

Например, мы потеряли фильм с расширением .avi. В результатах поиска будут все фильмы находящиеся на вашем жёстком диске, вам останется только просмотреть список и выбрать потерявшийся видеофайл.

Как найти файлы на компьютере по объёму?

Многие опытные пользователи могут заметить, что у видеофайлов существует множество расширений и как тогда искать нужный файл?

В этом случае можно попробовать найти файл по его объёму. Например, ввести в Поиске нехитрую такую команду: System.Size:>1000МБ. Она означает, что необходимо искать все файлы на компьютере объёмом более 1ГБ.

Поиск выдал несколько видеофайлов, среди которых был файл совсем без расширения, но название имел точно такое же, как и у пропавшего фильма. Присвоив ему расширение .avi, решилась проблема.

Как найти скрытый файл на компьютере?

Иногда, в следствии, системного сбоя или вирусной активности некоторым файлам операционная система может присвоить атрибут «Скрытый». Если в настройках системы не отмечен пункт «Показывать скрытые файлы и папки», то эти файлы вы не увидите и не найдёте их даже через «Поиск», хотя с ними в это время ничего не случится.

Для того чтобы скрытые файлы были видны в операционной системе, идём в окно «Этот компьютер» и выбираем «Вид» -> «Параметры» -> «Изменить параметры папок и поиска» ->

-> на вкладке «Вид», затем отмечаем пункт «Показывать скрытые файлы и папки», нажимаем кнопки «Применить» и «ОК».

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

Как найти файлы на компьютере по содержанию?

Если вы потеряли текстовый файл, напечатанный в любой текстовой программе для работы с текстом (Microsoft Office Word, OpenOffice или блокноте), то вы найти его по его содержанию. Для этого вы должны помнить хотя бы часть его содержания.

Например, у многих на компьютере есть файл с таким содержимым «Как найти файл на компьютере». Вводим этот текст в поле Поиска и жмём кнопку «Enter», после сразу находится файл содержащий этот текст.

Как найти файлы на компьютере с помощью программы Total Commander?

Этот классный файловый менеджер сможет найти пропавший на вашем компьютере файл сразу по нескольким приметам: по названию, расширению, по содержащемуся тексту.

Запускаем программу Total Commander и выбираем место поиска, например весь диск C:, далее заходим в меню «Команды» и «Поиск файлов». Если хотите искать файлы по названию или расширению, то вводим их в поле «Искать файлы». Затем жмём кнопку «Начать поиск».

Если хотите искать файлы по содержащемуся в них тексту, тогда вводим тот текст, который помните в поле «С текстом» и не забываем поставить напротив галочку, нажимаем кнопку «Начать поиск».

На этом пока все! Надеемся, что вы нашли в этой заметке что-то полезное и интересное для себя. Удачи! 😎

Как обеспечить изоляцию процессов и не сломать Windows — «Хакер»

Содержание статьи

Как изолировать подозрительные процессы в ОС Windows и не сломать саму ОС? Как создать надежную и совместимую с Windows программную песочницу без аппаратной виртуализации и перехватов функций ядра, но с использованием документированных встроенных механизмов безопасности ОС? Мы расскажем о наиболее часто встречающихся проблемах, с которыми сталкиваются разработчики (а в итоге — потребители) программных песочниц. Ну и разумеется, предложим свое решение :).

 

Введение, или как плохо жить без песочницы

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

То есть речь даже не о 0day: можно взять старую известную бородатую малварь, поморфить ее, убрать поведенческие сигнатуры (работа на пару дней для лентяя) и юзать ее снова, а потом еще раз, и еще, пока не надоест или пока не посадят. При этом люди, которые продали лекарство от того, чтобы это самое «плохо» никогда не наступало, вроде как и ни при чем; они с серьезными лицами публикуют какой-нибудь бюллетень и рассказывают о гигиене в интернете, забывая при этом сказать, что если эту самую гигиену соблюдать полностью — то антивирусы, тем более платные, практически и не нужны.

 

Песочницы и особенности их реализации

Итак, антивирусы не спасают, а иногда ломают то, что уже есть. «Давайте подойдем к защите с другой стороны и будем изолировать процессы друг от друга», — сказал кто-то бесконечно умный. Действительно, здорово, когда подозрительные процессы выполняются в некоторой изолированной среде, называемой песочницей. Выполняемая в песочнице малварь не может покинуть ее пределов и навредить всей системе. Этот могло бы быть решением, однако в существующих реализациях песочниц есть нюансы...
Далее мы как раз и будем обсуждать все тонкости построения песочниц, знание которых тебе обязательно пригодится, когда понадобится выбрать средство изоляции процессов или HIPS (Host-based Intrusion Prevention System — система предотвращения вторжений для рабочих станций).

 

Нюанс №1, или одна песочница на всех

Большинство песочниц на самом деле не обеспечивают изоляцию процессов. По правде говоря, в большинстве реализаций защищаемая система делится на две части — доверенную и недоверенную. В доверенной части выполняются обычные процессы, а в недоверенной — изолируемые. То есть все изолируемые процессы выполняются в одной песочнице, имеют доступ друг к другу и к ресурсам друг друга, используют тот же реестр и ту же файловую систему.

Таким образом, малварь может закрепиться в самой песочнице и стартовать эпизодически с одним из изолируемых приложений (или с несколькими изолируемыми приложениями, или с любым из них). При этом часто песочницы не логируют действия изолируемых процессов. Действия, на которые ругаются HIPS, в песочницах вполне себе проходят без малейших реакций с поправкой на изоляцию, что не очень хорошо.

Как проверить, что изоляция устроена именно таким образом? Очень просто! Запусти два приложения в песочнице. Например, notepad.exe и wordpad.exe. Создай с помощью notepad.exe текстовый файл 1.txt.

Рис. 1. Создаем текстовый файл

Разумеется, данный файл будет сохранен не на рабочем столе, а в «виртуальной» директории. Попробуй открыть его Wordpad’ом (рис. 3).

Рис. 2. Похоже, для всех изолированных приложений создана одна изолированная средаРис. 3. Файл открывается на чтение

Итак, созданный одним изолированным приложением файл можно открыть с помощью другого изолированного приложения. Скажем прямо, изоляция уже не очень. Но может, по крайней мере от записи будет какая-то защита? Меняем содержимое (рис. 4).

Рис. 4. Изменяем содержимое текстового файла

И сохраняем. А теперь попробуем открыть файл 1.txt с помощью notepad.exe. Конечно же, запустим notepad.exe в песочнице (рис. 5).

Рис. 5. Модифицированный текстовый файл

И вот то, о чем мы говорили. Два изолированных приложения не изолированы друг от друга. Получается, что такую изоляцию делали не совсем понятно для чего. Даже шифровальщик, не получив доступ к локальным папкам на компьютере, может пошифровать все в завиртуализованной директории, а если «повезет», то и на сетевых ресурсах, так как настройки для песочницы одни для всех изолируемых приложений.

 

Нюанс №2, или недоизоляция

Да, изолируемые процессы не могут достучаться до доверенной части системы... но в большинстве реализаций только на запись. То есть они могут читать отовсюду практически без ограничений и часто имеют доступ к сети. Это сделано, видимо, для большей совместимости, но это нельзя назвать изоляцией.
Попробуй провести простенький опыт с песочницей на свой выбор. Создай директорию на жестком диске. Скажем, такую: E:\Photos. Помести в нее, например, фотографию (рис. 6).

Рис. 6. Приватная фоточка

Запусти Internet Explorer в песочнице и попробуй отправить данное изображение, скажем, на rghost.

Рис. 7. Изолированный браузер по умолчанию имеет доступ на чтение к даннымРис. 8. Изолированное в песочнице приложение сумело украсть приватную фотографию

Ну и как? Получилось? Если опыт удался, то это не очень хорошо. Еще хуже, если в песочнице отсутствует возможность задать директории, к которым изолированные приложения не будут иметь доступ. И совсем нехорошо, если изолированные приложения могут читать данные из директорий текущего пользователя.

Виртуализация файловой системы и реестра в большинстве реализаций построена по принципу «копирование по требованию». То есть если файл нужно просто прочитать, то он читается из исходной директории при отсутствии аналога в виртуальной директории. Если такой же файл присутствует в виртуальной директории, то изолируемое приложение будет работать с ним. То же можно сказать про виртуальный реестр. Ну и понятно, что при попытке записать файл по реальному пути он запишется в виртуальную файловую систему. Почти всегда.

Таким образом, если малварь «изолирована» в такой песочнице, то она сможет иметь полный доступ ко всем другим «изолируемым» процессам, практически ко всем данным в системе на чтение и к завиртуализованным (сохраняемым изолированными приложениями) данным (которые часто общие для всех изолируемых приложений) на запись.

 

Нюанс №3, или «а давайте сделаем еще один велосипед, это так интересно»

Нас всегда удивляла поразительная способность некоторых антивирусных компаний решать задачи в лоб, не задаваясь вопросом, а надо ли решать эту задачу вообще, надо ли решать ее именно так, надо ли ломать что-то одно, чтобы построить что-то другое. Создается такое ощущение, что все решения банально и бездумно слизываются друг у друга. Впрочем, деньги есть — ума не надо, как говаривал кто-то из классиков. Если запустить утилиту Wincheck от Red Plait, то можно увидеть, как именно реализованы механизмы изоляции, и заодно ответить на вопрос, почему качество изоляции под 64-битные версии Windows заметно слабее, чем под 32-битные.

Wincheck — шустрая, достаточно надежная и бесплатная утилита, которая позволяет искать rootkit’ы в системе. Cкачиваем Wincheck, запускаем и можем увидеть что-то типа этого:

SDT entry C (ZwAdjustPrivilegesToken) hooked 872DB50E \SystemRoot\system32\DRIVERS\dirtyguard.sys!
 SDT entry 16 (ZwAlpcConnectPort) hooked 872DB91A \SystemRoot\system32\DRIVERS\dirtyguard.sys!
 SDT entry 17 (ZwAlpcCreatePort) hooked 872DB8C8 \SystemRoot\system32\DRIVERS\dirtyguard.sys!
 ...
 ...
 ...
 SDT entry 170 (ZwSystemDebugControl) hooked 872DABCC \SystemRoot\system32\DRIVERS\dirtyguard.sys!
 SDT entry 172 (ZwTerminateProcess) hooked 872DA534 \SystemRoot\system32\DRIVERS\dirtyguard.sys!
 SDT entry 173 (ZwTerminateThread) hooked 872DA302 \SystemRoot\system32\DRIVERS\dirtyguard.sys!

Большинство реализаций песочниц используют rootkit-технологии, перехватывая солидную часть функций ядра. В этом листинге приведены банальные хуки записей таблицы дескрипторов системных сервисов (SSDT), которая, кстати, охраняется PatchGuard (но об этом позже). И так делают многие.

К слову, тот факт, что у некоторых производителей антивирусных решений из флагманских продуктов пропала песочница, можно объяснить тем, что PatchGuard начал контролировать Shadow SSDT, которая отвечает за работу с окнами и располагается в win32k.sys. Ведь сбежать из песочницы можно и через SetWindowsHookEx, например. Чтобы перекрыть этот способ, надо перехватить NtUserSetWindowsHookEx в Shadow SSDT.
Глядим на результат Wincheck и видим:

Shadow SDT: 90C16000, limit 339
 win32k_sdt[14] (NtGdiBitBlt) hooked, addr 872DF818 \SystemRoot\system32\DRIVERS\dirtyguard.sys
 win32k_sdt[125] (NtGdiDeleteObjectApp) hooked, addr 872E0160 \SystemRoot\system32\DRIVERS\dirtyguard.sys
 ...
 ...
 ...
 win32k_sdt[588] (NtUserSetWinEventHook) hooked, addr 872E046A \SystemRoot\system32\DRIVERS\dirtyguard.sys
 win32k_sdt[595] (NtUserSystemParametersInfo) hooked, addr 872DE56A \SystemRoot\system32\DRIVERS\dirtyguard.sys

Есть масса статей на тему того, что это rootkit-технологии и это небезопасно, но кого это когда-то останавливало... Своим путем, через тернии и жесткий хукинг ядра, разработчики песочниц пытаются реализовать механизмы контроля доступа Windows заново! Сейчас они находятся где-то на уровне Windows 2000, сильно опережая ее по забагованности. И это логично, так как несколько даже очень талантливых разработчиков не смогут учесть всех нюансов тех вещей, которые создавались годами и тестировались миллионами пользователей.

При этом практически никто не использует штатные отлаженные встроенные механизмы безопасности самой ОС. Вместо этого их пытаются обойти и предлагают взамен непонятный суррогат, что вряд ли поможет против серьезной угрозы, а иногда может и навредить, так как поверхность атаки увеличивается.

В середине 2013 года мы протестировали способ побега из песочниц на основе инжекта в explorer.exe. Это был PowerLoader. Подавляющее большинство песочниц не устояло. В некоторых потребовалось сделать банальные вещи, вроде снять юзермодные хуки или вызвать напрямую ядро, и вопрос был решен. Хорошо сопротивлялись только две, одна из которых на текущий момент не развивается, а другую убрали из флагманского продукта (антивирус). Это говорит о том, что способ, основанный на перехватах, защищает только от известных разработчикам способов побега из песочниц!

Хотя не будем столь критичны. Есть решения, которые научились использовать механизмы безопасности ОС, не ломая их. Итак, если ты не видишь хуков ядра, то есть вероятность, что производители более грамотно подошли к вопросу изоляции.

Давай попробуем проверить. Для начала скачаем бесплатную утилиту Process Hacker. Запустим изолированный Internet Explorer, после чего — Process Hacker (рис. 9).

Рис. 9. Запущенный Process Hacker

На скриншоте мы видим выделенные темным процессы. Эти процессы запущены из-под анонимного пользователя (NT AUTHORITY\ANONYMOUS LOGON) и имеют уровень целостности (Integrity Level) Untrusted, а их Logon SID — S-1-5-7. Да-да, речь идет о Sandboxie. Только они так делают. Подробнее об уровнях целостности и механизмах безопасности Windows мы настоятельно рекомендуем почитать в книге Марка Руссиновича и Дэвида Соломона Windows Internals. Сейчас же скажем, что процесс запущен таким образом, что не имеет прав доступа практически ни к чему, и, если бы не одно но, процесс был бы выгружен из памяти операционной системой, а говоря проще, свалился бы. Тем не менее он не падает, а работает. И изолирован, без хуков ядра и без аппаратной виртуализации (тоже хуки, но об этом позже). Как же так происходит? Посмотрим повнимательнее.

Раз уж мы, помимо всего прочего, делаем некий мини-обзор хакерских утилит, то нельзя пройти мимо GMER. Скачаем, запустим и поглядим. Хуков ядра нет. Уже хорошо. А что же есть? Как процесс, который запущен так, что не должен работать, работает? И здесь на помощь приходят те же хуки, но в пользовательском режиме. Типа таких:

.text C:\Program Files\Internet Explorer\iexplore.exe[2852] ntdll.dll!NtAdjustPrivilegesToken 7565268 10 Bytes JMP 73AAB7E0 C:\Program Files\Sandboxie\SbieDll.dll

То есть в каждом приложении, запущенном в песочнице, огромная масса перехватов (сплайсинг) на уровне пользователя, которые через механизмы межпроцессного взаимодействия проксируют запросы в центр принятия решений. По всей видимости, в данном случае это сервис SbieSvc (впрочем, там и в драйвере логики немало). А данный центр, сверяясь с базой, принимает какие-то разрешительные или запретительные решения. При этом, если избавиться от хуков, приложение перестанет работать, так как ему запрещено практически все. Иными словами, данное решение реализует в чистом виде принцип «Что не разрешено, то запрещено».

Однако в таком подходе есть ряд минусов, связанных, во-первых, с быстродействием (каждый перехват должен быть обработан), во-вторых, с совместимостью с антивирусными решениями (они не очень любят хуки, даже пользовательского режима), в-третьих, с совместимостью с программами, защищенными протекторами (там своя песня, и они тоже очень не любят хуки, иногда предательски от них избавляясь). Ну и «портянка» разрешительных правил весьма велика, что влечет за собой проблемы совместимости и быстродействия.

 

Нюанс №4, или почему плохо пилить сук, на котором сидишь

В большинстве реализаций изолируемое приложение запускается под тем же пользователем, что и неизолируемое. Для реализации изоляции недостаточно фильтровать работу с файловой системой и реестром. Надо отслеживать открытие handle’ов, работу с COM-объектами, с ALPC в целом, с окнами и много чего еще, что штатно умеет делать Windows, в частности SRM (Security Reference Monitor). По своей старой традиции производители защитных технологий решают эти задачи хуками. Мы уже подробно писали об этом выше.

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

Очень часто маркетологи антивирусных компаний (и не только) подают нам использование аппаратной виртуализации как некую фичу, которая кардинально увеличит безопасность. Это сейчас тренд такой, активно подогреваемый нами, системными программистами. Мы же любим большие, сложные, наукоемкие и многобюджетные проекты! Но на самом деле в большинстве случаев уход на уровень гипервизора — это побег от PatchGuard, не более того. Возможность ставить хуки безнаказанно. Во всяком случае, пока :). Ну и да, это во всех отношениях дорого, начиная с требования к железу и заканчивая дороговизной разработки. Гипервизоры писать недешево. За все платит потребитель, разумеется.

 

Немного о встроенных механизмах безопасности Windows и изоляции процессов с их помощью

Как мы заметили выше, на рынке крайне мало решений, которые в принципе используют встроенные механизмы безопасности Windows. То, о котором мы говорили, использует их, но весьма оригинальным способом — только для запрещения. Этот путь чреват рядом проблем.

А как еще можно использовать эти механизмы для изоляции процессов? На самом деле можно запускать приложения под разными пользователями, и большую часть работы сделают встроенные механизмы разделения доступа Windows. Хотя, конечно же, мини-фильтры на файловую систему и реестр все-таки нужны.

Используя штатные механизмы дискреционного контроля доступа (манипуляции с DACL объектов), мы можем регулировать права доступа субъектов (наших изолированных программ, запущенных под новыми пользователями) к объектам (файловой системе, реестру). Помимо этого, мы можем совершенно документированно и безопасно регулировать права доступа к станции, права доступа к рабочему столу, системные привилегии и уровень доверия.

Однако и здесь есть ряд нюансов, если их не учитывать, можно свести безопасность решения к нулю либо понизить его стабильность.

 

Как правильно запускать процессы под другим пользователем

Есть такой факт: начиная с Windows Vista механизм Run As «сломан». И хоть это не совсем новость, но пока не все об этом знают. Проведем простой эксперимент. Запустим Process Explorer. Запустим notepad.exe. Кликнем два раза в окне Process Explorer на notepad.exe. Зайдем во вкладку Security и выберем там вкладку Permissions (рис. 10).

Рис. 10. Logon SID

Мы видим некоторую неизвестную учетную запись, имеющую SID S-1-5-5-0-80701. Это Logon SID. Разрешения процесса для Logon SID: Query limited information, Query information, Read memory, Terminate, Synchronize, Read. Разрешения токена для Logon SID: Assign as primary token, Duplicate, Impersonate, Query, Query source and Read. Разрешения потока для Logon SID: Query limited information, Query information, Get context, Synchronize and Read.

Все это означает, что если процесс стартует под другим пользователем посредством Run As (который запускает процесс с текущим Logon SID), то в большинстве случаев поток данного процесса сможет получить токен другого процесса (целевого, запущенного под исходным пользователем), имперсонировать контекст безопасности целевого процесса и получить все права, которыми обладает целевой процесс, что будет означать выход из изоляции.

Таким образом, при анализе средства изоляции процессов нужно обращать внимание на Logon SID, с которым был запущен изолируемый процесс. Даже если процесс запущен под другим пользователем, то в случае совпадения Logon SID побег из песочницы может быть возможен.

Существует всего три документированных способа запустить процесс от имени другого пользователя:

  • CreateProcessWithLogonW. На вход принимает логин и пароль, создает процесс с тем же Logon SID. Не подходит.
  • CreateProcessAsUser. Создает процесс с тем же Logon SID. Не подходит.
  • CreateProcessWithTokenW. Единственная подходящая функция.
    Именно CreateProcessWithTokenW необходимо использовать для запуска приложений под другим пользователем. Это единственно верное решение.

 

Коварный десктоп и изоляция

Начиная с Vista в ОС Windows появился защитный механизм UIPI (User Interface Privilege Isolation). Этот механизм регулирует обмен сообщениями между приложениями с разными уровнями доверия (Integrity levels). А теперь вспомним старушку Windows XP.

Рис. 11. Проверка возможности выполнения SetWindowsHookEx в ядре Windows XP

На рис. 11 видно, что если приложение запущено под другим пользователем, то SetWindowsHookEx не отработает для приложений, запущенных, например, под текущим пользователем. Изоляция работает! Но в Windows XP :(. Поглядим, что происходит в более молодых ОС семейства Windows (рис. 12).

Рис. 12. Проверка возможности выполнения SetWindowsHookEx в молодых семействах Windows

А здесь ситуация гораздо более интересная. Если UIPI включен (переменная gbEnforceUIPI равна TRUE), то проверка пользователей, под которыми запущены приложения, на эквивалентность опускается!

Иными словами, если ты запускаешь приложение под другим пользователем в Windows Vista и выше на том же рабочем столе, что и приложения других пользователей, и при этом для приложения выставлено право доступа рабочего стола DESKTOP_HOOKCONTROL, то побег из такой песочницы становится тривиальным. Право доступа рабочего стола DESKTOP_HOOKCONTROL разрешает перехватывать любые оконные сообщения и позволяет устанавливать оконные перехваты. Если отключить DESKTOP_HOOKCONTROL, то большой ряд приложений перестанет работать. Например, рантайм MS Visual Studio требует, чтобы присутствовало это право доступа. В противном случае все приложения, скомпилированные с помощью MS Visual Studio, не будут функционировать.

Решений проблемы не особо много:

  1. Использовать хуки (проблема с PatchGuard и все те прелести, о которых мы говорили выше).
  2. Запускать приложение с выключенным UIPI, который прибит гвоздями к UAC (User Account Control), что автоматически означает отключение UAC — одного из важнейших механизмов безопасности Windows (путь не для тех, у кого руки растут из плеч). И да, мы видели такое в одном не особо популярном решении по изоляции процессов :).
  3. Запускать изолируемые приложения на отдельных рабочих столах (путь для просветленных системных программистов, познавших Истину).

То есть если песочница вообще не использует отдельных рабочих столов в процессе изоляции приложений, то дело нехорошо попахивает одним из двух первых пунктов.

Но и с отдельными рабочими столами поджидают подводные камни. Оказывается, не все приложения любят запускаться на другом рабочем столе. Некоторые особо вредные принципиально проверяют, на каком рабочем столе они запускаются. Например, Firefox может некорректно обновляться на отдельном рабочем столе, завершаясь сразу после запуска. Связано это с тем, что процесс обновления запускается явно на winsta0/default, что приводит к невозможности запуска из-за отсутствия прав доступа. Если это запатчить или запускать на текущем рабочем столе, все будет работать. К счастью, для Firefox и его форков можно отключить DESKTOP_HOOKCONTROL, что не делает необходимым запуск на отдельном рабочем столе.

Yandex-браузер (версия 13.12.1599.12987) содержит библиотеку C:\Users\xxx\AppData\Local\Yandex\YandexBrowser\Application\30.0.1599.12987\browser.dll. В ней где-то рядом с ChromeBrowserMainParts::PreMainMessageLoopRunImpl есть процедура, в которой вызывается GetStartupInfo, из нее берется lpDesktop (в ней обычно WinStation\Desktop), через поиск "\" вырезается имя рабочего стола и сравнивается с именем рабочего стола, полученного через OpenInputDesktop, то есть, по сути, с текущим активным рабочим столом. Если не совпадает, инициализация считается проваленной, браузер завершается.

Отвлечемся от главной темы и заметим, что так сравнивать некорректно. Нельзя проверять только имя рабочего стола, надо учитывать и рабочую станцию. Более того, реальный рабочий стол может быть и вовсе не тот, что вернула GetStartupInfo. По понятной причине такой подход не дает стартовать Yandex-браузер на отдельном рабочем столе. Специалисты Yandex сказали, что это какая-то хитрая защита от прокликивания. Менять ее особо не стали с тех пор. Возможно, немного усовершенствовали. К счастью, Yandex-браузер не требует права доступа DESKTOP_HOOKCONTROL, что позволяет запускать его изолированно на текущем рабочем столе.

Таким образом, чтобы песочница была более универсальной, в ней попросту необходим некоторый набор правил для наиболее популярных приложений — уменьшить вовлеченность пользователя в волшебный мир настройки продукта под себя. Как пример, Firefox и Thunderbird приблизительно после версии 37 не будут корректно отображать окна, если в разрешениях рабочего стола не окажется DESKTOP_JOURNALRECORD и DESKTOP_JOURNALPLAYBACK. О таких мелочах песочнице желательно бы знать заранее.

 

Идеальный мир, или какой должна быть песочница

В результате своих исследований мы поняли, что надежная песочница должна обладать следующими свойствами:

  1. С максимальной эффективностью использовать встроенные механизмы безопасности платформы, на которой она работает.
  2. Уметь изолировать каждый процесс в отдельно настраиваемой изолированной среде.
  3. Давать возможность регулировать доступ для каждого из процессов к объектам файловой системы и реестра, сменным носителям информации, сети, задавать привилегии и уровень доверия. То есть она должна быть максимально настраиваемой под конкретное поле применения.
  4. Быть относительно легкой в использовании.
  5. Журналировать свою работу. Желательно делать это в журнале ОС.
  6. Не использовать хуков ядра ни при каких обстоятельствах.
  7. Не ломать существующие механизмы безопасности ОС и вообще саму ОС.
  8. Иметь постоянно расширяемую базу первоначальных настроек, чтобы как можно меньше вовлекать пользователя в процесс администрирования.

Все эти требования мы попытались воплотить в жизнь в тулзе под именем ReHIPS. Она абсолютно бесплатна, и поэтому можешь вполне легально ее скачать и поиграться с ней. Кто знает, быть может, удача улыбнется тебе и именно ты сможешь найти способ удрать из нашей песочницы. В любом случае ты всегда можешь прислать нам отзыв о своих впечатлениях от использования продукта, за что мы будем очень благодарны.

 

Ну и в конце

Задача изоляции процессов только на первый взгляд кажется не такой уж сложной, но на деле тут скрывается большое число подводных камней. Каждый вендор решает эту задачу по-своему, кто-то более успешно, кто-то менее. Теперь ты представляешь все слабые и проблемные места современных песочниц, поэтому, когда понадобится запустить потенциально опасное приложение, сможешь подобрать соответствующий инструмент для его изоляции от основной системы.

Как найти файл по содержимому

Привет, друзья. В этой публикации рассмотрим такой вопрос: как найти файл по содержимому. Т.е. по каким-то отдельным ключевым словам или словосочетаниям. Если вам нужно найти на своём компьютере какой-то документ или текстовый файл, при этом вы не помните его название, но вам чётко врезались в память отдельные слова или фразы с этого документа, вы найдёте этот документ. Правда, поиск в проводнике Windows для этих целей не годится, его лучше использовать только для поиска данных по ключевым фразам в названиях файлов. Для поиска по текстовому содержимому файлов необходимо прибегнуть к различным сторонним программам. И мы рассмотрим несколько таких - Total Commander, Everything, Archivarius 3000.

Как найти файл по содержимому

***

Друзья, к рассмотрению темы, как найти файл по содержимому, меня подтолкнула просьба о помощи одного читателя сайта:

Здравствуйте, админ. Проблема такая: срочно нужно найти файл по его содержимому среди целой кучи других похожих файлов, находящихся на жёстком диске моего компьютера. У меня на диске D находится много папок с файлами, и среди них есть текстовый файл с решением одной математической задачи. Но я помню только часть исходных данных y0= (4*2-22)/4=1, более ничего не помню. Расширение файла тоже не помню, это может быть «.txt», «.doc», «.xlsx», «.ttf» и даже «.phtml» или «.php3». Пробовал применить программу Multi Text Finder, но она ничего не нашла.

Программа Multi Text Finder, друзья, с виду вроде бы серьёзная, в ней можно выбирать типы документов для поиска, ключевые слова для поиска по содержимому документов, можно использовать маски поиска. Но, увы, это программа совершено бесполезна, найти файлы, содержащие текст, она не может. Возможно, в какой-то части случаев она и работает, но мой тест показал её полную непригодность. Я указал место поиска, ввёл ключевое слово, запустил поиск. Но поиск ничего не обнаружил.

Хотя по указанному пути документ не то, что с ключевым словом внутри, с ключевым словом в названии есть.

Увы, так бывает. Эту программу мы, друзья, отправим в топку. И давайте посмотрим на эффективные программы, которые реально помогут нам найти нужный файл, содержащий текст, какой мы помним.


Примечание: друзья, проводник Windows не ищет файлы по их внутреннему содержимому, но у него есть иные критерии поиска, с помощью которых вы можете сузить область поиска нужного вам файла. Как работать с поиском в системном проводнике, смотрите в статье «Как найти файл на компьютере».

Total Commander

Поиск файлов по ключевым словам в их тексте предусматривает функциональный файловый менеджер Total Commander. Эта программа сможет найти исчезнувший на вашем компьютере файл и по содержащемуся тексту, и по названию, и по расширению, и по дате создания, и по различным атрибутам. Ну и также у Total Commander много прочих интересных возможностей для опытных пользователей, так что если вы никогда не пользовались этим файловым менеджером, решение вашей проблемы может стать идеальным поводом для знакомства с ним и исследования прочих его возможностей.

Как найти файл по содержимому в Total Commander? На его панели инструментов есть кнопка поиска файлов, кликаем её. Или можем использовать горячие клавиши Alt+F7.

В форме поиска выбираем место поиска, можем указать весь раздел диска, на котором предположительно хранится нужный нам файл. И вводим ключевой запрос. Если мы его введём в графу «Искать файлы», поиск будет выполнен по названиям файлов. Если же мы активируем графу «С текстом» и в неё впишем ключевой запрос, то поиск будет выполняться по содержимому файлов. Что, собственно, и нужно нам. Вписываем в графу «С текстом» те слова или фразы, которые мы помним. И жмём «Начать поиск».

И далее по мере выполнения поиска на нижней панели окошка мы получим результаты поиска. И вот нам удалось найти файл, содержащий текст, который мы помним. 

А вот и сам файл.

Чтобы поиск выполнялся быстрее, нужно максимально сузить его область, т.е. указать более точный путь нахождения файла. И тогда процедура поиска займёт меньше времени.

Everything 

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

Итак, программа Everything. Дабы искать в ней файлы по названиям, вводим ключевое слово из названия в поле программы в её главном окне.

Если же мы хотим найти файл, содержащий текст, в меню «Поиск» запускаем «Расширенный поиск».

Указываем ключевые слово или фразу. И желательно указать местоположение искомого файла, хотя бы примерное, хотя бы просто раздел диска. Если хотите, можете использовать другие фильтры и настройки расширенного поиска. 

И, вуаля – файл найден.

FileSearchy

Archivarius 3000

И ещё одну программу, друзья, рассмотрим, которая может найти файлы, содержащие текст, какой мы помним – это программа Archivarius 3000. Но это программа максимум-уровня, это суперфункциональный внутрисистемный поисковик файлов, включающий возможность поиска документов по их содержимому. И такой поиск программа выполнят мгновенно за счёт индексации содержимого указанных нами областей компьютера. Это не программа-однодневка, она платная, нужна она не всем, а только тем, кто постоянно работает с документами, у кого на компьютере хранятся большие их базы, и кому принципиально нужна оперативность и эффективность при поиске данных. Archivarius 3000 изначально индексирует указанные нами пути хранения документов, и впоследствии периодически также выполняет индексацию, чтобы в индексе всегда были актуальные сведения.

Механизм поиска у Archivarius 3000 такой, как у поисковых систем: программный поисковик ищет файлы не только с прямым вхождением наших ключевых запросов, но также с изменёнными словоформами, т.е. с разными падежами существительных и прилагательных имён, с разными временами глаголов и прочими морфологическими изменениями. И также при поиске учитывается плотность ключевых слов, а результаты поиска выстраиваются по релевантности. Друзья, программа очень серьёзная, у неё настраиваемый механизм индексации, собственный просмотрщик документов. Более того, программа даже может обеспечивать удалённый доступ к нашей базе документов по принципу сервера, и мы сможем искать файлы на нашем компьютере, будучи далеко от него, по сути, из любой точки мира. Так что в нескольких словах об этой программе не расскажешь, она достойна отдельного обзора. Покажу лишь, как пользоваться настроенной программой.

Как найти файл по содержимому с использованием Archivarius 3000? Вводим ключевой запрос, будь это слова из названия, будь это слова в тексте документа. И отсматриваем результаты поиска. Смотрим, где встречается все слова из нашего запроса.

При необходимости можем задействовать фильтры поиска - атрибуты в терминологии самой программы.

Метки к статье: Программы

Как узнать, какой процесс блокирует файл или папку в Windows

Как я могу узнать, какой процесс блокирует файл или папку в Windows? Например, при попытке удалить папку Windows сообщает следующее:

Операция не может быть завершена, так как эти папка или файл открыты в другой программе. Закройте папку или файл и повторите попытку.

Такая же ошибка может возникнуть при переименовании или удаления как папки, так и файла. Но как узнать, какая программа или приложение в настоящее время использует его и не позволяет удалить файл или папку?

Имеется сразу несколько способов и программ чтобы найти процессы и программы, которые открыли файл.

1. Монитор ресурсов

Для поиска программы или процесса, открывшей файл, вы можете использовать Монитор ресурсов (Resource Monitor), который встроен в Windows 7, 8 и 10.

Откройте Монитор ресурсов, это можно сделать несколькими способами:

  • В поле для поиска введите «Монитор ресурсов» или resmon.exe:

  • Или в Диспетчере задач перейдите на вкладку «Производительность» и найдите кнопку «Открыть монитор ресурсов»:

В Мониторе ресурсов перейдите на вкладку ЦП (CPU). Используйте поле поиска в разделе «Связанные дескрипторы»

В результатах поиска в столбце «Образ» вы увидите, какая программа запустила процесс, блокирующий файл.

Здесь же вы можете кликнуть правой кнопкой мыши по любому найденному процессу и нажать «Завершить процесс», чтобы закрыть программу, блокирующую файл.

2. Process Explorer

Process Explorer — это официальная программа от Microsoft/SysInternals, которую можно скачать по ссылке: https://download.sysinternals.com/files/ProcessExplorer.zip

Описание программы на сайте Microsoft: https://docs.microsoft.com/ru-ru/sysinternals/downloads/process-explorer

Перейдите в FindHandle or DLL.

В текстовом поле "Handle or DLL substring:" введите путь до файла или папки. Будут показаны все процессы, которые имеют открытый обработчик на этот файл.

3. OpenedFilesView

OpenedFilesView это бесплатная программа не требующая установки, она покажет все открытые файлы, имеется возможность искать по имени или пути файла:

Сайт программы: https://www.nirsoft.net/utils/opened_files_view.html

4. LockHunter

LockHunter — это надёжная программа для разблокировки файлов.

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

Ключевые особенности

  • Показывает процессы, блокирующие файл или папку
  • Предоставляет вам подробную информацию о процессе
  • Позволяет разблокировать, удалить, скопировать или переименовать заблокированный файл
  • Может удалить файл при следующей перезагрузке ОС
  • Позволяет убить процесс блокировки
  • Позволяет удалить процессы блокировки с жёсткого диска
  • Может выгружать DLL из процессов
  • Интегрируется в меню Проводника
  • Он удаляет файлы в корзину, поэтому вы можете восстановить их, если удалили по ошибке
  • Поддерживает как 32, так и 64 битную Windows

Сайт программы: https://lockhunter.com/

Связанные статьи:

Найдены внедренные файлы или объекты

Инспектор документов обнаружил один или несколько внедренных файлов (например, документы Office или текстовые файлы) либо объектов (например, диаграммы или уравнения), данные которых не видны в документе.

Например, это может быть внедренная в презентацию PowerPoint диаграмма Excel с базовыми данными, которые можно просмотреть только в Excel. Или же это могут быть кэшированные данные, лежащие в основе диаграммы, которые опять же не видно.

Проблема

Инспектор документов не может удалить эти файлы или объекты, потому что они могут быть важной частью вашего документа. Например, диаграмму Excel, вставленную в презентацию PowerPoint, вы скорее предпочтете не удалять, а заменить копией изображения диаграммы.

Рекомендуемое решение

  1. Закройте инспектор документов.

  2. Определите подходящий способ решения проблемы. Например, если вы хотите сохранить внедренную диаграмму Excel, но удалить все скрытые данные, можно преобразовать диаграмму в рисунок.

    Вот как это сделать:

    1. Выделите область диаграммы и нажмите клавиши CTRL+C.

    2. Выберите место для вставки изображения диаграммы, нажмите клавиши CTRL+ALT+V, затем выберите формат Рисунок.

    3. Выделите исходную внедренную диаграмму и нажмите клавишу DELETE.

  3. Чтобы просто удалить внедренный файл или объект, выделите его и нажмите клавишу DELETE.

  4. Чтобы убедиться, что проблема устранена, выберите Файл > Сведения > Поиск проблем > Инспектор документов.

Подробнее о внедренных объектах

Инспектор документов обнаруживает OLE-объекты или пакеты, которые были добавлены в диалоговом окне Объект (в приложении Office щелкните Вставка > Объект) или с помощью команд копирования и вставки.

Вот некоторые примеры типов объектов:

  • точечные рисунки;

  • объекты Microsoft Equation 3.0;

  • диаграммы Microsoft Graph;

  • презентации Microsoft PowerPoint;

  • документы Microsoft Visio;

  • документы Microsoft Word;

  • текст OpenDocument.

Поисковики файлов - что это, зачем и почему мы не слышали об этом раньше?

В Интернете доступно огромное количество серверов, работающих по протоколу FTP. (Чем протокол FTP отличается от HTTP/HTTPS, что будет, если заменить начало URL-адреса большинства сайтов — можно прочитать в любом специализированном справочнике, сейчас же интересно рассмотреть поисковики, индексирующие файлы на FTP-серверах).

Так как большинство FTP-серверов хранит данные в свободном доступе, без необходимости ввода логина и пароля, (а если с паролем — то создатели поисковой системы стараются узнать его и предоставить доступ своим пользователям) потому, что не каждый хост определен владельцем как хранилище приватных данных или данных сайта — очевидно, что возникает возможность просматривать и индексировать файлы, лежащие на серверах, допускающих анонимное подключение.

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

Подобные поисковики — это история только про файлы. Без агрессивной рекламы, редиректов, всплывающих окон, внезапных звуков, громоздких фреймов и т.д. Просто ссылки на файлы — и все. Вы получаете комплект файлов, подключаетесь к серверу и загружаете к себе на компьютер нужные вам файлы через FTP-клиент или «проводник».

FTP-поисковики нужны для быстрого поиска, быстрой загрузки и концентрации ресурсов компьютера и пользователя исключительно на поиске файлов — без навязчивой рекламы, всплывающих окон и потери скорости.

Сразу стоит сказать, что рассматриваемые ниже сервисы — это далеко не полный список решений, доступных в нише поисковых систем, работающих по протоколу FTP, но это список наиболее крупных и мощных сервисов с обширной базой доступных серверов и мощным функционалом поиска.

Проект запущен более 20 лет назад. FS индексирует огромное количество российских FTP-серверов и тысячи зарубежных. Доступны только серверы с анонимным доступом. На момент написания данной статьи, индексная база составляет 31 595 791 файлов общим объемом 51565.6 Gb. Сервис регулярно обновляет индексы и следит за наличием файлов на серверах, что видно при поиске — неактивных ссылок в выдаче практически нет, так как они удаляются из базы индексации в течение нескольких недель

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

Проект Константина Айги, на который обязательно стоит обратить внимание, так как проект разрабатывал всего один человек с абсолютного нуля.

Во многом функционал этого поисковика совпадает с FileSearch.ru, уступает в количестве проиндексированных файлов, поддерживает обычный веб-поиск по сайтам, а также поиск внутри архивов.

На фоне остальных рассмотренных поисковиков выглядит пестрой рекламной доской объявлений, с нелогично составленными блоками и внешне (как и многие другие FTP-поисковики) похож на сайт двадцатилетней давности. По функционалу беднее, чем FileSearch.ru, выдает до 2000 результатов и не поддерживает поиск по регулярным выражениям.

Как уже было сказано выше, это далеко не все имеющиеся решения, позволяющие осуществлять FTP-поиск, а лишь список, состоящий из нескольких крупных проектов, и необходимый для получения общего представления о теме статьи. С появлением файлообменников и развитием таких поисковых гигантов как Google, изолированные FTP-поисковики постепенно уходят в прошлое, становятся заброшенными (частично или полностью) или вовсе уходят в историю развития интернет-технологий.

Скорее всего, буквально через несколько лет поиск по протоколу FTP уйдет в прошлое так как современные поисковые решения уже стирают границы, во всяком случае, для конечного пользователя и умеют находить и текстовые документы, и архивы, и музыку по напеваемому фрагменту, а с помощью нейронных сетей могут догадываться о том, что конкретно хочет увидеть конкретный пользователь на видео. К сожалению, основное преимущество FTP-поисковиков в скорости уничтожается, становится незаметным и неосязаемым с развитием вычислительной мощности, а также технологий индексации и хранения данных. Но, если вам интересен поиск файлов по FTP — теперь вы знаете, куда обратиться.

c # - есть ли лучший способ узнать, существует ли файл IsolatedStorage или нет?

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
.

windows phone 8 - как получить изолированный файл в списке wp8

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
.

python - как найти изолированные вершины?

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
.

Изолированное хранилище | Документы Microsoft

  • 17 минут на чтение

В этой статье

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

Важно

Изолированное хранилище недоступно для Windows 8.x Магазин приложений. Вместо этого используйте классы данных приложения в пространствах имен Windows.Storage , включенных в Windows Runtime API, для хранения локальных данных и файлов. Дополнительные сведения см. В разделе Данные приложения в Центре разработки Windows.

Отделения и хранилища данных

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

В изолированном хранилище данные всегда изолированы по пользователю и по сборке. Учетные данные, такие как происхождение или строгое имя сборки, определяют идентичность сборки. Данные также могут быть изолированы по домену приложения с использованием аналогичных учетных данных.

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

Квоты для изолированного хранилища

Квота - это ограничение на объем изолированного хранилища, которое можно использовать.Квота включает байты файлового пространства, а также накладные расходы, связанные с каталогом и другой информацией в хранилище. Изолированное хранилище использует квоты разрешений, которые представляют собой ограничения хранилища, которые устанавливаются с помощью объектов IsolatedStoragePermission. Если вы попытаетесь записать данные, превышающие квоту, выдается исключение IsolatedStorageException. Политика безопасности, которую можно изменить с помощью инструмента настройки .NET Framework (Mscorcfg.msc), определяет, какие разрешения предоставляются коду. Код, которому предоставлено разрешение IsolatedStoragePermission, не может использовать больше хранилища, чем позволяет свойство UserQuota.Однако, поскольку код может обходить квоты разрешений, представляя разные идентификаторы пользователей, квоты разрешений служат руководством для того, как должен вести себя код, а не жестким ограничением поведения кода.

Квоты не применяются для магазинов в роуминге. Из-за этого для их использования в коде требуется немного более высокий уровень разрешений. Значения перечисления AssemblyIsolationByRoamingUser и DomainIsolationByRoamingUser указывают разрешение на использование изолированного хранилища для перемещающегося пользователя.

Безопасный доступ

Использование изолированного хранилища позволяет частично доверенным приложениям хранить данные в соответствии с политикой безопасности компьютера. Это особенно полезно для загруженных компонентов, которые пользователь может захотеть запустить с осторожностью. Политика безопасности редко предоставляет такое разрешение кода при доступе к файловой системе с использованием стандартных механизмов ввода-вывода. Однако по умолчанию код, выполняемый с локального компьютера, локальной сети или Интернета, получает право использовать изолированное хранилище.

Администраторы могут ограничить объем изолированного хранилища, доступного для приложения или пользователя, на основе соответствующего уровня доверия. Кроме того, администраторы могут полностью удалить сохраненные данные пользователя. Чтобы создать изолированное хранилище или получить к нему доступ, коду должно быть предоставлено соответствующее разрешение IsolatedStorageFilePermission.

Для доступа к изолированному хранилищу код должен иметь все необходимые права операционной системы собственной платформы. Списки управления доступом (ACL), которые определяют, какие пользователи имеют права на использование файловой системы, должны быть удовлетворены.Приложения .NET уже имеют права операционной системы на доступ к изолированному хранилищу, если они не выполняют олицетворение (зависящее от платформы). В этом случае приложение отвечает за обеспечение того, чтобы олицетворенная личность пользователя имела необходимые права операционной системы для доступа к изолированному хранилищу. Этот доступ предоставляет удобный способ для кода, который запускается или загружается из Интернета, для чтения и записи в область хранения, относящуюся к конкретному пользователю.

Для управления доступом к изолированному хранилищу среда CLR использует объекты IsolatedStorageFilePermission.Каждый объект имеет свойства, которые определяют следующие значения:

  • Разрешенное использование, указывающее тип разрешенного доступа. Значения являются членами перечисления IsolatedStorageContainment. Дополнительные сведения об этих значениях см. В таблице в следующем разделе.

  • Квота хранилища, как описано в предыдущем разделе.

Среда выполнения требует разрешения IsolatedStorageFilePermission, когда код впервые пытается открыть хранилище.Он решает, предоставлять ли это разрешение, в зависимости от степени доверия к коду. Если разрешение предоставлено, допустимые значения квоты использования и хранилища определяются политикой безопасности и запросом кода для IsolatedStorageFilePermission. Политика безопасности устанавливается с помощью инструмента настройки .NET Framework (Mscorcfg.msc). Все вызывающие абоненты в стеке вызовов проверяются, чтобы гарантировать, что каждый вызывающий имеет по крайней мере соответствующее разрешенное использование. Среда выполнения также проверяет квоту, наложенную на код, который открыл или создал хранилище, в котором должен быть сохранен файл.Если эти условия соблюдены, разрешение выдается. Квота проверяется снова каждый раз, когда файл записывается в хранилище.

Код приложения не требуется для запроса разрешения, потому что среда CLR предоставит любое разрешение IsolatedStorageFilePermission, соответствующее политике безопасности. Однако есть веские причины запрашивать определенные разрешения, которые необходимы вашему приложению, включая IsolatedStorageFilePermission.

Допустимые риски использования и безопасности

Разрешенное использование, указанное в IsolatedStorageFilePermission, определяет степень, в которой коду будет разрешено создавать и использовать изолированное хранилище.В следующей таблице показано, как разрешенное использование, указанное в разрешении, соответствует типам изоляции, и суммированы риски безопасности, связанные с каждым разрешенным использованием.

Разрешенное использование Типы изоляции Воздействие на безопасность
Нет Использование изолированного хранилища запрещено. Нет воздействия на безопасность.
Изоляция домена от пользователя Изоляция по пользователю, домену и сборке.Каждая сборка имеет отдельную подстроку в домене. Магазины, использующие это разрешение, также неявно изолированы компьютером. Этот уровень разрешений оставляет ресурсы открытыми для несанкционированного чрезмерного использования, хотя принудительные квоты усложняют задачу. Это называется атакой отказа в обслуживании.
Изоляция домена от RoamingUser То же, что и DomainIsolationByUser , но хранилище сохраняется в месте, которое будет перемещаться, если перемещаемые профили пользователей включены и квоты не применяются. Поскольку квоты должны быть отключены, ресурсы хранилища более уязвимы для атак типа «отказ в обслуживании».
Изоляция сборки от пользователя Изоляция пользователем и сборкой. Магазины, использующие это разрешение, также неявно изолированы компьютером. Квоты применяются на этом уровне, чтобы помочь предотвратить атаку отказа в обслуживании. Та же сборка в другом домене может получить доступ к этому хранилищу, что открывает возможность утечки информации между приложениями.
Сборка Изоляция от RoamingUser То же, что и AssemblyIsolationByUser , но хранилище сохраняется в месте, которое будет перемещаться, если перемещаемые профили пользователей включены и квоты не применяются. То же, что и в AssemblyIsolationByUser , но без квот, увеличивается риск атаки отказа в обслуживании.
АдминистрированиеIsolatedStorageByUser Изоляция пользователем. Обычно этот уровень разрешений используют только инструменты администрирования или отладки. Доступ с этим разрешением позволяет коду просматривать или удалять любые файлы или каталоги изолированного хранилища пользователя (независимо от изоляции сборки). Риски включают, помимо прочего, утечку информации и потерю данных.
Неограниченное хранение Изолированное хранилище Изоляция от всех пользователей, доменов и сборок. Обычно этот уровень разрешений используют только инструменты администрирования или отладки. Это разрешение создает возможность полной компрометации всех изолированных хранилищ для всех пользователей.

Безопасность изолированных компонентов хранилища по отношению к ненадежным данным

Этот раздел применим к следующим каркасам:

  • .NET Framework (все версии)
  • .NET Core 2.1+
  • .NET 5.0+

.NET Framework и .NET Core предлагают изолированное хранилище в качестве механизма для сохранения данных для пользователя, приложения или компонента. Это устаревший компонент, в первую очередь разработанный для устаревших сценариев безопасности доступа для кода.

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

API-интерфейсы, чувствительные к безопасности, которые могут считывать данные из всей машины

Компоненты или приложения, которые вызывают любой из следующих API-интерфейсов, считываемых из всей машины:

Изолированный складской инструмент storeadm.На exe повлияет вызов с переключателем / машина , как показано в следующем коде:

  storeadm.exe / машина [любые-другие-переключатели]  

Инструмент изолированного хранилища предоставляется как часть Visual Studio и .NET Framework SDK.

Если приложение не включает вызовы предыдущих API-интерфейсов или рабочий процесс не включает вызов storeadm.exe таким образом, этот документ не применяется.

Воздействие в многопользовательской среде

Как упоминалось ранее, влияние этих API на безопасность возникает из-за того, что данные, записанные из одной доверительной среды, считываются из другой доверительной среды.Изолированное хранилище обычно использует одно из трех мест для чтения и записи данных:

  1. % LOCALAPPDATA% \ IsolatedStorage \ : например, C: \ Users \ \ AppData \ Local \ IsolatedStorage \ для области User .
  2. % APPDATA% \ IsolatedStorage \ : например, C: \ Users \ \ AppData \ Roaming \ IsolatedStorage \ , для области User | Roaming .
  3. % PROGRAMDATA% \ IsolatedStorage \ : например, C: \ ProgramData \ IsolatedStorage \ для области Machine .

Первые два местоположения изолированы для каждого пользователя. Windows гарантирует, что разные учетные записи пользователей на одном компьютере не могут получить доступ к папкам профилей пользователей друг друга. Две разные учетные записи пользователей, которые используют хранилища User или User | Roaming , не будут видеть данные друг друга и не могут вмешиваться в данные друг друга.

Третье расположение является общим для всех учетных записей пользователей на машине. Различные учетные записи могут читать и записывать в это место, и они могут видеть данные друг друга.

Предыдущие пути могут отличаться в зависимости от используемой версии Windows.

Теперь рассмотрим многопользовательскую систему с двумя зарегистрированными пользователями Mallory и Bob . У Мэллори есть возможность получить доступ к каталогу своего профиля пользователя C: \ Users \ Mallory \ , и она может получить доступ к общему хранилищу на уровне машины C: \ ProgramData \ IsolatedStorage \ . Она не может получить доступ к каталогу профиля пользователя Боба C: \ Users \ Bob \ .

Если Мэллори хочет атаковать Боба, она может записать данные в машинное хранилище, а затем попытаться повлиять на Боба, чтобы он прочитал их из машинного хранилища.Когда Боб запускает приложение, которое читает из этого хранилища, это приложение будет работать с данными, размещенными там Мэллори, но из контекста учетной записи пользователя Боба. В оставшейся части этого документа рассматриваются различные векторы атак и шаги, которые приложения могут предпринять, чтобы минимизировать риск этих атак.

Примечание

Чтобы такое нападение произошло, Мэллори требует:

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

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

Повышение привилегии

Атака с повышением привилегий. Атака происходит, когда приложение Боба читает файл Мэллори и автоматически пытается предпринять какие-либо действия на основе содержимого этой полезной нагрузки. Рассмотрим приложение, которое считывает содержимое сценария запуска из хранилища на уровне машины и передает это содержимое процессу .Запустите . Если Мэллори может разместить вредоносный сценарий в хранилище всей машины, когда Боб запускает свое приложение:

  • Его приложение анализирует и запускает вредоносный сценарий Мэллори в контексте профиля пользователя Боба .
  • Мэллори получает доступ к учетной записи Боба на локальной машине.
Отказ в обслуживании

Атака отказа в обслуживании происходит, когда приложение Боба читает файл Мэллори и вылетает или иным образом перестает правильно работать.Снова рассмотрим упомянутое ранее приложение, которое пытается проанализировать сценарий запуска из общесистемного хранилища. Если Мэллори может поместить файл с искаженным содержимым в хранилище всей машины, она может:

  • Заставляет приложение Боба генерировать исключение в начале пути запуска.
  • Запретить успешный запуск приложения из-за исключения.

Затем она отказала Бобу в возможности запускать приложение под его собственной учетной записью.

Раскрытие информации

Атака раскрытия информации Атака происходит, когда Мэллори может обманом заставить Боба раскрыть содержимое файла, к которому Мэллори обычно не имеет доступа.Предположим, у Боба есть секретный файл C: \ Users \ Bob \ secret.txt , который Мэллори хочет прочитать. Ей известен путь к этому файлу, но она не может его прочитать, потому что Windows запрещает ей получать доступ к каталогу профиля пользователя Боба.

Вместо этого Мэллори помещает жесткую ссылку на машинный магазин. Это особый вид файла, который сам по себе не содержит никакого содержимого, а указывает на другой файл на диске. При попытке прочитать файл жесткой ссылки вместо этого будет прочитано содержимое файла, на который указывает ссылка.После создания жесткой ссылки Мэллори по-прежнему не может прочитать содержимое файла, потому что у нее нет доступа к цели ( C: \ Users \ Bob \ secret.txt ) ссылки. Однако у Боба есть доступ к этому файлу.

Когда приложение Боба считывает данные из машинного хранилища, оно теперь непреднамеренно читает содержимое его файла secret.txt , как если бы сам файл находился в машинном хранилище. Когда приложение Боба закрывается, если оно пытается повторно сохранить файл в хранилище на уровне машины, оно в конечном итоге помещает фактическую копию файла в каталог * C: \ ProgramData \ IsolatedStorage *.Поскольку этот каталог доступен для чтения любому пользователю на машине, Мэллори теперь может читать содержимое файла.

Лучшие методы защиты от этих атак

Важно: Если в вашей среде несколько пользователей, которым не доверяют друг друга, не вызывает API IsolatedStorageFile.GetEnumerator (IsolatedStorageScope.Machine) и не запускает инструмент storeadm.exe / machine / list . Оба они предполагают, что работают с надежными данными.Если злоумышленник может разместить вредоносную полезную нагрузку в хранилище на уровне машины, эта полезная нагрузка может привести к атаке с повышением привилегий в контексте пользователя, который запускает эти команды.

Если вы работаете в многопользовательской среде, пересмотрите возможность использования функций изолированного хранилища, предназначенных для области применения Machine . Если приложение должно считывать данные из расположения на уровне компьютера, предпочтительнее читать данные из расположения, доступного для записи только учетным записям администратора. Каталог % PROGRAMFILES% и куст реестра HKLM являются примерами расположений, которые доступны для записи только администраторам и чтения всем.Поэтому данные, считанные из этих мест, считаются заслуживающими доверия.

Если приложение должно использовать область Machine в многопользовательской среде, проверьте содержимое любого файла, который вы читаете из хранилища на уровне машины. Если приложение десериализирует графы объектов из этих файлов, рассмотрите возможность использования более безопасных сериализаторов, таких как XmlSerializer , вместо опасных сериализаторов, таких как BinaryFormatter или NetDataContractSerializer . Будьте осторожны с глубоко вложенными графами объектов или графами объектов, которые распределяют ресурсы на основе содержимого файла.

Изолированные складские помещения

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

Операционная система Расположение в файловой системе
Windows 2000, Windows XP, Windows Server 2003 (обновление с Windows NT 4.0) Хранилища с поддержкой роуминга =

\ Profiles \ \ Application Data

Nonroaming store =

\ Profiles \ \ Local Settings \ Application Data

Windows 2000 - чистая установка (и обновления с Windows 98 и Windows NT 3.51) Хранилища с поддержкой роуминга =

\ Documents and Settings \ \ Application Data

Nonroaming store =

\ Documents and Settings \ \ Local Settings \ Application Data

Windows XP, Windows Server 2003 - чистая установка (и обновления с Windows 2000 и Windows 98) Хранилища с поддержкой роуминга =

\ Documents and Settings \ \ Application Data

Nonroaming store =

\ Documents and Settings \ \ Local Settings \ Application Data

Windows 8, Windows 7, Windows Server 2008, Windows Vista Хранилища с поддержкой роуминга =

\ Users \ \ AppData \ Roaming

Хранилища без роуминга =

\ Users \ \ AppData \ Local

Создание, перечисление и удаление изолированного хранилища

.NET предоставляет три класса в пространстве имен System.IO.IsolatedStorage, которые помогут вам выполнять задачи, связанные с изолированным хранилищем:

Изолированные классы хранилища позволяют создавать, перечислять и удалять изолированные хранилища. Методы для выполнения этих задач доступны через объект IsolatedStorageFile. Для некоторых операций требуется разрешение IsolatedStorageFilePermission, которое представляет право на администрирование изолированного хранилища; вам также могут потребоваться права операционной системы для доступа к файлу или каталогу.

Для серии примеров, демонстрирующих общие задачи изолированного хранилища, см. Разделы с практическими рекомендациями, перечисленные в разделе «См. Также».

Сценарии для изолированного хранилища

Изолированное хранилище полезно во многих ситуациях, включая следующие четыре сценария:

  • Элементы управления скачаны. Управляемые элементы управления кодом, загруженные из Интернета, не могут записывать на жесткий диск через обычные классы ввода-вывода, но они могут использовать изолированное хранилище для сохранения настроек пользователей и состояний приложений.

  • Общее хранилище компонентов. Компоненты, которые совместно используются приложениями, могут использовать изолированное хранилище для обеспечения контролируемого доступа к хранилищам данных.

  • Хранилище сервера. Серверные приложения могут использовать изолированное хранилище, чтобы предоставлять отдельные хранилища для большого числа пользователей, отправляющих запросы к приложению. Поскольку изолированное хранилище всегда разделяется пользователем, сервер должен выдавать себя за пользователя, выполняющего запрос. В этом случае данные изолированы на основе удостоверения участника, которое является тем же удостоверением, которое приложение использует для различения своих пользователей.

  • Роуминг. Приложения также могут использовать изолированное хранилище с перемещаемыми профилями пользователей. Это позволяет изолированным магазинам пользователя перемещаться вместе с профилем.

Не используйте изолированное хранилище в следующих ситуациях:

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

  • Хранить код.

  • Для хранения конфигурации и параметров развертывания, контролируемых администраторами. (Предпочтения пользователя не считаются параметрами конфигурации, поскольку администраторы не контролируют их.)

Многие приложения используют базу данных для хранения и изоляции данных, и в этом случае одна или несколько строк в базе данных могут представлять хранилище для определенного пользователя. Вы можете использовать изолированное хранилище вместо базы данных, когда количество пользователей невелико, когда накладные расходы на использование базы данных значительны или когда базы данных не существует.Кроме того, когда приложению требуется более гибкое и сложное хранилище, чем то, которое предоставляет строка в базе данных, изолированное хранилище может предоставить жизнеспособную альтернативу.

Статьи по теме

Ссылка

.

c # - Удаление изолированных файлов для приложения

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
.

c - Как использовать изолированную функцию в другом исходном файле?

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
.

Смотрите также