Перейти к содержимому

Что можно проделать с упакованным файлом

  • автор:

Распаковка нестандартно упакованных файлов

Безусловно, термин нестандарно упакованные файлы не удачен, но другого лучшего выражения не придумал, да и в общем то это не суть так важно. А суть в следующем — встречаются файлы, про которые точно знаешь, что они упакованы определенным архиватором, а распаковать их стандартным способом не можешь, или, например, распаковал, а в распакованном файле обнаруживаешь другие упакованные файлы, распаковать которые тоже обычным способом не получается.
Вот о распаковке таких файлов и хочу поделиться опытом с пользователями, которые с этим не знакомы. А чтобы бы понять саму идею распаковки таких файлов, сначала немного поэкспериментируем, а для проведения экспериментов упакуем/заархивируем произвольный простой файл, но сначала создадим его
$ echo ‘Т Е С Т’ > ~/test
Убедимся, что файл создан
$ cat ~/test
Т Е С Т
упакуем этот файл, например, архиватором gzip
$ gzip ~/test
и посмотрим на упакованный файл утилитой hexdump, точнее посмотрим 1-ые 16 байт
$ hexdump -C -n 16 ~/test.gz
00000000 1f 8b 08 08 9e 52 18 59 00 03 74 65 73 74 00 bb |. R.Y..test..|
Первые 3 байта — это так называемая сигнатура (HEX код) архиватора gzip — 1F 8B 08, которая является составной частью упакованного файла (его началом) и присуща только архиватору gzip, что позволяет отличить этот файл от других и, главное, видно, что архиватор, точнее сигнатура начинается с самого начала (с нулевого байта, смещение равно 0).
UPD — если быть точным, то сама сигнатура два байта (0x1f, 0x8b), а 3-ий байт определяет compression method (08 — deflate)
При распаковке этого файла, утилита gzip сначала проверит наличие сигнатуры, присущей gzip, и только после этого примет решение о распаковке.
Проверим это, а для чего изменим сигнатуру файла, точнее, изменим 1-ый байт — вместо 1F запишем 1E (я проделал это в hex редакторе)
$ hexdump -C -n 16 ~/test.gz
00000000 1e 8b 08 08 9e 52 18 59 00 03 74 65 73 74 00 bb |. R.Y..test..|
Ну и попытаемся рапаковать
$ gzip -d ~/test.gz
gzip: ~/test.gz: not in gzip format
И то же самое будет, если сигнатура будет правильная, но начинаться будет не с начала файла (смещение не равно 0) — вернем все на место, но перед сигнатурой запишем 1 байт — 00 (я сохранил этот файл, как test1.gz).
$ hexdump -C -n 16 ~/test1.gz
00000000 00 1f 8b 08 08 9e 52 18 59 00 03 74 65 73 74 00 |. R.Y..test.|
$ gzip -d ~/test1.gz
gzip: ~/test1.gz: not in gzip format
И значит распаковывать такие файлы нужно по-другому, а именно, нужно указать при распаковке смещение, откуда начинать, т.е. где начинается сигнатура.
Самый простой вариант — удалить байты до сигнатуры, но это не этично, да и иногда это выливается в мегабайты и десятки мегабайт.
Лучше поступить грамотно — указать утилите смещение, с которго начинать распаковку (делаем пропуск с помощью dd в 1 байт прежде чем начать распаковку)
$ dd if=~/test1.gz skip=1 bs=1 | gzip -d > test1
Проверим, что мы получили
$ cat ~/test1
Т Е С Т
То есть распаковали успешно и получили исходный файл.
И так на простом файле показал суть и сам принцип распаковки таких нестандартно упакованных файлов.
Но в жизни все сложнее, но когда понимаешь суть, то можно распаковать и более сложные файлы.
Попробуем сейчас опробовать наши знания на ядре Archlinux — пример неудачный, но полезный для обучения.
Справка — ядро, как правило, находится в сжатом виде, но, главное, сжатое ядро представляет собой загрузчик и распаковщик, за которым следует собственно сжатый алгоритмом zlib vmlinux, а потому сначала необходимо отделить сжатое ядро от загрузчика.
Сначала используя утилиты hexdump и file попробуем выяснить, что же это такое, наше ядро
# hexdump -C -n 16 /boot/vmlinuz-linux
00000000 4d 5a ea 07 00 c0 07 8c c8 8e d8 8e c0 8e d0 31 |MZ. 1|
Судя по сигнатуре 4d 5a (MZ) перед нами стандартный исполняемый формат (исполняемый DOS файл), сигнатура которого 4D 5A (MZ) составлена из инициалов одного из создателей MS-DOS Марка Збиковски.
$ file /boot/vmlinuz-linux
/boot/vmlinuz-linux: Linux kernel x86 boot executable bzImage, version 4.7.6-1-ARCH (builduser@tobias) #1 SMP PREEMPT Fri Sep 30 19:46, RO-rootFS, swap_dev 0x4, Normal VGA
И в итоге подтверждается сказанное выше, что сжатое ядро представляет собой загрузчик + распаковщик + само ядро сжатое алгоритмом zlib архиватора gzip с распаковкой в процессе загрузки.
Но нам, главное, понятно (по 1-ой части), чтобы распаковать ядро, нам нужно отделить сжатое ядро от загрузчика.
Как нам уже известно, gzip имеет сигнатуру 1f 8b 08 — вот и найдем его начало.
Перечислю способы, которыми можно это сделать.
1. Используя hex-редактор, например, bless — определяем, что 1f 8b 08 начинается с адреса 0х4501 или в 10 системе — 17665
UPD — делал и писал давно (обучал молодежь), так что число 17665 уже будет другое.
2. Используя утилиту od
od -A d -t x1 vmlinuz-linux | grep «1f 8b 08»
0017664 e0 1f 8b 08 00 00 00 00 00 02 03 ec 5a 7b 74 53
и получаем опять 17665
3. Очень хорошую утилиту binwalk
binwalk vmlinuz-linux

