2015-02-16 2 views
0

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

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

Как оказалось, теперь есть «ransomware», который шифрует файлы пользователя, а затем требует оплаты ключа дешифрования.

Kapersky, в частности, флагами шифрует файл как вредоносное ПО и очень эффективно убивает приложение. При шифровании Kaspersky идентифицирует вредоносное ПО, идентифицированное как PDM:Win32.Generic, и продолжает обнаруживать, завершать и удалять. Сканирование уже зашифрованного устройства возвращается на 100% чистым - никаких проблем.

Вот код шифрования/дешифрования файла. Он адаптирован из статьи шифрования файлов CodeProject. Может ли быть что-то в этом коде, что вызывает подозрение в программном обеспечении AV? Я буду использовать только чистый .NET, нет третьих сторонних библиотек:

/// <summary> 
    /// Encrypt a file with a user-supplied password. 
    /// WARNING: File will be lost if password is forgotton. 
    /// </summary> 
    /// <param name="inputFile"> 
    /// The name of the unencrypted file to encrypt. 
    /// </param> 
    /// <param name="encryptedFile"> 
    /// The name of the newly encrypted file to created. 
    /// </param> 
    /// <param name="clearTextPassword"></param> 
    /// <param name="salt"> 
    /// You can bypass this and use the predefined salt in this class 
    /// BUT IT IS NOT RECOMMENDED. Your code should provide an 8-byte 
    /// array for the salt. 
    /// </param> 
    public static void EncryptFile(string inputFile, string encryptedFile, 
     string clearTextPassword, byte[] salt = null) 
    { 
     salt = salt ?? FileSalt; 
     byte[] key = new Rfc2898DeriveBytes(clearTextPassword, salt).GetBytes(16); 
     FileStream fsCrypt = new FileStream(encryptedFile, FileMode.Create); 
     RijndaelManaged rmCrypto = new RijndaelManaged(); 
     rmCrypto.Padding = PaddingMode.PKCS7; 
     CryptoStream cs = new CryptoStream(fsCrypt, 
      rmCrypto.CreateEncryptor(key, key), 
      CryptoStreamMode.Write); 
     FileStream fsIn = new FileStream(inputFile, FileMode.Open); 
     int data; 
     while((data = fsIn.ReadByte()) != -1) 
      cs.WriteByte((byte)data); 
     fsIn.Close(); 
     cs.Close(); 
     fsCrypt.Close(); 
    } 

    /// <summary> 
    /// Decrypt a file with a user-supplied password. 
    /// </summary> 
    /// <param name="inputFile"> 
    /// The name of the encrypted file to decrypt. 
    /// </param> 
    /// <param name="unencryptedFile"> 
    /// The name of the unencrypted file to create. 
    /// </param> 
    /// <param name="clearTextPassword"></param> 
    /// <param name="salt"> 
    /// You can bypass this and use the predefined salt in this class 
    /// BUT IT IS NOT RECOMMENDED. Your code should provide an 8-byte 
    /// array for the salt. 
    /// </param> 
    public static void DecryptFile(string inputFile, string unencryptedFile, 
     string clearTextPassword, byte[] salt = null) 
    { 
     salt = salt ?? FileSalt; 
     byte[] key = new Rfc2898DeriveBytes(clearTextPassword, salt).GetBytes(16); 
     FileStream fsCrypt = new FileStream(inputFile, FileMode.Open); 
     RijndaelManaged rmCrypto = new RijndaelManaged(); 
     rmCrypto.Padding = PaddingMode.PKCS7; 
     CryptoStream cs = new CryptoStream(fsCrypt, 
      rmCrypto.CreateDecryptor(key, key), 
      CryptoStreamMode.Read); 
     FileStream fsOut = new FileStream(unencryptedFile, FileMode.Create); 
     int data; 
     while((data = cs.ReadByte()) != -1) 
      fsOut.WriteByte((byte)data); 
     fsOut.Close(); 
     cs.Close(); 
     fsCrypt.Close(); 
    } 

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

+0

Oo ... Проблема в этом случае - Kapersky, а не RijndaelManaged ... – rducom

+0

Вы должны направить этот вопрос (и фактический исполняемый файл) на поддержку Kaspersky. –

+0

И как безопасно * «дешифровать файлы в папку временного компьютера хоста» *? Исходное восстановление или чтение необработанного диска откроет их – Xen2050

ответ

0

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

+1

Вы можете отправить свое приложение на virustotal.com, чтобы проверить, дают ли другие вендоры ложные положительные –

+0

@ScottChamberlain спасибо за отзыв. Я займусь этим. –

Смежные вопросы