Bonjour
J'esaye d'intégrer ce code à Windev :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
 
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
 
using System.Data;
using System.Data.SqlTypes;
using System.Data.SqlClient;
 
namespace ChromeCookies
{
    class ChromeManager
    {
        public List<Cookie> GetCookies(string hostname)
        {
            string ChromeCookiePath = @"C:\Users\" + Environment.UserName + @"\AppData\Local\Google\Chrome\User Data\Default\Network\Cookies";
            List<Cookie> data = new List<Cookie>();
            if (File.Exists(ChromeCookiePath))
            {
                try
                {
                    using (var conn = new SqliteConnection("Data Source={ChromeCookiePath}"))
                    using (var cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = "SELECT name, encrypted_value, host_key FROM cookies WHERE host_key = '{hostname}'";
                        byte[] key = AesGcm256.GetKey();
 
                        conn.Open();
                        using (var reader = cmd.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                if (!data.Any(a => a.Name == reader.GetString(0)))
                                {
                                    byte[] encryptedData = GetBytes(reader, 1);
                                    byte[] nonce, ciphertextTag;
                                    AesGcm256.prepare(encryptedData, out nonce, out ciphertextTag);
                                    string value = AesGcm256.decrypt(ciphertextTag, key, nonce);
 
                                    data.Add(new Cookie()
                                    {
                                        Name = reader.GetString(0),
                                        Value = value
                                    });
                                }
                            }
                        }
                        conn.Close();
                    }
                }
                catch { }
            }
            return data;
        }
 
        private byte[] GetBytes(SqliteDataReader reader, int columnIndex)
        {
            const int CHUNK_SIZE = 2 * 1024;
            byte[] buffer = new byte[CHUNK_SIZE];
            long bytesRead;
            long fieldOffset = 0;
            using (MemoryStream stream = new MemoryStream())
            {
                while ((bytesRead = reader.GetBytes(columnIndex, fieldOffset, buffer, 0, buffer.Length)) > 0)
                {
                    stream.Write(buffer, 0, (int)bytesRead);
                    fieldOffset += bytesRead;
                }
                return stream.ToArray();
            }
        }
    }
 
    public class Cookie
    {
        public string Name { get; set; }
        public string Value { get; set; }
    }
 
    class AesGcm256
    {
        public static byte[] GetKey()
        {
            string sR = string.Empty;
            var appdata = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
            string path = @"C:\Users\" + Environment.UserName + @"\AppData\Local\Google\Chrome\User Data\Local State";
 
            string v = File.ReadAllText(path);
 
            dynamic json = JsonConvert.DeserializeObject(v);
            string key = json.os_crypt.encrypted_key;
 
            byte[] src = Convert.FromBase64String(key);
            byte[] encryptedKey = src.Skip(5).ToArray();
 
            byte[] decryptedKey = ProtectedData.Unprotect(encryptedKey, null, DataProtectionScope.CurrentUser);
 
            return decryptedKey;
        }
 
		public static string decrypt(byte[] encryptedBytes, byte[] key, byte[] iv)
        {
            string sR = String.Empty;
            try
            {
                GcmBlockCipher cipher = new GcmBlockCipher(new AesEngine());
                AeadParameters parameters = new AeadParameters(new KeyParameter(key), 128, iv, null);
 
                cipher.Init(false, parameters);
                byte[] plainBytes = new byte[cipher.GetOutputSize(encryptedBytes.Length)];
                Int32 retLen = cipher.ProcessBytes(encryptedBytes, 0, encryptedBytes.Length, plainBytes, 0);
                cipher.DoFinal(plainBytes, retLen);
 
                sR = Encoding.UTF8.GetString(plainBytes).TrimEnd("\r\n\0".ToCharArray());
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.StackTrace);
            }
 
            return sR;
        }
 
       public static void prepare(byte[] encryptedData, out byte[] nonce, out byte[] ciphertextTag)
       {
            nonce = new byte[12];
            ciphertextTag = new byte[encryptedData.Length - 3 - nonce.Length];
 
            System.Array.Copy(encryptedData, 3, nonce, 0, nonce.Length);
            System.Array.Copy(encryptedData, 3 + nonce.Length, ciphertextTag, 0, ciphertextTag.Length);
       }
    }
}
La compilation est faite par Windev donc il n'est pas possible de modifier la commande :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
"C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\csc.exe"  /target:library /debug:pdbonly /nologo /unsafe /optimize+ /warn:0 /reference:"D:\Program Files (x86)\PC SOFT\WINDEV 24\Programmes\FrameWork\Win32x86\wd240net4.dll" /platform:x86 /reference:"System.Management.dll" /reference:"mscorlib.dll" /reference:"System.Runtime.dll" /out:"WD24_Csharp.dll" *.cs
qui donne cette erreur :

Erreur :ChromeManager.cs(56,33): error CS0246: Le type ou le nom d'espace de noms 'SqliteDataReader' est introuvable (
une directive using ou une référence d'assembly est-elle manquante*?)
WD24_Csharp, Déclarations globales de WD24_Csharp, ligne 0, colonne 0

J'ai bien compris qu'il ne trouvait pas le type : SqliteDataReader dans la déclaration de :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
private byte[] GetBytes(SqliteDataReader reader, int columnIndex)
pourtant il existe bien à la ligne 29 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
using (var reader = cmd.ExecuteReader())
PS : je suis un débutant sur C#