DECIMAL HEXADECIMAL DESCRIPTION -------------------------------------------------------------------------------- 0 0x0 Microsoft executable, portable (PE) 17665 0x4501 gzip compressed data, maximum compression, from Unix, NULL date (1970-01-01 00:00:00) . 

Как видим совпадает во всех случаях — 17665
Остается только извлечь из vmlinuz сжатое ядро и распаковать его:
dd if=vmlinuz-linux skip=17665 bs=1 | gzip -d > vmlinux
gzip: stdin: decompression OK, trailing garbage ignored
Желающие могут снова применить binwalk — binwalk vmlinux
и увидят уже названия файлов, правда вытащить их просто так уже не получится.
Вот и все.
binwalk также удобно использовать для определения архиватора, в случае если есть сомнения. Утилита включает большую базу сигнатур известных архиваторов. Но, разумеется, база базой, но лучше всегда перепроверить ручками, использую hex-редактор.
Ну и бонус на посошок любителям паролей — можно не вешать никакие пароли на сжимаемый файл, а просто ручками добавить в начало несколько байтов, но ЛУЧШЕ изменить сигнатуру и никто этот файл не распакует.
Конечно, эти изменения должны быть постоянны и легко запоминаемы.

Ошибки не исчезают с опытом — они просто умнеют

Сохранение файла для промышленной печати с помощью мастера упаковки

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

Мастер упаковки упаковывает публикацию по-разному в зависимости от того, куда она предназначена.

Что делает мастер упаковки

При упаковке публикации в типографию можно использовать мастер упаковки для сохранения публикации в сжатом файле Publisher и в формате PDF.

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

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

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

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

Упаковка публикации для печати в типографии

