Пакет cryptography
Пакет cryptography нацелен на то, чтобы быть «криптографом для людей», равно как и библиотека requests является «HTTP для людей». Суть в том, что вам нужно разработать простые криптографические рецепты которые и безопасны, и простые в использовании. Если нужно, вы можете перейти к низкоуровневым криптографическим примитивам, для которых требуется лишь знать, что вы делаете, в противном случае вы создадите что-то явно бесполезное в контексте защиты. Если вы работаете в Python 3.5 Windows, вы можете установить этот пакет при помощи pip следующим образом:
pip install cryptography
Вы увидите, что cryptography установится совместно с несколькими зависимостями. Предположим, что с установкой все прошло чисто, и мы можем зашифровать какой-нибудь текст. Давайте используем для этого модуль Fernet.
Модуль Fernet реализует простую в использовании схему аутентификации, которая использует симметричный алгоритм шифрования, который гарантирует, что каждое зашифрованное в нем сообщение не может быть использовано или прочитано без определенного вами ключа. Модуль Fernet также поддерживает ключ ротации через MultiFernet. Давайте взглянем на простой пример:
from cryptography.fernet import Fernet cipher_key = Fernet.generate_key() print(cipher_key) # APM1JDVgT8WDGOWBgQv6EIhvxl4vDYvUnVdg-Vjdt0o=
from cryptography.fernet import Fernet cipher = Fernet(cipher_key) text = b'My super secret message' encrypted_text = cipher.encrypt(text) print(encrypted_text) # (b'gAAAAABXOnV86aeUGADA6mTe9xEL92y_m0_TlC9vcqaF6NzHqRKkjEqh4d21PInEP3C9HuiUkS9f' # b'6bdHsSlRiCNWbSkPuRd_62zfEv3eaZjJvLAm3omnya8=')
decrypted_text = cipher.decrypt(encrypted_text) print(decrypted_text) # 'My super secret message'
Для начала, нам нужно импортировать Fernet. Затем мы генерируем ключ. Мы выводим ключ, чтобы увидеть, как он выглядит. Как вы видите, это случайна строка байтов. Если хотите, вы можете попробовать запустить метод generate_key несколько раз. Результат каждый раз новый. Далее мы создаем экземпляр нашего шифра Fernet при помощи нашего ключа. Теперь у нас есть шифр, который мы можем использовать для шифрования и расшифровки нашего сообщения. Следующий шаг, это создание сообщения, достойного шифровки, с последующей его шифровкой при помощи метода encrypt. Я пошел вперед и вывел наш зашифрованный текст так, чтобы вы увидели что вы больше не можете его читать. Для расшифровки нашего супер-засекреченного сообщения, мы просто вызовем метод decrypt в нашем шифре и передадим зашифрованный текст. В результате мы получим текстовую байтовую строку нашего сообщения.
Усиление хэшей
Существуют различные способы защиты от атак на хэши и ограничения их против криптографических хеш-функций.
Соленые хэши.
Посоление – это процесс добавления случайно сгенерированных данных (соли) на вход хеш-функции. Этот процесс помогает защититься от атак радужной таблицы. Пользователи могут включать значение соли в начало или конец пароля перед созданием хэша, который генерирует разные выходные данные, даже если пароли похожи. Кроме того, пользователь может держать соль в открытом доступе.
Хэши с ключами
HMAC – это пример хэшей с ключами, в которых используются криптографические ключи и хэш-функции для улучшения ограничений алгоритма кода аутентификации сообщения (MAC). Это помогает одновременно добиться конфиденциальности и целостности информации.
Адаптивная хеш-функция
Адаптивные хеш-функции предназначены для повторения их внутренней работы, поскольку название предполагает, что пользователь может регулировать количество итераций. Растягивание ключа – это один из методов, который принимает слабый ключ в качестве входных данных, обрабатывает его и повторяет процесс для вывода мощного ключа большого размера. Процесс может увеличить размер ключа до 128 бит, что затруднительно для атаки методом перебора. PBKDF2 и bcrypt – примеры адаптивных хэш-функций.
Что такое блок и блокчейн
В число базовых слов, определяющих сущность блокчейна, а вернее, безопасности транзакций входят понятия хэша и алгоритма хэширования. Старт любой децентрализованной сети и консенсуса с огромным количеством узлов непременно нуждается в обеспечении надежности и эффективности проверок. А для этого нужны специальные компактные элементы кодировки информации, которые обеспечивают быструю и безопасную проверку участниками сети. Чтобы понять, как это работает, надо определиться с понятием блокчейна.
Суть блокчейна заключается в последовательной обработке так называемых блоков. Прямой перевод blockchain – это цепочка блоков. Если проводить аналогии с сетевыми дневниками, один блок – это определенное количество записей, сгруппированных, подтвержденных, упакованных внутрь блока. Внутрь блока включены и транзакции, и временные метки. Блоки соединяются последовательно, один за другим, очередь из блоков формируется по мере добавления. Каждый блок содержит информацию не только о самом себе, но и о предыдущем блоке. Так можно добраться от последнего блока до самого первого и восстановить всю цепочку.
Что такое SHA-256: основные перспективы
Главная угроза для семейства алгоритмических протоколов АНБ — это многократное усложнение майнинга, после того как в отрасль пошли крупные инвестиции для покупки вычислительных мощностей. Время майнеров-одиночек закончилось, а промышленный майнинг требует все большей и большей технологической оснащенности.
У конкурентов, использующих самые современные разработки (технологию Scrypt) все эти недостатки устраняются достаточно оперативно. А у занимающего львиную долю криптовалютного рынка алгоритма SHA-256 влияние постепенно слабнет, и он начинает проигрывать более защищенных и продвинутых протоколов. Сначала уровень надежности потеряли ранние версии протоколов SHA-1. А теперь сложности возникают и у более продвинутых версий: SHA-256 и SHA-512.
Шифровка файла
Теперь у нас в распоряжении есть и приватный и публичный ключи, так что мы можем зашифровать кое-какие данные и вписать их в файл. Вот достаточно простой пример:
from Crypto.PublicKey import RSA from Crypto.Random import get_random_bytes from Crypto.Cipher import AES, PKCS1_OAEP with open('encrypted_data.bin', 'wb') as out_file: recipient_key = RSA.import_key( open('my_rsa_public.pem').read() ) session_key = get_random_bytes(16) cipher_rsa = PKCS1_OAEP.new(recipient_key) out_file.write(cipher_rsa.encrypt(session_key)) cipher_aes = AES.new(session_key, AES.MODE_EAX) data = b'blah blah blah Python blah blah' ciphertext, tag = cipher_aes.encrypt_and_digest(data) out_file.write(cipher_aes.nonce) out_file.write(tag) out_file.write(ciphertext)
Первые три строки покрывают наши импорты из PyCryptodome. Далее мы открываем файл для записи. Далее, мы импортируем наш публичный ключ в переменной и создаем 16-битный ключ сессии. Для этого примера мы будем использовать гибридный метод шифрования, так что мы используем PKCS#1 OAEP (Optimal asymmetric encryption padding). Это позволяет нам записывать данные произвольной длинны в файл. Далее, мы создаем наш шифр AES, создаем кое-какие данные и шифруем их. Это дает нам зашифрованный текст и MAC. Наконец, мы выписываем nonce, MAC (или тег), а также зашифрованный текст. К слову, nonce – это произвольное число, которое используется только в криптографических связях. Обычно это случайные или псевдослучайные числа. Для AES, оно должно быть минимум 16 байтов в ширину. Вы вольны попытаться открыть зашифрованный файл в своем текстовом редакторе. Вы увидите только какое-то безобразие. Теперь попробуем расшифровать наши данные:
from Crypto.PublicKey import RSA from Crypto.Cipher import AES, PKCS1_OAEP code = 'nooneknows' with open('encrypted_data.bin', 'rb') as fobj: private_key = RSA.import_key( open('my_rsa_key.pem').read(), passphrase=code ) enc_session_key, nonce, tag, ciphertext = cipher_rsa = PKCS1_OAEP.new(private_key) session_key = cipher_rsa.decrypt(enc_session_key) cipher_aes = AES.new(session_key, AES.MODE_EAX, nonce) data = cipher_aes.decrypt_and_verify(ciphertext, tag) print(data)
Если вы разобрались с предыдущим примером, то этот код должен быть весьма простым для разбора. В данном случае, мы открываем наш зашифрованный файл для чтения в бинарном режиме. Далее, мы импортируем наш приватный ключ
Обратите внимание на то, что когда вы импортируете приватный ключ, вы должны передать ему код доступа. В противном случае возникнет ошибка
Далее мы считываем наш файл. Вы заметите, что сначала мы считываем приватный ключ, затем 16 байтов для nonce, за которыми следуют 16 байтов, которые являются тегом, и наконец, остальную часть файла, который и является нашими данными. Далее нам нужно расшифровать наш ключ сессии, пересоздать наш ключ AES и расшифровать данные. Вы можете использовать PyCryptodome в намного более широком ряде случаев. Однако, нам нужно идти дальше и посмотреть, что еще мы можем сделать для наших криптографических нужд в Python.
Как работают хэши и как они используются для проверки данных
Хеши — это продукты криптографических
алгоритмы
предназначен для создания строки символов. Часто эти строки имеют фиксированную длину, независимо от размера входных данных. Взгляните на приведенную выше таблицу, и вы увидите, что и «Лиса», и «Рыжая лиса перепрыгивает через синюю собаку» дают одинаковую длину.
Теперь сравните второй пример на диаграмме с третьим, четвертым и пятым. Вы увидите, что, несмотря на очень незначительные изменения во входных данных, все полученные хэши сильно отличаются друг от друга. Даже если кто-то изменит очень небольшую часть входных данных, хеш изменится резко.
MD5, SHA-1 и SHA-256 — это разные хэш-функции. Создатели программного обеспечения часто берут скачанный файл — например, файл .iso для Linux или даже файл .exe для Windows — и запускают его с помощью хэш-функции. Затем они предлагают официальный список хэшей на своих сайтах.
Таким образом, вы можете загрузить файл, а затем запустить хеш-функцию, чтобы убедиться, что у вас есть настоящий исходный файл и что он не был поврежден в процессе загрузки. Как мы видели выше, даже небольшое изменение файла резко изменит хэш.
Они также могут быть полезны, если у вас есть файл, полученный из неофициального источника, и вы хотите подтвердить его подлинность. Допустим, у вас есть файл Linux .ISO, который вы откуда-то взяли, и вы хотите убедиться, что он не был изменен. Вы можете найти хэш этого конкретного ISO-файла в Интернете на сайте дистрибутива Linux. Затем вы можете запустить его через хеш-функцию на своем компьютере и убедиться, что он соответствует ожидаемому хеш-значению. Это подтверждает, что у вас есть тот же файл, который предлагается для загрузки на веб-сайте дистрибутива Linux, без каких-либо изменений.
Обратите внимание, что «коллизии» были обнаружены с функциями MD5 и SHA-1. Это несколько разных файлов — например, безопасный файл и вредоносный файл — которые приводят к одному и тому же хешу MD5 или SHA-1
Вот почему вам следует по возможности предпочесть SHA-256.
Hash MD5 и SHA256
SHA256sum и MD5sum являются программами, которые реализуют алгоритмы SHA256 и MD5 соответственно. Эти файлы в основном используются для подтверждения целостности и подлинности файла.
И MD5, и SHA256 — это два разных алгоритма, и разработчики сами должны решить, какой из них им использовать на странице загрузки. Как Вы можете видеть выше, разработчики проекта Ravencoin предоставили как hash файл MD5, так и hash SHA256 для проверки файла загрузки кошелька.
Но это не типично. Из-за проблем безопасности в алгоритме MD5 большинство разработчиков не используют его. В настоящее время широко используются только hash SHA256.
На веб-сайте Monero Вы могли заметить hash-значения SHA256, перечисленные вместе с программным обеспечением.
В то время как некоторые разработчики создают и распространяют hash вместе с каждым выпуском программного обеспечения, некоторые разработчики подписывают каждую новую версию пакета установщика цифровой подписью официального разработчика.
В ядре Bitcoin Вы найдете то, что называется релиз-сигнатурами или другими словами релиз-хеши. Это файл ASC, который обычно содержит hash SHA256 и подпись PGP.
Просто скачайте файл и откройте его с помощью Блокнота или в Блокноте ++. Вы увидите случайную строку букв и цифр, похожих на эту.
——BEGIN PGP SIGNED MESSAGE—— Hash: SHA256 5659c436ca92eed8ef42d5b2d162ff6283feba220748f9a373a5a53968975e34 bitcoin-0.17.1-aarch64-linux-gnu.tar.gz aab3c1fb92e47734fadded1d3f9ccf0ac5a59e3cdc28c43a52fcab9f0cb395bc bitcoin-0.17.1-arm-linux-gnueabihf.tar.gz b1e1dcf8265521fef9021a9d49d8661833e3f844ca9a410a9dd12a617553dda1 bitcoin-0.17.1-i686-pc-linux-gnu.tar.gz 6aa567381b95a20ac96b0b949701b04729a0c5796c320481bfa1db22da25efdb bitcoin-0.17.1-osx64.tar.gz e3d785d800b71d277959d15b2c2b33d44dd72c1288e559928a40488dd935c949 bitcoin-0.17.1-osx.dmg 3e564fb5cf832f39e930e19c83ea53e09cfe6f93a663294ed83a32e194bda42a bitcoin-0.17.1.tar.gz e9245e682126ef9fa4998eabbbdd1c3959df811dc10df60be626a5e5ffba9b78 bitcoin-0.17.1-win32-setup.exe 6464aa2d338f3697950613bb88124e58d6ce78ead5e9ecacb5ba79d1e86a4e30 bitcoin-0.17.1-win32.zip fa1e80c5e4ecc705549a8061e5e7e0aa6b2d26967f99681b5989d9bd938d8467 bitcoin-0.17.1-win64-setup.exe 1abbe6aa170ce7d8263d262f8cb0ae2a5bb3993aacd2f0c7e5316ae595fe81d7 bitcoin-0.17.1-win64.zip 53ffca45809127c9ba33ce0080558634101ec49de5224b2998c489b6d0fc2b17 bitcoin-0.17.1-x86_64-linux-gnu.tar.gz ——BEGIN PGP SIGNATURE—— yYo/F2yO57Yacv597rKILlg29QxEVTqa5+slMdwuU7NP5AdAcQV4EtFqoCOqM7C7 JL/zZWYnTywK3l0hOuCBJiY86izutWME5xgm7Eh3ORj+K6ZYT4iXw2JIkTdumeuS X0WDE3ShH4rb35IaQX75FJLp5R7hLTXiNgng7b8Xhy/62bJ75Ob4HVVSLG1Lkhps vtml10br+78qXiofzk8zaAW6KaG7G9nbBa0hfDjUEsYzA6P5iWA+53ykupc82HNa ZT2gk+wWhNhZOd/ANheriM0eqm/ZlK7oydYRRtf9Tamk+XJgREU1x8cWlMZcCPEE uIUzb7/REvYSjwcwArYLCq/eFPfjQe7jcG2WexnpxxkKJBvu2v4zVw9LLUPll094 BAmfk34iJKhN2cGVhvjO0Q9GKk0B2HzvhD5xn1Hnlp+NbXVNbKonYvkB71D3GY4W t/eRyv7Erfi4dhHf+8oQ =UEoM ——END PGP SIGNATURE——
Это криптографический hash, и эта информация предоставляется пользователям для проверки целостности файла. Разработчики криптовалюты и веб-сайты советуют пользователям проверять подлинность загружаемого файла перед его использованием. Однако большинство пользователей не делают этого или не знают, что делать с этой информацией. Поэтому мы решили сделать статью по этому вопросу. Здесь, в этом руководстве для начинающих, мы покажем вам, как проверять контрольные суммы (только hash SHA256 и hash MD5, а не подписи PGP).
Но зачем это делать!? В любом случае я загружаю кошелек из официального источника, так почему я должен проверять подлинность загруженного кошелька? Кроме того, что такое контрольная сумма и как помогает проверка контрольной суммы?
Как проверить хеш-сумму файла — HashTab
Очень и очень просто. Сейчас вмонтируем в Проводник Windows специальный инструмент для вычисления и проверки этой контрольной суммы файла.
Нам поможет абсолютно бесплатная, для личного использования, компьютерная программа под названием HashTab.
Устанавливаем её в свою операционную систему (ссылка на скачивание инсталлятора чуть ниже)…
…и получаем в свойствах любого файла дополнительную вкладку…
Решил проверить хеш-сумму большого по размеру файла и поэтому, как видите выше, даже успел снять скриншот. С файлами обычного, среднего размера эта процедура происходит практически мгновенно…
Зелёная галка в появившемся разделе «Сравнение хеша» означает, что всё хорошо и файл телепортировался в целости и сохранности (никто его по пути не перехватывал и не внедрял в него вирус).
Можно просто узнать сумму файла или сравнить её с первоисточником (например, с сайта производителя какой-либо скачанной программы). Для этого просто вставляете его в строку и жмёте кнопочку «Сравнить файл…».
Настройки HashTab очень просты и сводятся к активации (отображению) дополнительных стандартов в окошке свойств файла…
Блоки в Bitcoin-сети взаимосвязаны
Blockchain – это реестр данных, в котором хранится вся информация о проводимых в сети транзакциях. По названию понятно, что база данных основана на блоках, которые взаимосвязаны между собой. Майнеры записывают в них сведения о переводах монет за установленный период путем решения сложных задач на мощном вычислительном оборудовании. У каждого блока есть уникальная подпись – хеш-код.
Подпись каждого нового блока основана на заголовке предыдущего.
Этот принцип позволяет создать консолидированную систему с максимальным уровнем защиты. В ней нельзя ничего переделать или фальсифицировать. Майнеры определяют подпись нового блока, выполняя сложные расчеты на своем оборудовании. Взамен они получают вознаграждение в виде монет.
Что такое хеш
Криптографическая хеш-функция, чаще называемая просто хешем, — это математическое преобразование, переводящее произвольный входной массив данных в состоящую из букв и цифр строку фиксированной длины. Хеш считается криптостойким, если справедливо следующее:
- по хешу нельзя восстановить исходные данные;
- выполняется устойчивость к коллизиям, то есть невозможно получить из различных входных последовательностей одинаковые хеши.
MD5, SHA-1 и SHA-256 — наиболее популярные криптографические алгоритмы вычисления хеша, которые часто используются в детектировании вредоносного ПО. Еще совсем недавно вредонос опознавали только по сигнатуре (хешу) исполняемого файла.
Но в современных реалиях недостаточно знать просто хеш объекта, так как это слабый индикатор компрометации (IoC). IoC — это все артефакты, на основе которых может быть выявлен вредонос. Например, используемые им ветки реестра, подгружаемые библиотеки, IP-адреса, байтовые последовательности, версии ПО, триггеры даты и времени, задействованные порты, URL.
Рассмотрим «пирамиду боли» для атакующего, придуманную аналитиком в области информационной безопасности Дэвидом Бьянко. Она описывает уровни сложности индикаторов компрометации, которые злоумышленники используют при атаках. Например, если ты знаешь MD5-хеш вредоносного файла, его можно довольно легко и при этом точно обнаружить в системе. Однако это принесет очень мало боли атакующему — достаточно добавить один бит информации к файлу вредоноса, и хеш изменится. Таким образом вирус может переселяться бесконечно, и каждая новая его копия будет иметь отличный от других экземпляров хеш.
«Пирамида боли» Дэвида Бьянко
Другие статьи в выпуске:
Xakep #258. NPM Hijacking
- Содержание выпуска
- Подписка на «Хакер»-60%
Если ты имеешь дело с множеством вредоносных образцов, становится понятно, что большинство из них по сути своей не уникальны. Злоумышленники нередко заимствуют или покупают исходники друг у друга и используют их в своих программах. Очень часто после появления в паблике исходных кодов какого-либо вредоносного ПО в интернете всплывают многочисленные поделки, состряпанные из доступных фрагментов.
Как же определить схожесть между разными образцами малвари одного семейства?
Для поиска такого сходства существуют специальные алгоритмы подсчета хеша, например нечеткое (fuzzy) хеширование и хеш импортируемых библиотек (imphash). Эти два подхода используют разные методы обнаружения для поиска повторно встречающихся фрагментов вредоносных программ, принадлежащих к определенным семействам. Рассмотрим эти два метода подробнее.
Для чего используются хеши?
Криптографические хеши в основном используются для защиты паролей, а не для сохранения их в виде открытого текста в базе данных . Если вы когда-либо читали что-либо о хэш-функциях, скорее всего, это было об их основном использовании, защите паролей, чтобы избежать их хранения в виде открытого текста. Представим, что киберпреступники способны взломать сервис и украсть его базу данных, если бы пароли не были хешированы, их учетные данные были бы немедленно раскрыты.
Чтобы убедиться, что мы правильно ввели пароль, который хранится в базе данных (хэш ключа сохраняется), нужно применить алгоритм хеширования к введенному паролю и сравнить его с сохраненным, если это то же самое, ключ правильный, если другой, ключ неправильный. Эта процедура используется во всех операционных системах, на веб-сайтах с аутентификацией пользователя / пароля и т. Д.
Если вам когда-либо придется восстановить или повторно получить свой пароль из онлайн-службы, вам придется сбросить его, потому что даже сама служба не сможет предоставить вам пароль в открытом виде, а будет хранить только хэш пароля. . Если в какой-либо службе вы попросили восстановить пароль, и они предложили его вам в виде обычного текста, это означает, что они хранятся таким образом, и использовать эту службу небезопасно. Хотя типичные пароли 123456 имеют хорошо известные хэши, как только мы введем надежный ключ, его не будет в какой-либо онлайн-системе хеширования, и нам придется взламывать его самостоятельно с помощью таких инструментов, как Hashcat, среди прочих.
Не все алгоритмы хеширования предназначены для паролей, криптографические хеш-функции также используются для обнаружения вредоносных программ, их можно использовать для обнаружения различных песен или фильмов, защищенных авторскими правами, и создания черных списков. Это также публичные списки вредоносных программ , они известны как сигнатуры вредоносных программ, они состоят из хеш-значений полных или небольших частей вредоносного ПО. Таким образом, если, с одной стороны, пользователь обнаруживает подозрительный файл, он может обратиться к этим общедоступным базам данных хешей и, таким образом, узнать, является ли это вредоносный файл или он не представляет никакой опасности, в свою очередь, с помощью On the С другой стороны, они также служат для того, чтобы антивирус обнаруживал и блокировал вредоносные программы, сравнивая хэши своих собственных баз данных и общедоступных баз данных, о которых мы говорим.
Еще одно важное использование функций криптографического хеширования — обеспечить целостность сообщений. Их можно использовать для этой цели
проверять хэши, созданные до и после передачи данных Таким образом, если хэши полностью идентичны, это будет означать, что связь была безопасной и данные не были изменены, в противном случае что-то пошло не так, и данные, полученные в конце связи, не совпадают с те, что были выпущены в начале.
Теперь, когда мы знаем все о хэш-функциях, давайте посмотрим, какие из них сегодня используются наиболее часто.
Получение хэша файла в командной строке с помощью CertUtil
В Windows присутствует встроенная утилита CertUtil для работы с сертификатами, которая, помимо прочего, умеет высчитывать контрольную сумму файлов по алгоритмам:
- MD2, MD4, MD5
- SHA1, SHA256, SHA384, SHA512
Для использования утилиты достаточно запустить командную строку Windows 10, 8 или Windows 7 и ввести команду в формате:
certutil -hashfile путь_к_файлу алгоритм
Пример получения хэша MD5 для файла показан на скриншоте ниже.
Дополнительно: на случай, если вам требуются сторонние программы для вычисления хэшей файлов в Windows, можно обратить внимание на SlavaSoft HashCalc. Если же требуется вычислить контрольную сумму в Windows XP или в Windows 7 без PowerShell 4 (и возможности его установить), вы можете использовать утилиту командной строки Microsoft File Checksum Integrity Verifier, доступную для загрузки на официальном сайте https://www.microsoft.com/en-us/download/details.aspx?id=11533 (формат команды для использования утилиты: fciv.exe путь_к_файлу — результат будет MD5
Также можно вычислить хэш SHA1: fciv.exe -sha1 путь_к_файлу)
Если же требуется вычислить контрольную сумму в Windows XP или в Windows 7 без PowerShell 4 (и возможности его установить), вы можете использовать утилиту командной строки Microsoft File Checksum Integrity Verifier, доступную для загрузки на официальном сайте https://www.microsoft.com/en-us/download/details.aspx?id=11533 (формат команды для использования утилиты: fciv.exe путь_к_файлу — результат будет MD5. Также можно вычислить хэш SHA1: fciv.exe -sha1 путь_к_файлу)
<center></center>
В некоторых ситуациях, может быть необходимо, посчитать MD5 хеш-сумму для файла, который вы скачали на свой компьютер. Например, чтобы быть уверенным в том, что вы скачали именно тот файл, который хотели и злоумышленник его не модифицировал. В этой статье мы рассмотрим 2 разных способа это сделать: через расширение для проводника, а также через командную строку.