PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Comment décrypter ce texte ?
Comment décrypter ce texte ?
Débuté par GpEp, 24 mai 2022 12:31 - 18 réponses
Membre enregistré
45 messages
Posté le 24 mai 2022 - 12:31
Bonjour à tous

Le blog du support technique Pcsoft :
https://blogs.pcsoft.fr/fr/lire-contenu-cookies-enregistres-lors-utilisation-nouveau-champ-html-windev-26/281474976710941/read.awp
fournit le code à utiliser pour lire le contenu des cookies enregistrés lors de l'utilisation du nouveau champ HTML.

L'adaptation de ce code m'a permis de récupérer les informations suivantes :
Cookies du projet xxxxx
ROWID: 4
creation_utc: 908099390
host_key: .windev.com
name: _ga
value:
path: /
expires_utc: -311284864
is_secure: 0
is_httponly: 0
last_access_utc: -716062681
has_expires: 1
is_persistent: 1
priority: 1
encrypted_value: v10X&Íkõ¡^"Z ÜÍËWL ]ìåK™®|¾lˆð:,§~ŸR䌫TSbLSº¤æ
samesite: -1
source_scheme: 2

Nota : Chromium crypte par défaut les valeurs des cookies (rubrique encrypted_value de la base sqllite)

Ma question est donc la suivante :
Pouvez-vous m'aiguiller pour créer la procédure qui permettra de décrypter seulement ce texte en clair pour compléter cet affichage de cookies ?
v10X&Íkõ¡^"Z ÜÍËWL ]ìåK™®|¾lˆð:,§~ŸR䌫TSbLSº¤æ

Après de longues recherches j'ai retenu que c'était c'était un cryptage AES 256 : qu'en pensez-vous ?
Tous conseils seront les bienvenus.
Mais je ne sais pas comment le traiter avec windev 26.

Merci d'avance
Membre enregistré
946 messages
Popularité : +102 (110 votes)
Posté le 24 mai 2022 - 15:17
Bonjour
vous devriez trouver de l'aide ici :https://stackoverflow.com/questions/22532870/encrypted-cookies-in-chrome

--
«Nos clients sont nos meilleurs beta testeur.» H. Mintzberg
«Un programme informatique fait ce que vous lui avez dit de faire, pas ce que vous voulez qu'il fasse» Troisième loi de Greer
Membre enregistré
45 messages
Posté le 24 mai 2022 - 17:16
Bonjour Philippe et merci pour votre aide.

Effectivement je connais ce site et notamment cette discussion mais mon problème essentiel est que je ne connais pas du tout le langage C#
et donc que j'ai du mal à comprendre les finesses des extractions de caractères des procédures.
Déjà en premier je voudrais trouver une définition précise des parties qui composent ce texte à décrypter et peut-etre une dll qui serait nécessaire

v10X&Íkõ¡^"Z ÜÍËWL ]ìåK™®|¾lˆð:,§~ŸR䌫TSbLSº¤æ

J'ai cru comprendre que :
- les 3 premiers caracteres v10 indiquent un cryptage AES-256
- une variable nonce est à extraire a partir de 4 sur une longueur de 15 et doit etre decodée BASE64)
- une variable donnée est à extraire a partir de 16 jusqu'à la fin du texte
tout cela avec un jonglage de buffers car les valeurs des variables sont en bits à part les 3 premiers caractères v10

Il doit y avoir aussi une clé de décryptage à récupérer quelque part mais je ne sais pas où ?
et en plus j'ai cru comprendre est que la clé windows de PC est aussi susceptible de participer à tout celà.
Membre enregistré
795 messages
Popularité : +40 (42 votes)
Posté le 24 mai 2022 - 17:55
"For people who are looking for the code, I'm expanding on Cerberus answer. Starting Chrome 80 version, cookies are encrypted using the AES256-GCM algorithm, and the AES encryption key is encrypted with the DPAPI encryption system, and the encrypted key is stored inside the ‘Local State’ file." in the last post in https://stackoverflow.com/questions/60230456/dpapi-fails-with-cryptographicexception-when-trying-to-decrypt-chrome-cookies/60611673…

