Please help us improve our website

Содержание

Retrieve and verify a hardware-backed key pair

During key attestation, you specify the alias of a key pair. The attestation
tool, in return, provides a certificate chain, which you can use to verify
the properties of that key pair.

If the device supports hardware-level key attestation, the root certificate
within this chain is signed using an attestation root key, which the device
manufacturer injects into the device’s hardware-backed keystore at the
factory.

Note: On devices that ship with hardware-level key
attestation, Android 7.0 (API level 24) or higher, and Google Play services,
the root certificate is signed with the Google attestation root key. You
should verify that this root certificate is the one listed below.

To implement key attestation, complete the following steps:

  1. Use a object’s

    method to get a reference to the chain of X.509 certificates associated with
    the hardware-backed keystore.

  2. Check each certificate’s validity using a
    object’s

    method. Also verify that the root certificate is trustworthy.

    Caution: Although you can complete this process within
    your app directly, it’s safer to check the certificates’
    on a separate server
    that you trust.

  3. On a separate server that you trust, obtain a reference to the ASN.1
    parser library that is most appropriate for your toolset. Use this parser
    to extract the attestation certificate extension data, which appears
    within the first element of the certificate chain.

    The Key
    Attestation sample uses the ASN.1 parser from Bouncy Castle to extract an
    attestation certificate’s extension data. You can use this sample as a
    reference for creating your own parser.

    For more details about the schema of the extension data, see
    .

  4. Compare the extension data that you’ve retrieved from your ASN.1 parser
    with the set of values that you expect the hardware-backed key to contain.

    Caution: Although you can complete this process within
    your app directly, it’s safer to check the certificate’s extension data
    on a separate server that you trust.

Январь

Кастомная игра Dota Auto Chess китайского разработчика Drodo Studio вышла 4 января. Простой мод, в котором игрок расставляет на шахматной доске фигурки персонажей Dota 2, которые сражаются друг с другом самостоятельно, взорвал игровое сообщество. Меньше чем за две недели Auto Chess установили более 600 тысяч человек. Шахматы – четвертые по одновременному онлайну в Steam – уступают только самой доте, PUBG и CS:GO. Игрой заинтересовались не только дотеры, но и любители ККИ.

Valve сразу осознала популярность мода и начала переговоры о сотрудничестве с Drodo Studio – компания планировала купить Dota Auto Chess и выпустить в виде отдельной игры.

Март

14 марта Drodo Studio анонсировала мобильную версию пользовательской модификации Dota Auto Chess. Игра вышла на Android и iOS. Оформившие предзаказ получали героя Drodo. Издателем Auto Chess выступила компания Dragonnest, выпустившая несколько мобильных игр для азиатского рынка.

Среди партнеров проекта – компания ImbaTV. Вместе с ними Drodo анонсировала турнир по мобильной Auto Chess с призовым фондом 1,5 млн долларов.

Сайт Twitch добавил категорию для трансляций Auto Chess. В первый день стримы раздела смотрело около 21 тысячи человек.

В конце третьего месяца жизни мод пробил еще одну отметку – на него подписалось 7 миллионов уникальных игроков (онлайн Dota 2 за месяц – 12,3 млн человек). Cуточный пик самой Доты несколько раз достигал миллиона игроков, многие связывали это с успехом Auto Chess, в которую в среднем играло 310 тысяч человек.

Обзор Customize.exe

Что такое Customize.exe?

Customize.exe представляет собой разновидность файла EXE, связанного с Workstation 6, который разработан VMWare для ОС Windows. Последняя известная версия Customize.exe: 1.0.0.0, разработана для Windows. Данный файл EXE имеет рейтинг популярности 1 звезд и рейтинг безопасности «Неизвестно».

Что из себя представляют файлы EXE?

Файлы EXE («исполняемые»), такие как customize.exe – это файлы, содержащие пошаговые инструкции, которым компьютер следует, чтобы выполнить ту или иную функцию. Когда вы дважды «щелкаете» по файлу EXE, ваш компьютер автоматически выполняет эти инструкции, созданные разработчиком программы (например, VMWare) с целью запуска программы (например, Workstation 6) на вашем компьютере.