Нажмите кнопку

  1. Нажмите кнопку «>экспорт > сохранить в типографии».
  2. В области задач «Сохранить для коммерческого принтера» выберите нужный параметр качества файла:
    • Если вы будете использовать офсетную печать, выберите «Типография и печать».
    • Если вы будете пользоваться высококачественным копировным магазином, выберите «Высококачественная печать».
    • Стандартныйи минимальный размер — это дополнительные параметры, предназначенные для распространения через Интернет или только на экране.
  3. Нажмите кнопку мастера упаковки.
  4. В мастере упаковки выберите расположение для экспорта файла и нажмите кнопку «Далее». Если вы упаковали несколько публикаций, сохраните каждую из них в отдельной папке. В противном случае мастер упаковки перезаписет все уже имеющиеся упакованные публикации. Файл можно сохранить на съемный носитель, жесткий диск, внешний диск или сетевой диск. Сохранение файлов на съемный носитель Если вы берете публикацию на диск в службу печати, щелкните соответствующий диск (обычно D или E для съемных носитеев, таких как записывающийся компакт-диск или USB-устройство флэш-памяти). Сохранение файлов на жестком диске, внешнем диске или в сети Если файлы помещают на внешний диск, в сеть или на жесткий диск компьютера, нажмите кнопку «Обзор», выберите нужный диск и папку, а затем нажмите кнопку «ОК». Вы можете позже отправить файл на веб-сайт, если в вашей службе промышленной печати используется отправка файла в Интернете.
  5. Нажмите кнопку «Далее»или «Готово».
  6. В окне «Печать составного подтверждения» нажмите кнопку «ОК». По умолчанию всегда выбирается поле «Печать составного подтверждения». Перед отправкой файла в типографию используйте составные проверки, чтобы найти ошибки в печатной версии публикации. Если коммерческий принтер исправит ошибки в файле, стоимость печати обычно увеличится.

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

Распаковка и открытие файлов Publisher для коммерческой печати публикации

Чтобы распаковать публикацию на одном диске или сетевом диске, сделайте следующее:

  1. В проводнике Дважды щелкните ZIP- или PDF-файл.
  2. Введите путь к папке, в которой вы хотите сохранить распакованные файлы, или перейдите к папке, а затем нажмите кнопку «ОК».
  3. Чтобы открыть публикацию в Publisher, перейдите к папке с файлами и дважды щелкните файл с PNG в имени и расширением PUB (например, publication1PNG.pub).

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

Что можно проделать с упакованным файлом

на школьную страницу. на школьную страницу.

Как работает архиватор

Как работает трансформатор знают все: «У-у-у-у-у. ».
Многие считают, что архиватор работает аналогичным образом.
Это не совсем так.

Работа архиватора состоит из нескольких последовательных шагов. Сначала он просматривает байт за байтом входной файл. Для текущей позиции в файле он ищет самый длинный повтор в предыдущей части файла:

. работает трансформатор . архиватор работает . ===== ===== ▲ | └─────────────┘ отступить на 79 байт назад и скопировать оттуда 5 байтов

Строчки могут перекрываться, например так:

. abcabcabc . ========= ▲ | └──┘ отступить на 3 байта назад и скопировать оттуда 6 байтов
. fffffffffffffffffffff . == ▲| └┘ отступить на 1 байт назад и скопировать оттуда 21 байт
  • На сколько байтов надо отступить назад (смещение).
  • Сколько байтов скопировать (длина).
Смещение: 87, 125, 22, 355, 2314, . Длина: 3, 5, 1, 1, 12, .

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

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

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

Один из самых известных примеров такого кода — азбука Морзе.

  • «Война и мир.fb2» — роман Льва Толстого «Война и мир» длиной 5 564 044 байт,
  • EXCEL.EXE — исполняемый файл из MS Office длиной 18 352 488 байт.
Архиватор Война и мир.fb2 Excel.exe
ARJ 1 586 779 9 819 278
RAR 913 989 7 921 519
ZIP 1 547 000 9 800 479
7Z 1 104 753 6 898 313

