Usb ключ что это такое

Usb ключ что это такое

Электронный ключ (также аппаратный ключ, иногда донгл от англ. dongle ) — аппаратное средство, предназначенное для защиты программного обеспечения (ПО) и данных от копирования, нелегального использования и несанкционированного распространения.

Основой данной технологии является специализированная микросхема, либо защищённый от считывания микроконтроллер, имеющие уникальные для каждого ключа алгоритмы работы. Донглы также имеют защищённую энергонезависимую память небольшого объёма, более сложные устройства могут иметь встроенный криптопроцессор (для аппаратной реализации шифрующих алгоритмов), часы реального времени. Аппаратные ключи могут иметь различные форм-факторы, но чаще всего они подключаются к компьютеру через USB. Также встречаются с LPT- или PCMCIA-интерфейсами.

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

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

Содержание

История [ править | править код ]

Защита ПО от нелицензионного пользования увеличивает прибыль разработчика. На сегодняшний день существует несколько подходов к решению этой проблемы. Подавляющее большинство создателей ПО используют различные программные модули, контролирующие доступ пользователей с помощью ключей активации, серийных номеров и т. д. Такая защита является дешёвым решением и не может претендовать на надёжность. Интернет изобилует программами, позволяющими нелегально сгенерировать ключ активации (генераторы ключей) или заблокировать запрос на серийный номер/ключ активации (патчи, крэки). Кроме того, не стоит пренебрегать тем фактом, что сам легальный пользователь может обнародовать свой серийный номер.

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

Защита ПО с помощью электронного ключа [ править | править код ]

Комплект разработчика ПО [ править | править код ]

Донгл относят к аппаратным методам защиты ПО, однако современные электронные ключи часто определяются как мультиплатформенные аппаратно-программные инструментальные системы для защиты ПО. Дело в том, что помимо самого ключа компании, выпускающие электронные ключи, предоставляют SDK (Software Developer Kit — комплект разработчика ПО). В SDK входит все необходимое для начала использования представляемой технологии в собственных программных продуктах — средства разработки, полная техническая документация, поддержка различных операционных систем, детальные примеры, фрагменты кода, инструменты для автоматической защиты. Также SDK может включать в себя демонстрационные ключи для построения тестовых проектов.

Технология защиты [ править | править код ]

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

  • проверка наличия подключения ключа;
  • считывание с ключа необходимых программе данных в качестве параметра запуска (используется, в основном, только при поиске подходящего ключа, но не для защиты);
  • запрос на расшифрование данных или исполняемого кода, необходимых для работы программы, зашифрованных при защите программы (позволяет осуществлять "сравнение с эталоном"; в случае шифрования кода, выполнение нерасшифрованного кода приводит к ошибке);
  • запрос на расшифрование данных, зашифрованных ранее самой программой (позволяет отправлять каждый раз разные запросы к ключу и, тем самым, защититься от эмуляции библиотек API / самого ключа)
  • проверка целостности исполняемого кода путём сравнения его текущей контрольной суммы с оригинальной контрольной суммой, считываемой с ключа (к примеру, путём выполнения ЭЦП кода или других переданных данных алгоритмом ключа и проверки этой ЭЦП внутри приложения; т.к. ЭЦП всегда разная — особенность криптографического алгоритма — то это также помогает защититься от эмуляции API/ключа);
  • запрос к встроенным в ключ часам реального времени (при их наличии; может осуществляться автоматически при ограничении времени работы аппаратных алгоритмов ключа по его внутреннему таймеру);
  • и т.д.

Стоит отметить, что некоторые современные ключи (Guardant Code от Компании "Актив", LOCK от Astroma Ltd., Rockey6 Smart от Feitian, Senselock от Seculab) позволяют разработчику хранить собственные алгоритмы или даже отдельные части кода приложения (например, специфические алгоритмы разработчика, получающие на вход большое число параметров) и исполнять их в самом ключе на его собственном микропроцессоре. Помимо защиты ПО от нелегального использования такой подход позволяет защитить используемый в программе алгоритм от изучения, клонирования и использования в своих приложениях конкурентами. Однако для простого алгоритма (а разработчики часто совершают ошибку, выбирая для загрузки недостаточно сложный алгоритм) может быть проведен криптоанализ по методу анализа "черного ящика".

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