Каждое программное приложение на вашем компьютере использует исполняемый файл: ваш веб-браузер, текстовый процессор, программа для создания таблиц и т.д. Это делает исполняемые файлы одними из наиболее полезных видов файлов в операционной системе Windows. Без таких исполняемых файлов, как customize.exe, вы не смогли бы использовать ни одну программу на вашем компьютере.

Почему у меня наблюдаются ошибки в файлах типа EXE?

Из-за своей полезности и вездесущности, файлы EXE обычно используются в качестве способа заражения вирусами / вредоносным ПО. Зачастую вирусы маскируются под неопасные файлы EXE (например, customize.exe) и распространяются через почтовый СПАМ или вредоносные веб-сайты, а затем могут заразить ваш компьютер, когда будут запущены на исполнение (например, когда вы дважды щелкаете по файлу EXE).

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

В каких случаях появляются ошибки в файлах типа EXE?

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

KeyStore

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

Вот где можно использовать KeyStore API. Начиная с API 1, KeyStore используется системой для хранения учётных данных WiFi и VPN. Начиная с 4.3 (API 18), вы можете работать с асимметричными ключами конкретного приложения, а в Android M (API 23) можно хранить симметричный ключ AES. Таким образом, хотя API не позволяет хранить конфиденциальные строки напрямую, эти ключи можно сохранить, а затем использовать для шифрования строк.

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

Генерирование нового случайного ключа

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

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

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

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

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

Ещё стоит отметить — , что блокирует ключ, как только устройство обнаружит, что он больше не принадлежит человеку.

Шифрование данных

Теперь, когда ключ хранится в хранилище KeyStore, мы можем создать метод, который зашифрует данные с использованием объекта , учитывая . Это вернёт , содержащий зашифрованные данные и случайный ВИ, который понадобится для расшифровки данных. Зашифрованные данные вместе с ВИ могут быть сохранены в файл или в открытых настройках.

Расшифровка в массив байтов

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

Использование асимметричных ключей RSA для старых устройств

Это хорошее решение для хранения данных в версии M и выше, но что, если ваше приложение поддерживает более ранние версии? Хотя симметричные ключи AES не поддерживаются в M, поддерживаются асимметричные ключи RSA. Это означает, что для достижения того же результата, мы можем использовать RSA ключи и шифрование.

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

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

Расшифровка выполняется с использованием объекта .

Quick Setup

Linux

To install under Gentoo or Funtoo Linux, type

root # emerge keychain

For other Linux distributions, use your distribution’s package manager, or download and install using the source tarball above. Then generate RSA keys if necessary. The quick install docs assume you have a RSA key pair named id_rsa and id_rsa.pub in your ~/.ssh/ directory. Add the following to your ~/.bash_profile:

eval `keychain --eval --agents ssh id_rsa`

If you want to take advantage of GPG functionality, ensure that GNU Privacy Guard is installed and omit the --agents ssh option above.

Apple MacOS X

Assuming you have an id_rsa and id_rsa.pub key pair in your ~/.ssh/ directory, add the following to your ~/.bash_profile:

eval `keychain --eval --agents ssh --inherit any id_rsa`

   Note

The --inherit any option above causes keychain to inherit any ssh key passphrases stored in your Apple MacOS Keychain. If you would prefer for this to not happen, then this option can be omitted.

Computer keychains

By analogy to the physical object, the terms keychain and keyring are often used for software that stores cryptographic keys. The term keychain was first introduced in a series of IBM developerWorks articles. The term is used in GNU Privacy Guard to store known keys on a keyring. Mac OS X uses a password storage system called Keychain. A «keyring» is also the name of a password manager application working under the GNOME desktop manager (used for example in Ubuntu operating system). In cryptography a keyring is a database of multiple keys or passwords. There are also portable Password manager programs, such as keepass and keepassx.

Background

You’re probably familiar with ssh, which has become a secure replacement for the venerable telnet and rsh commands.

Typically, when one uses ssh to connect to a remote system, one supplies a secret passphrase to ssh, which is then passed in encrypted form over the network to the remote server. This passphrase is used by the remote sshd server to determine if you should be granted access to the system.

However, OpenSSH and nearly all other SSH clients and servers have the ability to perform another type of authentication, called asymmetric public key authentication, using the RSA or other authentication algorithms. They are very useful, but can also be complicated to use. keychain has been designed to make it easy to take advantage of the benefits of public key authentication.

