[R] CryptUnprotectData, et paramètre DllCall

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

[R] CryptUnprotectData, et paramètre DllCall

#1

Message par matwachich »

Salut les amis! Ca fait un bail hein! :)

J'essaye d'implémenter la fonction CryptUnprotectData, mais je coince dans la récupération d'une chaine UNICODE qui contient la description des données sécurisées (paramètre optionnel).
La fonction fonctionne très bien autre part (Chiffrage, déchiffrage).

En gros, le paramètre est un pointeur vers LPCWSTR, donc un pointeur vers un pointeur qui sera alloué dynamiquement par la fonction, et contiendra la (w)chaine descriptive, que je veut récupérer.
L'exemple de MSDN l'utilise comme suit:

Code : Tout sélectionner

LPWSTR pDescrOut =  NULL;
CryptUnprotectData(&DataOut, &pDescrOut, ...;
printf("The description of the data was: %s\n",pDescrOut);
En AutoIt, j'essaye de faire un truc du genre:

Code : Tout sélectionner

Local $description_DATA = DllStructCreate("ptr")
Local $ret = DllCall("Crypt32.dll", "bool", "CryptUnprotectData", _
        "ptr", DllStructGetPtr($in_DATA_BLOB), _
        "ptr", DllStructGetPtr($description_DATA), _ ...
; Puis pour récupérer les données:
Local $out_descr = DllStructCreate("wstr[" & 128 * 1024 & "]", DllStructGetData($description_DATA, 1))
$out_descr = DllStructGetData($out_descr, 1)
; Libération des données allouées par la fonction
DllCall("Kernel32.dll", "handle", "LocalFree", "handle", DllStructGetData($description_DATA, 1))
Et ça ne marche pas super!

Voici le code au complet: (Comme il est, ça marche très. Pour voir ce qui coince, il faut dé-commenter un peu tout)
► Afficher le texte
Modifié en dernier par matwachich le lun. 05 août 2013 18:20, modifié 1 fois.
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] CryptUnprotectData, et paramètre DllCall

#2

Message par mikell »

Hello
Tu te fais rare, vacances ou boulot ? :)

Dixit msdn, le 2ème paramètre à l'encodage c'est une (w)string "A string with a readable description of the data to be encrypted. " et au décodage un pointeur vers la string "A pointer to a string-readable description of the encrypted data included with the encrypted data."
► Afficher le texte
"wstr[" & 128 * 1024 & "]" :shock: et limite d'allocation explosée :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] CryptUnprotectData, et paramètre DllCall

#3

Message par jchd »

Un peu de vérification d'erreur aurait relevé la mine :

Code : Tout sélectionner

Local $out_descr = DllStructCreate("[b]wstr[/b][" & 128 * 1024 & "]", DllStructGetData($description_DATA, 1))
wchar dans une DllStruct, swstr dans un DllCall.

Comme le chat le dit.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

Re: [..] CryptUnprotectData, et paramètre DllCall

#4

Message par matwachich »

Cool! Merci les amis.
Donc au fait, c'était le passage de la description qui posait problème, alors que j'étais sur que c'était la récupération.

PS: Plutôt boulot, avec l'internat qui commence sous peu :wink:
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
Répondre