Алгоритм шифрования может быть секретным или публичным. Секретные алгоритмы разрабатываются самим производителем средств защиты, в том числе и индивидуально для каждого заказчика. Главным недостатком использования таких алгоритмов является невозможность оценки криптографической стойкости. С уверенностью сказать, насколько надёжен алгоритм, можно было лишь постфактум: взломали или нет. Публичный алгоритм, или «открытый исходник», обладает криптостойкостью несравнимо большей. Такие алгоритмы проверяются не случайными людьми, а рядом экспертов, специализирующихся на анализе криптографии. Примерами таких алгоритмов могут служить широко используемые ГОСТ 28147—89, AES, RSA, Elgamal и др.

Защита с помощью автоматических средств [ править | править код ]

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

Читайте также:  Mass effect 3 dlc цитадель прохождение

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

Реализация защиты с помощью функций API [ править | править код ]

Помимо использования автоматической защиты, разработчику ПО предоставляется возможность самостоятельно разработать защиту, интегрируя систему защиты в приложение на уровне исходного кода. Для этого в SDK включены библиотеки для различных языков программирования, содержащие описание функциональности API для данного ключа. API представляет собой набор функций, предназначенных для обмена данными между приложением, системным драйвером (и сервером в случае сетевых ключей) и самим ключом. Функции API обеспечивают выполнение различных операций с ключом: поиска, чтения и записи памяти, шифрования и расшифрования данных при помощи аппаратных алгоритмов, лицензирования сетевого ПО и т. д.

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

Обход защиты [ править | править код ]

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

  • перехватывать все обращения к ключу;
  • протоколировать и анализировать эти обращения;
  • посылать запросы к ключу и получать на них ответы;
  • протоколировать и анализировать эти ответы;
  • посылать ответы от имени ключа и др.

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

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

Стоит отметить, что современные электронные ключи (к примеру, ключи Guardant поколения Sign и современные ключи HASP HL) обеспечивают стойкое шифрование протокола обмена электронный ключбиблиотека API работы с ключом. В результате наиболее уязвимыми местами остаются точки вызовов функций этого API в приложении и логика обработки их результата.

Эмуляция ключа [ править | править код ]

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

Построить полный эмулятор современного электронного ключа — это достаточно трудоёмкий процесс, требующий большого количества времени и существенных инвестиций. Ранее злоумышленникам это удавалось: например, компания Aladdin признаёт, что в 1999 году злоумышленникам удалось разработать довольно корректно работающий эмулятор ключа HASP3 и HASP4. Это стало возможным благодаря тому, что ключ использовал проприетарный алгоритм кодирования, который был взломан. Сейчас большинство ключей используют публичные криптоалгоритмы, поэтому злоумышленники предпочитают атаковать какой-то конкретный защищённый продукт, а не защитный механизм в общем виде. Для современных систем защиты HASP и Guardant эмуляторов в свободном доступе нет, так как используется криптосистема с открытым ключом.

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

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

Взлом программного модуля [ править | править код ]

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

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

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

