Question Resolution du \"DigitalProductId\" via PowerShell

Plus d'informations
il y a 17 ans 1 mois #3962 par Olivier
Bonjour à tous !

Suite à mon post \" Audit Server & Workstation \" j'aimerais y inclure la clé d'installation de Windows.

Pour cela, j'ai déjà trouvé comment localiser la valeur dans la base de registre avec la commande suivante :
[code:1](get-itemproperty -path registry::\"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\"«»).DigitalProductId[52..66][/code:1]

Les valeur \"52\" et \"66\" en base décimal sont les équivalent de \"34\" et \"42\".en base hexadécimal

De cette façon nous avons maintenant un tableau à une dimension sur lequel on cible les valeurs désirées ...

Reste plus qu'à appliquer l'algorithme cité par Maître Bellamy qu'on va trouver ICI mais pour cela, j'aurais besoin qu'on m'aide un tit peu ...
Pourriez-vous me mettre un peu sur la piste concernant les fonctions à utiliser et sans pour autant me fournir une solution toute faite (on apprend rien come ça ..)

Merci beaucoup d'avance pour vos suggestions !

Olivier

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

Plus d'informations
il y a 17 ans 1 mois #3963 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Resolution du
Olivier écrit:

Pourriez-vous me mettre un peu sur la piste concernant les fonctions à utiliser

Récupérer les données dans un tableau, puis inverser son contenu. Enfin, si j'ai bien compris ceci :

C'est ce que l'on observe dans toutes entrées DigitalProductID,
la Raw Key étant stockée sur 15 octets, entre les offsets 0x34 à 0x42.
Ne pas oublier que dans les architectures \"Intel\" (et compatible), les grandeurs binaires sont représentées en \"Little Endian\", c'est à dire que les octets de poids faibles sont en tête.

Dans l'exemple ci-contre, la Raw Key est le nombre (en hexadécimal) 03D3FC979F6BA773C899DEA7EF6380

Sous PS tu peux utiliser 0x34 qui indique un nombre hexa.

Tutoriels PowerShell

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

Plus d'informations
il y a 17 ans 1 mois #3964 par Olivier
Réponse de Olivier sur le sujet Re:Resolution du
Merci pour l'info :-)

Voici le résultat inversé en prennant les valeur hexa ...

[code:1]$tab =(get-itemproperty -path registry::\"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\"«»).DigitalProductId[0x42..0x34]
$tab
[/code:1]

Donc, à partir de là, faut créer la moulinette pour faire la conversion et trouver le modulo (reste de division par 24 ...) et j'ai trouvé ça :
[code:1]$tab =(get-itemproperty -path registry::\"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\"«»).DigitalProductId[0x42..0x34]
for($i =0 ; $i -le 14 )
{
$tab[$i]%24
$i++
}[/code:1]

Et pi là je patauge un peu ...<br><br>Message édité par: Olivier, à: 7/02/09 21:42

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

Plus d'informations
il y a 17 ans 1 mois #3965 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Resolution du
Olivier écrit:

Merci pour l'info :-)

J'étais parti sur autre chose :
[code:1]
[byte[]]$Rawkey=(get-itemproperty -path registry::\&quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\&quot;«»).DigitalProductId[0x32..0x42]
$RawKey
[system.array]::Reverse($RawKey)
$RawKey
[/code:1]
Comme quoi l'approche procédurale/Poo n'est pas tjrs la plus pertinente sous PS :whistle:.
Pour la suite ça part en sucette car tu ne suis pas l'algo donné :

Avec de possibles variantes, l'algorithme est toujours le même :

On effectue une division euclidienne du nombre par 24.
Le reste obtenu est le chiffre en base 24 des unités.
Puis on recommence la division euclidienne sur le quotient,
et ainsi de suite, jusqu'à ce que le quotient soit nul.
Chaque reste est un chiffre de poids de plus en plus fort.

Je verrais bien une fonction récursive sur ce coup là, mais je ne suis pas allé plus loin que la lecture de l'algo :P<br><br>Message édité par: Laurent Dardenne, à: 6/02/09 18:59

Tutoriels PowerShell

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

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

Voilà, ça avance très doucement mais ça avance ...

Jusqu'à maintenant, on avait le résultat de la valeur recherchée en colonne et là, j'ai trouvé comme la faire afficher en ligne en excluant les espaces^
[code:1]$tab = -join (get-itemproperty -path registry::\&quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\&quot;«»).DigitalProductId[0x42..0x34][/code:1]

Ce qui me donne maintenant la valeur recherché pour faire les calcul pour retrouver la clé ...

$tab (valeur trop secret :ohmy: , c'est ma clé de mon MAPS ...)

Par contre, pour retrouver le premier caractère, si j'ai bien compris, il faut trouver le modulo 24 de la valeur $tab avec :
[code:1]$tab%24[/code:1]
Après, il faudrait faire ($tab/24)%24 et après (($tab/24)/24)%24 et ainsi de suite ... en utilisant une fonction de division qui ne garde que le quotient [entier] ...

Une foi trouvé les restes des division, les faire correpondre avec un tableau comme ça :

[code:1]$comp = 'B','C','D','F','G','H','J','K','M','P','Q','R','T','V','W','X','Y','2','3','4','6','7','8','9'
$mod = 2 # Valeur à définir avec un modulo 24 de la valeur de $tab
$comp[$mod-1][/code:1]

Si quelqu'un peutx me donner un coup de main car en faisant le test comme sur le site à Mr. Bellamy ça fonctionne mais avec la valeur $tab, fonctionne pas ... nombre peut-être trop grand ...

Si vous avez quelques minutes pour m'aider à avancer ;-)

Merci déjà à tous ceux qui m'ont lu et donné réponse !!!

Olivier<br><br>Message édité par: Olivier, à: 7/02/09 15:58

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

Plus d'informations
il y a 17 ans 1 mois #3968 par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:Resolution du
Je n'ai pas la force de creuser davantage (j'ai une gastro terrible depuis la nuit dernière, croyez-moi ça met vraiment à plat et ça fait mal), mais il me semble que ton -join ne donne pas le bon chiffre.

En effet, la commandelette get-itemproperty ... renvoie une liste de nombres décimaux. Par exemple:

5
103
27
48
...

Les accoler comme tu le fais ne donne absolument pas le nombre exact:

[code:1]
PS&gt; -join (5,103,27,48)
51032748
[/code:1]
Tu vois bien que le résultat n'est pas bon. Cette opération -join ne marcherait que si get-itemproperty te renvoyait des nombres au format hexadécimal formatté sur deux chiffres, ce qui n'est pas le cas.

Tu pourrais forcer la conversion en hexa assez facilement, mais après il te faudra assurer une conversion de base 16 vers base 24. Faisable, mais pas forcément évident.

Tu pourrais aussi faire un vrai \&quot;join\&quot; prenant en compte le poids de chaque nombre renvoyé par get-itemproperty. Quelque chose dans le genre de:

[code:1]
$rank = $sum = 0
$tab | foreach {
$sum += $_ * [System.Math]::«»Pow(256,$rank)
$rank++
}
[/code:1]
Au final, $sum doit contenir la bonne valeur, à laquelle appliquer la série de divisions par 24 pour arriver au Product ID.

Ah oui, attention: ma lecture de $tab suppose que j'ai les chiffres de poids faible en premier, or je crois que c'est l'inverse dans ton début de script. A vérifier en tout cas (si c'est le cas, il est facile d'énumérer $tab dans le sens inverse).

Bon courage. Je retourne me coucher...

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