Keychain Options

Specifying Agents

In the images above, you will note that keychain starts ssh-agent, but also starts gpg-agent. Modern versions of keychain also support caching decrypted GPG keys via use of gpg-agent, and will start gpg-agent by default if it is available on your system. To avoid this behavior and only start ssh-agent, modify your ~/.bash_profile as follows:

eval `keychain --agents ssh --eval id_rsa`

The additional --agents ssh option tells keychain just to manage ssh-agent, and ignore gpg-agent even if it is available.

Clearing Keys

Sometimes, it might be necessary to flush all cached keys in memory. To do this, type:

root # keychain --clear

Any agent(s) will continue to run.

Improving Security

To improve the security of keychain, some people add the --clear option to their ~/.bash_profile keychain invocation. The rationale behind this is that any user logging in should be assumed to be an intruder until proven otherwise. This means that you will need to re-enter any passphrases when you log in, but cron jobs will still be able to run when you log out.

Stopping Agents

If you want to stop all agents, which will also of course cause your keys/identities to be flushed from memory, you can do this as follows:

root # keychain -k all

If you have other agents running under your user account, you can also tell keychain to just stop only the agents that keychain started:

root # keychain -k mine

GPG

Keychain can ask you for your GPG passphrase if you provide it the GPG key ID. To find it out:

user $ gpg -k
pub   2048R/DEADBEEF 2012-08-16
uid                  Name (Comment) 
sub   2048R/86D2FAC6 2012-08-16

Note the DEADBEEF above is the ID. Then, in your login script, do your usual

user $ keychain --dir ~/.ssh/.keychain ~/.ssh/id_dsa DEADBEEF
user $ source ~/.ssh/.keychain/$HOST-sh
user $ source ~/.ssh/.keychain/$HOST-sh-gpg

GPG Cache Time

By default the GPG agent sets the default cache time to 600 seconds and the maximum cache time to 7200 seconds. You may wish to consider changing these options if you tend to use a long running session and wish to keep your gpg key cached. To do so set the options in ~/.gnupg/gpg-agent.conf.

default-cache-ttl 84000
maximum-cache-ttl 84000
GnuPG version 2.1 and above
default-cache-ttl 84000
max-cache-ttl 84000

Learning More

The instructions above will work on any system that uses bash as its default shell, such as most Linux systems and Mac OS X.

To learn more about the many things that keychain can do, including alternate shell support, consult the keychain man page, or type keychain --help | less for a full list of command options.

I also recommend you read my original series of articles about OpenSSH that I wrote for IBM developerWorks, called OpenSSH Key Management. Please note that keychain 1.0 was released along with Part 2 of this article, which was written in 2001. keychain has changed quite a bit since then. In other words, read these articles for the conceptual and OpenSSH information, but consult the keychain man page for command-line options and usage instructions 🙂

  • Common Threads: OpenSSH key management, Part 1 — Understanding RSA/DSA Authentication
  • Common Threads: OpenSSH key management, Part 2 — Introducing ssh-agent and keychain
  • Common Threads: OpenSSH key management, Part 3 — Agent forwarding and keychain improvements

As mentioned at the top of the page, keychain development sources can be found in the keychain git repository. Please use the Funtoo Forums and #funtoo irc channel for keychain support questions as well as bug reports.

   Note

Browse all our available articles below. Use the search field to search for topics and keywords in real-time.

Как избавиться от приложения самостоятельно

Если рассматривать вопрос того, как удалить программу Games Desktop, сразу же стоит отметить, что это приложение стандартными методами деинсталлировать из того же раздела программ и компонентов в «Панели управления» невозможно (хотя оно там и отображается) только по причине того, что оно защищено от копирования и удаления.

Но выход есть. Как удалить программу Games Desktop самому без задействования сторонних средств (которые, кстати больше разрекламированы, нежели оказывают реальную помощь)? Элементарно!

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

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

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

Frequently asked questions

Get answers to some of the most common questions about iCloud Keychain.

What information does iCloud Keychain store?

iCloud Keychain stores credit card numbers and expiration dates—without storing or autofilling the security code—and passwords and usernames, Wi-Fi passwords, Internet accounts, and more. Developers can also update their apps to use keychain, if the app is on a device that uses iOS 7.0.3 or later, or OS X Mavericks 10.9 and later.