Rubén
Membre enregistré
946 messages
Popularité : +102 (110 votes)
Posté le 24 mai 2022 - 19:35
Bonsoir
Vous avez la possibilité d’intégrer le code C# directement dans votre projet WD voir https://forum.pcsoft.fr/fr-FR/pcsoft.fr.windev/239701-saisir-code-239894/read.awp…

--
«Nos clients sont nos meilleurs beta testeur.» H. Mintzberg
«Un programme informatique fait ce que vous lui avez dit de faire, pas ce que vous voulez qu'il fasse» Troisième loi de Greer
Membre enregistré
45 messages
Posté le 25 mai 2022 - 14:57
Bonjour
Pardonnez mon délai de réponse mais j'ai commencé à voir ou revoir vos conseils :

Pour Ruben :
"Pour les personnes qui cherchent le code, je développe la réponse de Cerberus. À partir de la version 80 de Chrome, les cookies sont chiffrés en "utilisant l'algorithme AES256-GCM, et la clé de chiffrement AES est chiffrée avec le système de chiffrement DPAPI, et la clé chiffrée est stockée à "l'intérieur du fichier 'Local State'." dans le dernier message dans https:// .....

Merci pour cette information car lors de ma recherche dans les cookies j'avais trouvé le fichier Local State qui contient une clé "os_crypt":"{"encrypted_key":" .... mais sauf erreur de ma part je n'ai rien trouvé qui me disait que ce fichier était à rapprocher du fichier Cookies.
Donc merci pour cette confirmation et merci aussi pour la conversation https://stackoverflow.com qui contient la procédure en langage C#.

Pour Philippe :
Merci pour votre orientation d'utiliser directement l'intégration du code C#.
Je suis en Windev 26 et vais voir comment digérer toutes ces informations.

Un grand merci à tous les deux ! Vos réponses sont vraiment ce que j'espérai.s
Cordialement
Membre enregistré
45 messages
Posté le 03 juin 2022 - 12:22
Bonjour,

J'ai été vraiment long sur ce problème qui m'a forcé à beaucoup rechercher, beaucoup tester et beaucoup décanter toutes les informations
recueillies sur plein de sujets que je n'avais jamais étudiés jusqu'à présent et donc jamais utilisé.

Compte tenu de mon problème qui est uniquement de défricher une ligne dans un cookies j'ai d'abord essayé une procédure en C# mais
en ai déduit que c'était une vraie usine à gaz à mettre en place et à maintenir.
Finalement j'ai trouvé sur les forums une solution plus légère à mettre en place en PowerShell version 7.2. avec le code suivant :

////////////
Add-Type -Assembly System.Security

# Attention ! adapter les noms des fichiers cookies

# $ExtensionFile = "$($env:LOCALAPPDATA)\Google\Chrome SxS\User Data\Local State"
$ExtensionFile = "$($env:LOCALAPPDATA)\Temp\cache.cef\xxxxxxx\LocalPrefs.json"

# $protectedDataPath = "$($env:HOMEPATH)\Downloads\enc.cookie.bin"
$protectedDataPath = "C:\Users\grand\AppData\Local\Temp\cache.cef\xxxxxxx\Cookies"

$jsondata = Get-Content -Raw -Path $ExtensionFile | ConvertFrom-Json
$encKey = [System.Convert]::FromBase64String($jsondata.os_crypt.encrypted_key.ToString());
$encKey= $encKey[5..$encKey.Length];

$decryptedKey = [Security.Cryptography.ProtectedData]::Unprotect($enckey,$null, [Security.Cryptography.DataProtectionScope]::CurrentUser)

$encodedCookieData=[System.IO.File]::ReadAllBytes($protectedDataPath)

[byte[]]$nonce = $encodedCookieData[3..14]
[byte[]]$ciphertext = $encodedCookieData[15..($encodedCookieData.Length-1-16)]
[byte[]]$tag = $encodedCookieData[($encodedCookieData.Length-16)..($encodedCookieData.Length-1)]
Write-Host "nonce: [$(($nonce|ForEach-Object ToString X2) -join '')]"
Write-Host "tag: [$(($tag|ForEach-Object ToString X2) -join '')]"
Write-Host "decryptedKey: [$(($decryptedKey|ForEach-Object ToString X2) -join '')]"
Write-Host "ciphertext: [$(($ciphertext|ForEach-Object ToString X2) -join '')]"

[byte[]]$plainText=new-object byte[] $ciphertext.Length
[System.Security.Cryptography.AesGcm] $oAESGcm = new-object System.Security.Cryptography.AesGcm (,$decryptedKey)
$oAESGcm.Decrypt($nonce, $ciphertext, $tag, $plainText, $null)
Write-Host "plainText: [$([System.Text.Encoding]::ASCII.GetString($plainText))]"
//////////////

Dans mon projet j'ai simplement adapté la fenêtre de l'exemple WD PowerShell retrouvé dans la LST 117 de Pcsoft.

Lorsque j'exécute cette procédure dans mon projet j'obtiens :
Résultat de l'exécution : OK
Mais dans le champ du Compte du compte rendu de l'exécution est vide.

( Lors de mes essais j'avais d'abord obtenu : Erreur dans le résultat et le contenu des clés nonce, tag, decryptedKey et ciphertext dans le Compte rendu.)

Ne trouvant pas d'autres détails dans mon projet j'ai donc utilisé PowerShell.
A ce propos j'apporte les précisions suivantes :
Je suis sous Windows 10 pro et j'ai d'abord installé la version PowerShell ISE.
Après plusieurs tentatives et recherches j'ai découvert qu'il fallait utiliser la version PowerShell 7.2 pour pouvoir traiter mon code.
J'ai donc téléchargé cette version.

A l'exécution Powershell fournit le résultat suivant :

//// contenu de l'éxécution PowerShell///////////////
PowerShell 7.2.4
Copyright (c) Microsoft Corporation.

https://aka.ms/powershell
Type 'help' to get help.

PS C:\Program Files\PowerShell\7> Add-Type -Assembly System.Security
PS C:\Program Files\PowerShell\7> # $ExtensionFile = "$($env:LOCALAPPDATA)\Google\Chrome SxS\User Data\Local State"
PS C:\Program Files\PowerShell\7> $ExtensionFile = "$($env:LOCALAPPDATA)\Temp\cache.cef\GPESPSANTE\LocalPrefs.json"
PS C:\Program Files\PowerShell\7>
PS C:\Program Files\PowerShell\7> # $protectedDataPath = "$($env:HOMEPATH)\Downloads\enc.cookie.bin"
PS C:\Program Files\PowerShell\7> $protectedDataPath = "C:\Users\grand\AppData\Local\Temp\cache.cef\GPESPSANTE\Cookies"
PS C:\Program Files\PowerShell\7>
PS C:\Program Files\PowerShell\7> $jsondata = Get-Content -Raw -Path $ExtensionFile | ConvertFrom-Json
PS C:\Program Files\PowerShell\7> $encKey = [System.Convert]::FromBase64String($jsondata.os_crypt.encrypted_key.ToString());
PS C:\Program Files\PowerShell\7> $encKey= $encKey[5..$encKey.Length];
PS C:\Program Files\PowerShell\7>
PS C:\Program Files\PowerShell\7> $decryptedKey = [Security.Cryptography.ProtectedData]::Unprotect($enckey,$null, [Security.Cryptography.DataProtectionScope]::CurrentUser)
PS C:\Program Files\PowerShell\7>
PS C:\Program Files\PowerShell\7> $encodedCookieData=[System.IO.File]::ReadAllBytes($protectedDataPath)
PS C:\Program Files\PowerShell\7>
PS C:\Program Files\PowerShell\7> [byte[]]$nonce = $encodedCookieData[3..14]
PS C:\Program Files\PowerShell\7> [byte[]]$ciphertext = $encodedCookieData[15..($encodedCookieData.Length-1-16)]
PS C:\Program Files\PowerShell\7> [byte[]]$tag = $encodedCookieData[($encodedCookieData.Length-16)..($encodedCookieData.Length-1)]
PS C:\Program Files\PowerShell\7> Write-Host "nonce: [$(($nonce|ForEach-Object ToString X2) -join '')]"
nonce: [69746520666F726D61742033]
PS C:\Program Files\PowerShell\7> Write-Host "tag: [$(($tag|ForEach-Object ToString X2) -join '')]"
tag: [626C65636C69636B2E6E65744944452F]
PS C:\Program Files\PowerShell\7> Write-Host "decryptedKey: [$(($decryptedKey|ForEach-Object ToString X2) -join '')]"
decryptedKey: [A68ED1125F7320DAFCD28FCA7F57B6012DF06A40CFFBDD40CBB6C97CF709CCD2]
PS C:\Program Files\PowerShell\7> Write-Host "ciphertext: [$(($ciphertext|ForEach-Object ToString X2) -join '')]"
ciphertext:
PS C:\Program Files\PowerShell\7>
PS C:\Program Files\PowerShell\7> [byte[]]$plainText=new-object byte[] $ciphertext.Length
PS C:\Program Files\PowerShell\7> [System.Security.Cryptography.AesGcm] $oAESGcm = new-object System.Security.Cryptography.AesGcm (,$decryptedKey)
PS C:\Program Files\PowerShell\7> $oAESGcm.Decrypt($nonce, $ciphertext, $tag, $plainText, $null)

MethodInvocationException: Exception calling "Decrypt" with "5" argument(s): "The computed authentication tag did not match the input authentication tag."
PS C:\Program Files\PowerShell\7> Write-Host "plainText: [$([System.Text.Encoding]::ASCII.GetString($plainText))]"
plainText: []
/// plainTest contient du binaire de cryptage qui ne s'affiche pas en caractères !!!
/////////////
Constation :
Le résultat est indentique à celui de mon projet c'est à dire que plainText est vide à l'affichage !!!

Donc mon problème pour lequel je n'ai pas de réponse est : que faut-il corriger pour obtenir le résultat du décryptage ?

Merci d'avance pour votre aide.

Bien cordialement
Membre enregistré
946 messages
Popularité : +102 (110 votes)
Posté le 09 juin 2022 - 15:49
Bonjour Je ne sais pas si vous recherchez toujours une solution mais en voici une qui certes est lourde mais qui fonctionne.
C'est un script trouvé sur Internet, écrit en python puis 'compilé' en exe qui met dans la colonne Cookies.value la colonne Cookies.encrypted_value décryptée.

Testé sur
Windows 10 pro
Chrome 102.0.5005.63 (Build officiel) (64 bits)
python 3.10.5
pyinstaller 5.1

import os
import json
import base64
import sqlite3
from shutil import copyfile

# python.exe -m pip install pypiwin32
import win32crypt
# python.exe -m pip install pycryptodomex
from Cryptodome.Cipher import AES

# Load encryption key
encrypted_key = None
with open(os.getenv("APPDATA") + "/../Local/Google/Chrome/User Data/Local State", 'r') as file:
encrypted_key = json.loads(file.read())['os_crypt']['encrypted_key']
encrypted_key = base64.b64decode(encrypted_key)
encrypted_key = encrypted_key[5:]
decrypted_key = win32crypt.CryptUnprotectData(encrypted_key, None, None, None, 0)[1]

# Connect to the Database
conn = sqlite3.connect(os.getenv("APPDATA") + "/../Local/Google/Chrome/User Data/Default/Network/Cookies")
cursor = conn.cursor()

# Get the results
cursor.execute('SELECT host_key, name, value, encrypted_value FROM cookies')
for host_key, name, value, encrypted_value in cursor.fetchall():
# Decrypt the encrypted_value
try:
# Try to decrypt as AES (2020 method)
cipher = AES.new(decrypted_key, AES.MODE_GCM, nonce=encrypted_value[3:3+12])
decrypted_value = cipher.decrypt_and_verify(encrypted_value[3+12:-16], encrypted_value[-16:])
except:
# If failed try with the old method
decrypted_value = win32crypt.CryptUnprotectData(encrypted_value, None, None, None, 0)[1].decode('utf-8') or value or 0

# Update the cookies with the decrypted value
# This also makes all session cookies persistent
cursor.execute('\
UPDATE cookies SET value = ?, has_expires = 1, expires_utc = 99999999999999999, is_persistent = 1, is_secure = 0\
WHERE host_key = ?\
AND name = ?',
(decrypted_value, host_key, name));

conn.commit()
conn.close()


--
«Nos clients sont nos meilleurs beta testeur.» H. Mintzberg
«Un programme informatique fait ce que vous lui avez dit de faire, pas ce que vous voulez qu'il fasse» Troisième loi de Greer
Membre enregistré
946 messages
Popularité : +102 (110 votes)
Posté le 14 juin 2022 - 18:37
Bonjour
Si cela vous intéresse toujours, j'ai un petit projet à votre disposition, qui donne :





--
«Nos clients sont nos meilleurs beta testeur.» H. Mintzberg
«Un programme informatique fait ce que vous lui avez dit de faire, pas ce que vous voulez qu'il fasse» Troisième loi de Greer
Membre enregistré
45 messages
Posté le 15 juin 2022 - 17:00
Bonsoir Philippe,
Je suis impardonnable d'avoir complètement loupé votre message du 9 juin et je vous remercie infiniment de me relancer pour utiliser Python.
Entre temps je me suis acharné à utiliser Powershell mais sans résultat.
Depuis j'ai été perturbé également par la modification des cookies créés par le site que j'utilise et dont les accès sont complètement remis en cause.
Néanmoins , étant curieux je continue à être intéressé par ce décryptage de cookie et j'ai commencé à mettre en place les conseils que vous avez
préconisés dans votre message du 5 mai.
J'ai mis en place la version de Python 3.10 en 64 bits et j'ai récupéré un exemple WD PYTHON de la LST 112 qui ne m'inspire pas beaucoup par rapport à la trace d'écran que vous avez joint.
J'ai commencé à tester votre code dans Python mais je suis bloqué à lecture du premier fichier.
Donc je suis bien intéressé par votre petit projet.
Merci d'avance
Membre enregistré
946 messages
Popularité : +102 (110 votes)
Posté le 15 juin 2022 - 17:19
Bonjour
pas de soucis mais à quelle adresse ?

--
«Nos clients sont nos meilleurs beta testeur.» H. Mintzberg
«Un programme informatique fait ce que vous lui avez dit de faire, pas ce que vous voulez qu'il fasse» Troisième loi de Greer
Membre enregistré
946 messages
Popularité : +102 (110 votes)
Posté le 15 juin 2022 - 17:26
je l'ai mis ici
https://depositfiles.com/files/bqmdmt0kp
--
«Nos clients sont nos meilleurs beta testeur.» H. Mintzberg
«Un programme informatique fait ce que vous lui avez dit de faire, pas ce que vous voulez qu'il fasse» Troisième loi de Greer
Message modifié, 15 juin 2022 - 17:27
Membre enregistré
45 messages
Posté le 16 juin 2022 - 11:42
Bonjour Philippe,
Merci pour m'avoir facilité la tache.
J'ai bien récupéré le projet et l'ai installé.
J'ai bien suivi tes conseils d'installations y compris d'avoir installé Google Chrome que je n'utilisais pas.
Malgré mes mises à jour du répertoire d'accès au dossier de données dans la description du projet et dans
la création de l'éxécutable j'aboutis au message d'erreur suivant concernant le chemin des données :
Mon chemin doit être :
< C:\Users\grand\AppData\Local\Google\Chrome\User Data\Default\Network\Cookies> :
Mon problème se situe dans le nom de l'utilisateur qui pour moi doit être grand au lieu de phili.
Une idée sur l'endroit du projet ou je peux le modifier ?

//////////////
Que s'est-il passé ?
Erreur de l'accès natif SQLite.
Numéro d'erreur = 22

L'erreur suivante a été renvoyée par la base de données <C:\Users\phili\AppData\Local\Google\Chrome\User Data\Default\Network\Cookies> :
Numéro d'erreur = <14>.
Message d'erreur :
unable to open database file

Code erreur : 73001
Niveau : erreur fatale
Code erreur WD55 : 3001

Dump de l'erreur du module 'wd240hf.dll' (24.0.170.0).
Identifiant des informations détaillées (.err) : 72801
Informations de débogage :
IEWDSQLITE=101.5
Module=<WDSQLITE>
Version=<24.0.14.0>
Provider : WinDevSQLite
Source de données : C:\Users\phili\AppData\Local\Google\Chrome\User Data\Default\Network\Cookies
Base de données : Cookies
Timeout de connexion : 30
Timeout de commande : 30
Unicode supporté : 1
Code page du WL : 1252
Code page de la connexion : UTF-8
Fonction (7,10)
Informations supplémentaires :
EIT_BASECODE : <14>
EIT_INFOCLIENT : <3.22.0>
EIT_NATIVECODE : <22>
EIT_LOGICALTABLENAME : <cookies>
EIT_PILEWL :
Clic sur BTN_DECODE (mainForm.BTN_DECODE), ligne 6
EIT_DATEHEURE : 16/06/2022 11:20:44
EIT_TYPE_WDFILE : <2>
EIT_IDCODE : <18>
Membre enregistré
946 messages
Popularité : +102 (110 votes)
Posté le 16 juin 2022 - 15:36
le pb vient de : Source de données : C:\Users\phili\AppData\Local\Google\Chrome\User Data\Default\Network\Cookies car phili est mon nom de user windows. il faut modifier la connexion dans l'analyse.

Dans un explorateur de fichier qu'as tu comme adresse quant tu donne %appdata% ?


j'ai rajouter les cookies pour EDGE et je regarde pour firefox

--
«Nos clients sont nos meilleurs beta testeur.» H. Mintzberg
«Un programme informatique fait ce que vous lui avez dit de faire, pas ce que vous voulez qu'il fasse» Troisième loi de Greer
Membre enregistré
45 messages
Posté le 16 juin 2022 - 16:50
Philippe Pasquali a écrit :
> le pb vient de : Source de données : C:\Users\phili\AppData\Local\Google\Chrome\User Data\Default\Network\Cookies car phili est mon nom de user windows. il faut modifier la connexion dans l'analyse.

J'ai omis de le préciser mais j'ai aussi modifié l'analyse avec le projet et la phase executable

Dans un explorateur de fichier qu'as tu comme adresse quant tu donne %appdata% ?

Dans mon explorateur Windows en tapant %appdata% j'ai obtenu "C:\Users\grand\AppData\Roaming"

J'ai essayé SysRep(srAppData) j'ai obtenu la même chose qu %appdata%

Par contre avec SysRep(srAppDataLocal) j'ai bien obtenu mon bon dossier à avoir :
SysRep(srAppDataLocal)+"\Google\Chrome\User Data\Default\Network\Cookies"

Ce que je dois obtenir
C:\Users\grand\AppData\Local\Google\Chrome\User Data\Default\Network\Cookies


j'ai rajouter les cookies pour EDGE et je regarde pour firefox


--
«Nos clients sont nos meilleurs beta testeur.» H. Mintzberg
«Un programme informatique fait ce que vous lui avez dit de faire, pas ce que vous voulez qu'il fasse» Troisième loi de Greer
Membre enregistré
45 messages
Posté le 16 juin 2022 - 17:08
Solution qui fonctionne :

dans BTN_DECODE

Sablier(True)
TableSupprimeTout(tbl_cookies)
// on remplace le nom du fichier
HChangeRep(cookies, "C:\Users\grand\AppData\Local\Google\Chrome\User Data\Default\Network\Cookies")
HLitPremier(cookies)
....

et j'obtiens la liste mais la colonne value est vide ??
Membre enregistré
946 messages
Popularité : +102 (110 votes)
Posté le 16 juin 2022 - 19:45












--
«Nos clients sont nos meilleurs beta testeur.» H. Mintzberg
«Un programme informatique fait ce que vous lui avez dit de faire, pas ce que vous voulez qu'il fasse» Troisième loi de Greer
Membre enregistré
45 messages
Posté le 17 juin 2022 - 09:56
Bonjour Philippe
Après cette mise à jour j'ai aussi enlevé le chemin des données dans la config et la création de phase exécutable
et tout marche bien :


Membre enregistré
45 messages
Posté le 17 juin 2022 - 17:08
Philippe, merci infiniment pour toutes tes informations. et ton immense patience.
Juste une dernière observation, sur la colonne Value qui est le résultat des décryptages.
Je pensais voir des résultats en texte clair alors qu'il me semble que ce décryptage est encore crypté,
faudrait-t-il continuer à le traiter ?
Bon week-end.