Декомпиляция — преобразование исполняемого модуля приложения в программный код на языке высокого уровня и получение представления приложения, близкого к исходному коду. Может быть проведена только для некоторых языков программирования (в частности, для .NET приложений, создаваемых на языке C# и распространяемых в байт-коде — интерпретируемом языке относительно высокого уровня).

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

Читайте также:  Oct это какая система счисления

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

Создаем usb ключ защиты средствами Windows

Создаем usb ключ защиты средствами Windows

Всем привет, продолжаем изучать безопасность компьютера. Ранее я вам рассказал как как взломать пароль sa в sql, сегодня наоборот расскажу как немного защититься. Сегодня мы научимся создавать usb ключ защиты средствами Windows, нужны они для доступа к компьютеру и если он не вставлен, то вас не пустит. На рынке много ПО, совсем не бесплатного, которое делает эту задачу, но зачем за что-то платить, когда все уже есть встроенное в Windows 🙂 , тем более у вас на это уйдет не так много времени.

usb ключ для windows

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

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

Нажимаем Win+R у вас откроется окно Выполнить. Введите в нем

У вас откроется оснастка Управление дисками.

Как видите у меня есть флешка 30 гб, у вас это может быть конечно другая 🙂 .

Щелкаем по ней правым кликом и выбираем пункт Изменить букву диска или пусть к диску.

Тут нам для флешки, а точнее будущего usb защитника, нужно изменить букву на А.

У меня получилось вот так.

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

Нажимаем кнопку обновить. В итоге у вас откроется окно Ключ запуска, в нем ставим переключатель на Хранить ключ запуска на дискете. Требуется вставлять дискету при запуске системы. Этим мы и делаем нашу флешку токеном для windows.

Вас попросят подтвердить, что вы согласны с копирование ключа на нее.

Как видим, все готово

Посмотрим на его содержимое.

В итоге у вас пропишется маленький файл размеров 8 кб, под именем StartKey

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

Нажимаем для примера кнопку ок, без флешки и видим следующее.

Не найден файл ключа запуска на дискете, вставленной в привод А.

Вставляем usb key для windows и логинимся. Как видите, двух факторная аутентификация работает нормально.

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

Вам потребуется чтобы ваш usb ключ защиты был вставлен.

Все теперь ключ храниться локально.

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

Популярные Похожие записи:

21 Responses to Создаем usb ключ защиты средствами Windows

Здравствуйте. А не подскажите как подобным способом можно защитить только 1 учетку локальную/доменную?

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

Windows 7 не видит ключ на флешке, хотя он там есть…. что делать?

А в какой файловой системе форматировалась флешка?

Если такая защита стоит на другом ПК то можно ли этот ключ сделать не на защищёном и будет ли тогда ключ работать?

Здравствуйте. Сын стёр файл с флэшки. Ноутбук зависат при загрузке, просит …. Как быть?

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

Правильно ли я понимаю, что копирование файла ключа на вторую (третью/четвёртую) флешку решит проблему при возможной потери/неисправности оригинальной флешки?
Огромное спасибо за статью.

Правильно я понимаю
Если включить этот ключ с usb
И в добавок защифровать всю инфу на дисках
(Есть такая функция)
То без usb ключа, следовательно без системы
уже ни какие танцы с бубном
Не помогут извлеч инфу с дисках?

Если потерял флэшку как включають ноут?

Только переустановка и вытаскивание данных с помощью Live-cd

Здравствуйте! Спасибо работает. usb key нужен только при загрузке системы. Потом флешку можно извлечь. У меня на windows 7 (64) получилась так: на флешке переименованной в (A) ключ видит и разблокирует систему, а вот копию на другой флешке не видит. Предполагаю из за того, что другая флешка имеет букву диска отличную от (A) – у меня определялась как (F). Попробовал назначить букву (A). Копия заработала., но перестал определятся ключ на флешке1. Переименовался. Получается, что копию usb key невозможно использовать. и при утрате оригинала неизбежны проблемы. Кто подскажет? Спасибо.

Интересное тестирование, а если сделать клон флешки с помощью утилит?

Я бы попробовал снять образ с оригинальной флэшки-ключа и смонтировать его на другую флэшку. Если и так не получится — останется думать что имеют значения идентификаторы VID&PID. За этим — уже только прошивка контроллера, от чего флэшка вполне вероятно может стать нерабочей.

Читайте также:  Directory services restore mode перевод

блин помогите его удалить потому што я хотел сохранить там апароль которие поставили родаки а потом понял што комп без флешкине запускается срочно помогите

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

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

Благодарю за полезную информацию по созданию ключа.Пригодилось.

Здравствуйте!
Скажите, пожалуйста, а зачем при создании usb ключа, менять букву флешки?
Если её, к примеру, не менять, а оставить стандартной по умолчанию, то Windows сможет запускаться тогда с каждой флешки, на которой установлен StartKey?
Я почему спрашиваю? Ведь если единственная флешка, на которой создан StartKey, вдруг выйдет из строя, то с другой флешки система не запустится, даже при наличии на ней StartKey, поскольку система видит её под другой буквой. Поэтому, можно ли создать, две или три флешки с usb ключом под одной буквой, чтобы Windows запускался не с одной, а с любой?

_https://support.microsoft.com/ru-ru/help/4025993/syskey-exe-utility-is-no-longer-supported-in-windows-10-windows-server
Дополнительная информация
Syskey — это внутренний корневой ключ шифрования Windows, используемый для шифрования других конфиденциальных данных о состоянии ОС, таких как хеш пароля учетной записи пользователя. Утилиту SysKey можно использовать для добавления дополнительного уровня защиты путем шифрования syskey с целью использования внешнего пароля. В этом состоянии ОС блокирует процесс загрузки и запрашивает у пользователей пароль (интерактивно или путем считывания с гибкого диска).

К сожалению, ключ шифрования syskey и использование syskey.exe больше не считаются безопасными. Syskey основан на слабом шифровании, которое легко взломать в современных условиях. Данные, защищенные syskey, очень ограничены и не охватывают все файлы и данные на томе ОС. Утилита syskey.exe также использовалась злоумышленниками как вирус-вымогатель.

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

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

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

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

Что такое YubiKey

В качестве примера укажем компанию Yubico, которая создала YubiKey – USB-флешку, совместимую с Windows Hello, и рядом других сервисов, которые необходимо поддерживать в безопасности, таких как LastPass, KeePass, Google, Dropbox и Evernote.

Как только вы получите его, всё, что вам нужно сделать, это подключить к компьютеру, зарегистрировать, и вы готовы к работе. Есть несколько разных вариантов YubiKey. У вас есть стандартный YubiKey, который подключается через USB, Nano YubiKey, который намного меньше, и YubiKey NEO, который может подключаться как через NFC, так и через USB.

Как создать USB-ключ безопасности

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

Существует несколько вариантов, когда речь заходит о программном обеспечении, используемом для этого процесса, но USB Raptor, Rohos Logon Key и Predator являются некоторыми из них, хотя последние два являются платными. Rohos Logon Key стоит 34 доллара, а Predator – 10 долларов.

Поскольку USB Raptor бесплатен, мы покажем вам, как его настроить, используя Windows 10 и старый флэш-накопитель. На самом деле, не имеет значения, сколько места на флэш-накопителе, потому что всё, что будет создано, это файл размером 1 КБ.

    Скачайте USB Raptor с ресурса SourceForge.

  • Извлеките содержимое загруженного архива.
  • Дважды щелкните приложение USB Raptor.
  • Нажмите на флажок рядом с Я прочитал отказ от ответственности .
  • Нажмите Я согласен .
  • USB Raptor откроется. На этом этапе вы можете подключить флэш-накопитель к компьютеру. Как только он подключен, вы сможете продолжить следующие шаги.

  • Введите пароль. Убедитесь, что оно написано правильно, и запомните его!
  • Нажмите стрелку раскрывающегося списка ниже Выберите USB-накопитель .
  • Если к USB-порту подключен только USB-накопитель, должна быть доступна только одна опция.
  • Нажмите Create k3y file .
  • Нажмите на флажок рядом с Enable USB Raptor, когда вы будете готовы начать использовать USB Raptor. В правом нижнем углу экрана появится маленькое окно, сообщающее, что оно включено.
  • Нажмите Свернуть в трей.
  • Как только вы извлечёте USB-накопитель, включится USB Raptor. Появится фиолетовый экран с логотипом USB Raptor. Только когда вы снова подключите USB-ключ, он разблокируется практически мгновенно.

    Чтобы отключить USB Raptor, просто откройте приложение и снимите флажок Enable USB Raptor .

    Расширенные настройки USB Raptor

    Выше представленная инструкция охватывает простую конфигурацию, которую рекомендует USB Raptor, но есть довольно много расширенных настроек, которые вы можете изменить, установив флажок рядом с Advanced configuration в правом верхнем углу окна.

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

    Конечно, USB Raptor прекрасно работает без изменения расширенных настроек, поэтому вам не нужно настраивать то, что вам не нужно.

    Ссылка на основную публикацию
    Adblock detector