How does iCloud Keychain protect my information?

iCloud protects your information with end-to-end encryption, which provides the highest level of data security. Your data is protected with a key that’s made from information unique to your device, and combined with your device passcode, which only you know. No one else can access or read this data, either in transit or storage. Learn more.

What happens when I turn off iCloud Keychain on a device?

When you turn off iCloud Keychain for a device, you’re asked to keep or delete the passwords and credit card information that you saved. If you choose to keep the information, it isn’t deleted or updated when you make changes on other devices. If you don’t choose to keep the information on at least one device, your Keychain data will be deleted from your device and the iCloud servers. 

Can I make sure my information isn’t backed up in iCloud?

Yes.* When you set up iCloud Keychain, skip the step to create an iCloud Security Code. Your keychain data is then stored locally on the device, and updates across only your approved devices. If you don’t create an iCloud Security Code, Apple can’t help you recover your iCloud Keychain.

*If you have two-factor authentication for your account, this does not apply.

Февраль

Кастомка продолжает развиваться стремительными темпами. За месяц в нее сыграли более четырех миллионов человек (в конце месяца – 5 млн) – почти треть онлайна Доты. Пиковый онлайн Auto Chess – 300 тысяч игроков.

Успех не мог остаться без внимания – китайский онлайн-гигант Tencent даже пытался зарегистрировать торговую марку Auto Chess и начал разработку мобильного аналога шахмат. На тот момент Drodo Studio не собиралась создавать мобильную версию игры. Другие студии уже успели создать четыре мобильных клона.

В Auto Chess нашли и киберспортивный потенциал – прошли первые профессиональные турниры с призовыми фондами в 5 и 10 тысяч долларов.

К кастомке начали продавать первые читы. Самый простой – на бесконечное золото, всего 700 рублей . Drodo Studio среагировала быстро – уже через неделю в игру добавили анти-чит систему и возможность репортить игроков.

How to help the project

Contribute Code

  1. Lookout for interesting issues on Github. We have tagged issues were we explicitly like to see contributions: https://github.com/open-keychain/open-keychain/labels/help%20wanted
  2. Read this README, especially the notes about coding style
  3. Fork OpenKeychain and contribute code (the best part )
  4. Open a pull request on Github. We will help with occurring problems and merge your changes back into the main project.
  5. PROFIT

For bigger changes

  1. Propose bigger changes and discuss the consequences

I am happy about every code contribution and appreciate your effort to help us developing OpenKeychain!

Реализация OMA CP

OMA CP — это протокол управления устройством передачи данных спецификации OMA Device Management, разработанный в соответствии с мобильным стандартом Открытого Мобильного Альянса (Open Mobile Alliance), использующий XML-подобный SyncML (Synchronization Markup Language). Протокол OMA CP использует беспроводной протокол передачи данных WAP. Текущая версия OMA CP — 1.1 от 2009 года. При этом для обмена не требуется, чтобы в смартфоне присутствовала SIM-карта или было настроено подключение к Интернету.

Векторы атак используют процесс предоставления данных мобильному клиенту «по воздуху» (over-the-air (OTA) provisioning), с помощью которого мобильные операторы устанавливают необходимые настройки на устройства, подключающиеся к сотовой сети.

Стандарт предоставляет ряд мер по аутентификации CP-сообщений от оператора мобильных услуг, но не все вендоры их реализуют. При этом и сами меры не отличаются надежностью.
В рамках Android данный протокол реализуется omacp.apk.

Если верить исследованию, базовая ОС Android не использует защитные механизмы OMA CP, при этом большинство вендоров решают этот вопрос самостоятельно с помощью аутентификации OTA. Поэтому, если любишь перепрошивать свой девайс стоковым Android, то сейчас есть повод задуматься.

Причины ошибок в файле Customize.exe

Проблемы Customize.exe могут быть отнесены к поврежденным или отсутствующим файлам, содержащим ошибки записям реестра, связанным с Customize.exe, или к вирусам / вредоносному ПО.

