Konvertieren Sie ASCII-Dongles in Hex

Guten Tag allerseits.

In der Vergangenheit wurden die elektronischen Schlüssel der Organisationen unserer kleinen Holding für das elektronische Dokumentenverwaltungsprogramm SBIS in die Windows-Registrierung jeder Workstation und jedes Benutzers importiert.
Beim Erstellen eines neuen Arbeitsplatzes wurde ein Busch mit Schlüsseln aus dem Crypto-Pro-Zweig entladen und in einen neuen Benutzer importiert.
Auf einem Terminalserver stellte ich fest, dass dies nicht akzeptabel war, und entschied mich, alle Schlüssel auf ein USB-Flash-Laufwerk hochzuladen und externe Laufwerke in Crypto-Pro zuzulassen.

Beim Erstellen neuer Benutzer auf dem Terminalserver sind keine Gesten mit elektronischen Schlüsseln mehr erforderlich.

Das Problem war, dass Sie ASCII-Schlüssel aus der Registrierung in 16 Binärdateien konvertieren müssen.
Vielleicht weiß ich nicht, wie man "googelt", aber ich habe keine vorgefertigten Lösungen zu diesem Thema gefunden, also habe ich mein eigenes Skript für Bash erstellt.
Vielleicht wird jemand nützlich sein.

Eine kleine Beschreibung.
Die Schlüssel befinden sich im Registrierungszweig - [HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Crypto Pro \ Einstellungen \ Benutzer \ SID-Benutzer \ Schlüssel \ Schlüsselname]

Schlüsselstruktur im entladenen Registrierungszweig:
"name.key" = hex: 10, d5 ...
" header.key "= hex: 20,42,19, ...
" primary.key "= hex:
30,12" masks.key "= hex: 30,23
" primary2.key "= hex: 30,12 ...
" masks2 .key ”= hex: 30,56,10 ...

Als Parameter muss das Skript eine Datei mit den aus der Registrierung heruntergeladenen Schlüsseln angeben (z. B. keys.reg).
Als Ergebnis des Skripts wird der Schlüsselordner in dem Stammverzeichnis erstellt, aus dem das Skript gestartet wurde, und darin der Ordner mit dem Namen der Schlüssel. Ordner mit dem Namen der Schlüssel enthalten jeweils 6 Dateien - name.key, header.key, primary.key, primary2.key, masks.key, masks2.key.

#!/bin/bash

path=./
temp=$path/temp

file[1]="name.key"
file[2]="masks.key"
file[3]="masks2.key"
file[4]="primary.key"
file[5]="primary2.key"
file[6]="header.key"

if [ ! -d "$temp" ]; then 
    mkdir "$temp"
fi

if [ ! -d "$path/keys" ]; then 
    mkdir "$path/keys"
fi

# CR to LF.     UNIX (  LF,  CR)
dos2unix -n -q $1 $temp/$1

#       
cat $temp/$1 | grep -E -o 'Keys\\\w+]' | sed -E 's/Keys\\//; s/]//' > $temp/keysname

while read key
   do
     #          
     cat $temp/$1 | sed -e '/./{H;$!d;}' -e "x;/$key]/!d" | sed -n "/$key]/!p" > $temp/$key
	
	#   (name, primary, masks, header...)           
	if ! [ -d "$path/keys/$key" ]; then
              mkdir "$path/keys/$key"
	fi

	for i in {1..6}; 
   	 do 
   	 hex=$(cat $temp/$key | tr -d '\n' | sed -E 's/\\//g; s/ //g; s/\$//g' | grep -E -o "${file[$i]}\"=hex:(\w{2},?)+?" | sed -E "s/${file[$i]}\"=hex://; s/,//g" | sed -E 's/\w{2}/\\x&/g')
   	 echo -e -n "$hex" > "$path/keys/$key/${file[$i]}"

	 # LF to CR ??? 
	 # sed 's/$'"/`echo \\\r`/" "$path/keys/${file[$i]}" > "$path/keys/${file[$i]}"
	done
done < $temp/keysname

#   
if [ -d "$temp" ]; then 
   rm -rf "$temp"
fi

exit 0

Source: https://habr.com/ru/post/de382285/


All Articles