Таким образом, коэффициент сжатия — от 3 до 6.

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

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

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

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

RAR a -p12345 -r arch *.txt

в архив с именем arch.rar положит все файлы с расширением txt из текущего каталога и его подкаталогов. Архив будет зашифрован с паролем «12345». Для извлечения файлов из архива даем команду

RAR x -p12345 arch

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

Если вы не хотите в открытую набирать пароль на клавиатуре, можно дать команду

RAR a -p -r arch *.txt

не указывая никакого пароля. В этом случае архиватор предложит ввести его с клавиатуры в «секретном» режиме, то есть не отображая вводимые символы на экране.

В некоторых случаях без паролей вообще никак не обойтись. Многие почтовые системы (mail.ru, gmail.com и др.) не хотят пересылать exe-файлы (а также dll, скрипты и некоторые другие), — боятся вирусов. Более того, если вы попытаетесь переслать exe-файл через mail.ru, то отправка писем с этого адреса будет блокирована на несколько дней, правда приниматься письма всё равно будут.

Можно попытаться обмануть почтовую систему и упаковать пересылаемые файлы в архив. Но почтовые системы и эту хитрость знают и файл всё равно не пропустят. Единственная возможность — упаковать файлы в архив с паролем. На этом почтовая система сдается и файл пропускает. Пароль (чтобы не забыть) лучше указать тут же, в теле письма. И не надо выдумывать пароли типа:

kjas&8873s_+-kNN. mohi^gwFJ$rc3)kNBaImnd?KM$3&fdyHhf99(24)(

хотя это вполне нормально сработает. Лучше ограничиться паролем

12345

Не ищите приключений на свою голову!

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

RAR a -r -ac -ao arch *.txt

упакует в архив только файлы у которых архивный бит равен 1 (ключ -ao) и затем сбросит этот бит в 0 (ключ -ac). В результате в архив будут упакованы лишь файлы, которые были созданы или изменены после предыдущей архивации. Если, например, в вашем рабочем каталоге 100 тысяч файлов, общий размер архива может составить несколько гигабайт. Если же в архив упаковывать лишь файлы, которые изменились с момента предыдущей архивации, ежедневный архив получится совсем небольшим.

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

RAR a -r -ac -ao -agYYYY_MM_DD_HH_MM_SS arch *.txt

создает архив с именем

arch2013_10_24_09_02_45.rar

(24 октября 2013 г. время 9 часов 02 минуты 45 секунд). В этом архиве будут лежать файлы из текущего каталога и его подкаталогов (ключ -r) с расширением txt, но не все, а лишь те, которые изменились с момента предыдущей архивации.

Многие архиваторы умеют создавать многотомные архивы. Эта возможность появилась в древности потому, что архивы часто хранились на дискетах, объём которых был фиксирован (360К, 1.2М или 1.44М байт), и архивы перестали помещаться на дискету. Поэтому архивный файл резался архиватором на части заданного размера, каждую из которых можно было хранить на одной дискете.

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

RAR a arch -v6M MyFilm.avi

создат файлы

arch.part01.rar arch.part02.rar .

размером по 6М байт каждый (кроме последнего).

Сжимать с помощью архиватора фотографию — не очень хорошая идея. Возьмем, например, BMP-файл с фотоаппарата размером 4288*2848 точек. Его размер — 36М байт. В результате сжатия архиватором RAR получим файл размера 12М байт. То есть размер уменьшился в 3 раза. Если же мы сохраним тот же файл в формате JPEG, размер файла можно уменьшить в несколько десятков раз. Правда, этот формат — с потерями. Подробнее про него можно узнать здесь .

Как распаковать архив или упаковать файлы. Сравнение скорости 3 архиваторов

Сравнение скорости будет в конце, в виде таблицы. А пока, если не в курсе, почитайте, как разархивировать файлы 7z, RAR и других форматов.

Что такое заархивированный файл?

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

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

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

Файл-архив — это контейнер, в котором хранятся файлы и/или папки в сжатом состоянии. Чтобы подкорректировать, например, архивный документ, нужно знать, как разархивировать упакованный файл. Для этого используют программы-упаковщики или средства Windows. Правка заархивированных файлов чревата потерей изменений.

Как распаковать архив на ПК

Пользователям Windows необязательно заморачиваться с установкой программ-архиваторов, поскольку в систему встроен упаковщик, который работает с ZIP-архивами. Однако многие по привычке пользуются утилитой WinRAR. Также в топе востребованных решений приложение 7-Zip, обеспечивающее впечатляющую плотность сжатия. Рассмотрим вкратце, как упаковывать и распаковывать архивы, пользоваться дополнительными возможностями популярных приложений.

Софт для просмотра фильмов: Топ 10 видеоплееров на ПК для Windows

Архивы формата ZIP

Зиповский формат поддерживают Windows и MacOS. Эти операционки знают, как распаковать архив с расширением ZIP без помощи сторонних программ. Также они умеют упаковать информацию. Для этого:

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

упаковать информацию в папку ZIP

Разархивировать файл ZIP можно как с помощью контекстного меню проводника, так и путем использования популярных утилит: WinRAR, 7-Zip и прочего. Формат ZIP удобен тем, что пользователи без опаски отправляют упакованную инфу друзьям и коллегам. Получатель откроет «посылку» без проблем, у него не возникнет потребность устанавливать архиватор. По этой причине присутствие на ПК более продвинутого софта, например, 7-Zip, не обессмысливает использование традиционного формата.

Архивы RAR

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

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

  1. создание непрерывных, многотомных архивов;
  2. установка пароля на архив со скрытием его содержимого;
  3. создание самораспаковывающегося архива, именуемого SFX;
  4. восстановление поврежденных файлов в контейнере и прочее.

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

Архивы 7z

7-Zip — бесплатная программа без всяких «условно». Формат сжатия 7z дает 5-25% экономии дискового пространства по сравнению с классическим ZIP-форматом. Архиватор 7-Zip умеет распаковывать контейнеры ISO и RAR, полноценно работает с ZIP-форматом.

Рассмотрим, как распаковать 7z архив на ПК. Первым делом клацаем правой по упакованному файлу и выбираем 7-Zip. Далее клацаем на один из пунктов, который начинается со слова «Открыть» или «Распаковать». Если хотите извлечь инфу в отдельную папку — выберите пункт с именем архива.

Со сжатием информации тоже проблем не возникает. Когда клацаем правой кнопкой по обычной папке, высвечиваются только варианты, связанные с упаковкой. Можно выбрать формат 7z или ZIP. Если выбрать «Добавить к архиву…», нарисуется окно с настройками. В нем пользователь может изменить:

  • имя архива, его формат;
  • место сохранения;
  • плотность и алгоритм сжатия.

7-Zip распаковывает ISO и RAR

Есть возможность нарезки архива, установки пароля, активации параметра самораспаковки.

Как распаковать архив на Андроид

На смартфонах и прочих Android-устройствах можно пользоваться, например, архиватором RAR. Технология мало отличается от той, что мы применяем на компьютерах. Интерфейс другой, но смысл тот же. Распаковка производится следующим образом:

  1. Напротив файла с расширением RAR нажимаем кнопку «Открыть».
  2. Тапаем на приложение RAR.
  3. В архиве выделяем файлы, которые собираемся извлечь.
  4. Жмем на значок со стрелкой вверх.
  5. Выбираем папку для сохранения.
  6. Пару раз соглашаемся с помощью ОК.

Распаковать архив на Андроид можно как Раром, так и Винзипом. Эти проги поддерживают большинство актуальных форматов.

Напоследок небольшой тест на скорость компьютерных архиваторов. Для эксперимента использовали 10 непустых папок и 10 файлов общим размером 500 мегабайт. Время упаковки и распаковки измеряли в секундах.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *