Question Resolution du \"DigitalProductId\" via PowerShell

Plus d'informations
il y a 17 ans 1 mois #3969 par Olivier
Bonjour Janel !

Merci bien pour ta réponse (et surtout dans ton état ...) Apparement, le site www.powershell-scripting.com a aussi été victime d'une e-gastro :blink:

Merci au passage pour les informations de Mr. Arnaud concernant l'intoxication du site et sa rapide guérison que je souhaite également à Janel ;-)

Vais tenter de mettre en pratique tes conseils et donnerai prochainement des nouvelles concernant l'avancement du chmilblic ;-))

Mes voeux de rétablissements !

Olivier<br><br>Message édité par: Olivier, à: 8/02/09 18:18

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 1 mois #3971 par Olivier
Réponse de Olivier sur le sujet Re:Resolution du
re ...

Il me semble que le script suivant me donne les bonnes valeurs mais pas \&quot;jointes\&quot;

[code:1]$tab = (get-itemproperty -path registry::\&quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\&quot;«»).DigitalProductId[0x42..0x34]
for($i =0 ; $i -le $tab.length)
{
\&quot;{0: X}\&quot; -f $tab[$i]
$i++
}[/code:1]

PS: un espace a été rajouté à \&quot;{0: X}\&quot; pour éviter d'afficher :X
Le résultat est bien écrit au format hexa ... et de plus, j'ai bien respecter l'inversion du résultat avec [0x42..0x34].

Maintenant, si j'ai bien compris, il faut joindre le tout pour former un nombre hexadécimal. Ensuite, convertire ce dernier en décimal et lui faire les opération de division par 24 pour trouver la correspondance des caractères en base 24 ...

Est-ce que je suis dans le juste ?

Autrement, j'ai beau chercher mais je sèche ...

ça fait pas longtemps que je me suis mis au PowerShell alors mes excuses si j'ai du mal à comprendre ...

Merci d'avance à ceux qui prendront le temps de m'expliquer.

Olivier<br><br>Message édité par: Olivier, à: 9/02/09 09:28

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 1 mois #3973 par Arnaud Petitjean
Réponse de Arnaud Petitjean sur le sujet Re:Resolution du
Salut Olivier,

J'ai un peu modifié ton script afin d'obtenir une RawKey sur une seule ligne. J'ai aussi ajouté un test pour que chaque valeur hexa soit composée de 2 chiffres. J'ai aussi légèrement retouché ta boucle for en mettant l'incrémentation de $i à l'intérieur.

[code:1]
$ofs=\&quot;\&quot;
$tab2=0..15
$tab = (get-itemproperty -path registry::\&quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\&quot;«»).DigitalProductId[0x42..0x34]

for($i =0 ; $i -le $tab.length; $i++)
{
$valeurHexa = \&quot;{0: X}\&quot; -f $tab[$i]
if ($valeurHexa.length -eq 1)
{
$valeurHexa = \&quot;0\&quot; + $valeurHexa
}

$tab2[$i]= $valeurHexa
}

[string]$tab2
[/code:1]

L'astuce réside dans la conversion d'un tableau en chaine de caractères. On va jouer avec la valeur de la variable $OFS. Par défaut elle contient un retour chariot, c'est la raison pour laquelle lorsqu'on affiche le résultat d'un tableau converti en string, les valeurs sont affichées les unes en dessous des autres.

Reste maintenant à convertir ces valeurs en clés. A toi de jouer ;)

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 1 mois #3974 par Olivier
Réponse de Olivier sur le sujet Re:Resolution du
Merci beaucoup Arnaud pour ces explications et corrections !

Ce que j'ai compris :

- Le test pour contrôler que chaques valeur hexa soit sur deux caractères
- l'insertion de l'incrémentation de $i (page 99 du bouquin ;-))
- Conversion des variables \&quot;Décimales\&quot; en \&quot;Hexadécimal\&quot; (Page 64 ...)

Ce que j'ai appris :

- Ben cette \&quot;variable prédéfinie\&quot; qui a par défaut un CR (page 67 ...). J'aurais presque pu m'en douter :huh:

Ce que je comprend pas :

- Pourquoi on initie un tableau avec la variable $tab2 qui va de 0 à 15 ? cela donne 16 valeurs alors qu'on devrait en avoir que 15 (15 octets)

- Convertir ces valeurs en clés ... on parle bien de la valeur de chaques octets qu'il faut convertir en décimal ?

Désolé mais là me faudrait un peu d'aide ... j'ai fais plein de test avec ce qu'on a déjà mais sans pour autant arriver à un résultat correct. Pour test, je prend toujours le script de Mr. Bellamy qui lui, me retourne le bon résultat et je test juste le permier caractère ...

Merci déjà pour toutes les explications et le temps passé à mon problème !

Olivier

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 1 mois #3975 par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:Resolution du
Arnaud, tu peux faire plus simple pour afficher des hexa sur deux caractères:

[code:1]
$hexa = \&quot;\&quot;
$tab | foreach {
$hexa += $_.ToString(\&quot;X2\&quot;«»)
}
\&quot;Valeur hexa : $hexa\&quot;
[/code:1]
Janel

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 1 mois #3977 par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:Resolution du
Bon allez, voici une solution adaptée de l'algo de JC Bellamy:

[code:1]
# créer la table de conversion base 24

$map=\&quot;BCDFGHJKMPQRTVWXY2346789\&quot;

# lire la clé de registre

$value = (get-itemproperty \&quot;HKLM:\\SOFTWARE\Microsoft\Windows NT\CurrentVersion\&quot;«»).digitalproductid[0x34..0x42]

# convertir les valeurs en Hexa pour afficher le Raw Key

$hexa = \&quot;\&quot;
$value | foreach {
$hexa = $_.ToString(\&quot;X2\&quot;«») + $hexa
}
\&quot;Raw Key Big Endian: $hexa\&quot;

# calculer le Product Key

$ProductKey = \&quot;\&quot;
for ($i = 24; $i -ge 0; $i--) {
$r = 0
for ($j = 14; $j -ge 0; $j--) {
$r = ($r * 256) -bxor $value[$j]
$value[$j] = [math]::Floor([double]($r/24))
$r = $r % 24
}
$ProductKey = $map[$r] + $ProductKey
if (($i % 5) -eq 0 -and $i -ne 0) {
$ProductKey = \&quot;-\&quot; + $ProductKey
}
}
\&quot;Product Key: $ProductKey\&quot;
[/code:1]
Janel

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.096 secondes
Propulsé par Kunena