Более конкретно, данные ошибки customize.exe могут быть вызваны следующими причинами:

  • Поврежденные ключи реестра Windows, связанные с customize.exe / Workstation 6.
  • Вирус или вредоносное ПО, которые повредили файл customize.exe или связанные с Workstation 6 программные файлы.
  • Другая программа злонамеренно или по ошибке удалила файлы, связанные с customize.exe.
  • Другая программа находится в конфликте с Workstation 6 и его общими файлами ссылок.
  • Поврежденная загрузка или неполная установка программного обеспечения Workstation 6.

Keyring

A key can be added to a keyring by forcing an end of the loop open and sliding the key along the spiral.

A keyring or «split ring» is a ring that holds keys and other small items, which are sometimes connected to keychains. Other types of keyrings are made of leather, wood and rubber. Keyrings were invented in the 19th century by Samuel Harrison. The most common form of the keyring is a single piece of metal in a ‘double loop’. Either end of the loop can be pried open to allow a key to be inserted and slid along the spiral until it becomes wholly engaged onto the ring. Novelty carabiners are also commonly used as keyrings for ease of access and exchange. Often the keyring is adorned with a key fob for self-identification. Other forms of rings may use a single loop of metal or plastic with a mechanism to open and securely close the loop.

Certificate Revocation Status List

Attestation keys can be revoked for a number of reasons, including mishandling or suspected
extraction by an attacker. For this reason, it’s critical that the status of each certificate in
an attestation chain be checked against the official certificate revocation status list. This
list is maintained by Google and published at:

https://android.googleapis.com/attestation/status.
This URL returns a JSON file containing the revocation status for any certificates that don’t
have a normal valid status. The format of the JSON file adheres to the following JSON Schema
(draft 07) definition:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "entries": {
      "description" : "Each entry represents the status of an attestation key. The dictionary-key is the certificate serial number in lowercase hex.",
      "type": "object",
      "propertyNames": {
         "pattern": "^*$"
      },
      "additionalProperties": {
        "type": "object",
        "properties": {
          "status": {
            "description": " Current status of the key.",
            "type": "string",
            "enum": 
          },
          "expires": {
            "description": " UTC date when certificate expires in ISO8601 format (YYYY-MM-DD). Can be used to clear expired certificates from the status list.",
            "type": "string",
            "format": "date"
          },
          "reason": {
            "description": " Reason for the current status.",
            "type": "string",
            "enum": 
          },
          "comment": {
            "description": " Free form comment about the key status.",
            "type": "string",
            "maxLength": 140
          }
        },
        "required": ,
        "additionalProperties": false
      }
    }
  },
  "required": ,
  "additionalProperties": false
}

Example certificate revocation status list:

{
  "entries": {
    "2c8cdddfd5e03bfc": {
      "status": "REVOKED",
      "expires": "2020-11-13",
      "reason": "KEY_COMPROMISE",
      "comment": "Key stored on unsecure system"
    },
    "c8966fcb2fbb0d7a": {
      "status": "SUSPENDED",
      "reason": "SOFTWARE_FLAW",
      "comment": "Bug in keystore causes this key malfunction b/555555"
    }
  }
}

Legacy CRLs

The CRL urls embedded in legacy attestation certificates will continue to operate. New
attestation certificates will no longer contain a CRL url extension. The status of legacy
certificates will also be included in the attestation status list, so developers can safely
switch to using the attestation status list for both new and legacy certificates. An example of
how to correctly verify Android attestation keys is included in the Key Attestation sample.

Особо отличившийся

Если большинство уязвимых смартфонов использует слабые механизмы аутентификации OMA SMS, то в некоторых устройствах Samsung эта защита не была реализована в принципе на момент исследования (март 2019 г.). Злоумышленник мог просто отправить сообщение с запросом на настройку смартфона и при условии, что пользователь согласится с установкой, задаваемые в CP-сообщении параметры были бы применены. На данный момент Samsung выпустила обновление безопасности для исправления SVE-2019-14073. Так что, если ты не любитель обновлений от вендора или фанат кастомных Android-прошивок, то лучше озаботиться данной проблемой.
Что интересно, у Samsung это уже не первый случай подобного отношения к безопасности OMA CP:

Приложение Брелок: что это такое на Андроид

В современных версиях Andro >

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

Чтобы найти приложение, зайдите в настройки.

Далее — в раздел с приложениями.

Нажмите на три точки в правом верхнем углу, выберите «Показать системные процессы».

Открылась страница приложения.

Кнопки «Удалить» здесь, разумеется, нет.

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