diff --git a/214560.txt b/214560.txt index 982d4b7..82071b2 100644 --- a/214560.txt +++ b/214560.txt @@ -1,4 +1,4 @@ -RWGPN-2XMDJ-R7PXG-9YMTF-4X8XD +RWGPN-2XMDJ-R7PXG-9YMTF-4X8XD -> Julia Microsoft Surface Pro X Windows 10 Pro x86 \ No newline at end of file diff --git a/228794.txt b/228794.txt new file mode 100644 index 0000000..03a1ed0 --- /dev/null +++ b/228794.txt @@ -0,0 +1,6 @@ +2BVCY-NGTDF-4BFDQ-CWMTM-F9CR8 + +Win11 Home + +Lenovo Esprimo G6012 +MIK Telefonvermittlung \ No newline at end of file diff --git a/228797.txt b/228797.txt new file mode 100644 index 0000000..0c86607 --- /dev/null +++ b/228797.txt @@ -0,0 +1,6 @@ +DNYQG-VFJ3D-KTJGW-4GGPR-BY6F8 + +Win11 Home + +Lenovo Esprimo G6012 +MIK Telefonvermittlung \ No newline at end of file diff --git a/228802.txt b/228802.txt new file mode 100644 index 0000000..9346fd5 --- /dev/null +++ b/228802.txt @@ -0,0 +1,6 @@ +TJ37T-3NFHV-DMGD6-RY86K-DYH8W + +Win11 Home + +Lenovo Esprimo G6012 +MIK Claudia Reichold \ No newline at end of file diff --git a/228804.txt b/228804.txt new file mode 100644 index 0000000..7c8f1c7 --- /dev/null +++ b/228804.txt @@ -0,0 +1,6 @@ +FN3W9-HBRKR-QT96B-Q4J6P-W2QPJ + +Win11 Home + +Lenovo Esprimo G6012 +MIK Telefonvermittlung \ No newline at end of file diff --git a/235405.txt b/235405.txt new file mode 100644 index 0000000..ad48f59 --- /dev/null +++ b/235405.txt @@ -0,0 +1,6 @@ +7J8YN-T23V8-6WMTC-9GRD6-HFR9D + +Win10 Pro + +Surface GO3 +MIK Azubi \ No newline at end of file diff --git a/235406.txt b/235406.txt new file mode 100644 index 0000000..c3d7236 --- /dev/null +++ b/235406.txt @@ -0,0 +1,6 @@ +Q63N8-8JVMT-4KKGX-PBH6J-Q69TQ + +Win10 Pro + +Surface GO3 +MIK Azubi \ No newline at end of file diff --git a/235407.txt b/235407.txt new file mode 100644 index 0000000..d31ca7d --- /dev/null +++ b/235407.txt @@ -0,0 +1,6 @@ +NJ8PG-DPYBV-DPWBM-QPRVK-MG9TQ + +Win10 Pro + +Surface GO3 +MIK Azubi \ No newline at end of file diff --git a/235408.txt b/235408.txt new file mode 100644 index 0000000..620e15f --- /dev/null +++ b/235408.txt @@ -0,0 +1,6 @@ +F9HXD-T7NTT-3TJDQ-6YHYQ-JTYP3 + +Win10 Pro + +Surface GO3 +MIK Azubi \ No newline at end of file diff --git a/235409.txt b/235409.txt new file mode 100644 index 0000000..0ad5295 --- /dev/null +++ b/235409.txt @@ -0,0 +1,6 @@ +YJPN6-28TDG-GF4Q8-9JQ96-KTPKD + +Win10 Pro + +Surface GO3 +MIK Azubi \ No newline at end of file diff --git a/235410.txt b/235410.txt new file mode 100644 index 0000000..bc03061 --- /dev/null +++ b/235410.txt @@ -0,0 +1,6 @@ +PNH8R-G4JXC-2XHM2-8BCTW-7FR9D + +Win10 Pro + +Surface GO3 +MIK Azubi \ No newline at end of file diff --git a/ctKeyfinder/ctKeyfinder.bat b/ctKeyfinder/ctKeyfinder.bat new file mode 100644 index 0000000..f1235c4 --- /dev/null +++ b/ctKeyfinder/ctKeyfinder.bat @@ -0,0 +1,312 @@ +cls +@echo off +setlocal enabledelayedexpansion + +echo. +echo ************************************** +echo *** Willkommen beim c't-Keyfinder *** +echo *** *** +echo *** Anleitungen, Downloads, Forum: *** +echo *** https://ct.de/keyfinder *** +echo ************************************** +echo. + +rem --------- Variablen setzen, es gibt nichts anzupassen ----------- + +Set workdir=%~d0%~p0Sources\ +Set Datei=%~d0%~p0ctKey.txt +Set tmpdir=%workdir%Keyfindertmp +Set Generic=%tmpdir%\generic.txt +Set vbs=%workdir%\DecodeKey.vbs +Set checkpid=%workdir%\Check-Pid.ps1 +Set Admin=1 +Set PE=0 +Set SRP=0 + +rem ----------- Aufraeumen, falls Skript beim letzten Mal nicht bis zum Ende durchlief ----------- + +if exist %tmpdir% ( + For %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist "%tmpdir%\%%a:\Software" ( + reg unload HKLM\_Laufwerk_%%aSoftware >nul 2>nul + reg unload HKLM\_Laufwerk_%%aSystem >nul 2>nul + ) + if exist %generic% del %generic% +) + +rem ----------- 32/64-Bit-Zuordnungen ----------- + +Set Strings=%workdir%Strings64.exe +Set BIOS=%tmpdir%\ctBiosKey64.exe +if "%ProgramW6432%" EQU "" set Strings=%workdir%Strings.exe && Set BIOS=%tmpdir%\ctBiosKey32.exe +if not exist %Strings% echo Fehler: %Strings% fehlt. && echo. && pause && goto :eof + +rem ----------- Laeuft das Skript unter PE? ----------- + +if exist %windir%\system32\wpeinit.exe set PE=1 + +rem ----------- Admin-Rechte vorhanden? ----------- + +if "%PE%" NEQ "1" %windir%\system32\whoami.exe /groups | %windir%\system32\find.exe "S-1-16-12288" > nul + if errorlevel 1 set Admin=0 + +rem --------- Software Restriction Policies aktiv? ----------- + + +If "%PE%" EQU "0" For /f %%a in ('powershell $ExecutionContext.SessionState.LanguageMode') do if "%%a" EQU "ConstrainedLanguage" set SRP=1 + +rem ------ F�uer Auswertung der PID-Datenbank sind Adminrechte erforderlich -------- + +if "%PE%" EQU "0" if "%SRP%" EQU "1" ( + echo ############################################### + echo ### Achtung^^! ### + echo ### Die PowerShell laeuft im Modus ### + echo ### "ConstrainedLanguage". Das ist normal, ### + echo ### wenn Software Restriction Policies as ### + echo ### aktiv sind. Auswertung der Infos ### + echo ### aus der PID-Datenbank sind in diesem ### + echo ### Modus allerdings nicht moeglich. ### + echo ### ### + echo ### Taste druecken, um Skript trotzdem ### + echo ### fortzusetzen. Oder Fenster ### + echo ### schliessen und Skript via Kontextmenue ### + echo ### "als Administrator" erneut starten. ### + echo ############################################### + echo. + pause +) + +rem ------ F�uer Auswertung von Parallelinstallationen sind ebenfalls Adminrechte erforderlich -------- + +if "%PE%" EQU "0" if "%Admin%" EQU "0" ( + For %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist "%%a:\windows" ( + if "%%a:" NEQ "%systemdrive%" ( + echo. + echo ############################################### + echo ### Achtung^^! ### + echo ### Parallelinstallation auf %%a: gefunden. ### + echo ### Schluesselsuche darin erfordert Admin- ### + echo ### rechte, Skript laeuft aber gerade ohne. ### + echo ### ### + echo ### Taste druecken, um Skript ohne Admin- ### + echo ### rechte fortzusetzen. Oder Fenster ### + echo ### schliessen und Skript via Kontextmenue ### + echo ### "als Administrator" erneut starten. ### + echo ############################################### + echo. + pause + ) + ) +) + + +rem ------ Unter PE ist keine Auswertung der PID-Datenbank moeglich -------- + +if "%PE%" EQU "1" ( + echo ############################################### + echo ### Hinweis: Skript laeuft unter Windows PE.### + echo ### ### + echo ### Auswertung der Informationen aus der ### + echo ### PID-Datenbank daher nicht moeglich. ### + echo ### Taste druecken zum Fortsetzen. ### + echo ############################################### + echo. + pause +) + +rem ------ Unter Windows 7 kein Auslesen des BIOS-Schluessels -------- + +if "%PE%" EQU "0" ( + for /f "tokens=3 delims=.]" %%z in ('ver') do ( + set build=%%z + if !Build! LSS 9200 ( + echo . + echo ############################################### + echo ### Hinweis: Skript laeuft unter Windows 7 ### + echo ### oder aelter. Es findet hier zwar die ### + echo ### Schluessel in der Registry, aber die ### + echo ### Suche im BIOS ist hier nicht moeglich. ### + echo ### ### + echo ### Um auch im BIOS zu suchen, starten Sie ### + echo ### den c't-KeyFinder unter ### + echo ### Windows 8, 8.1, 10, 11 oder unter dem ### + echo ### c't-Notfall-Windows oder unter ### + echo ### Windows PE. ### + echo ### ### + echo ### Taste druecken zum Fortsetzen. ### + echo ############################################### + pause + ) + ) +) + +rem ------ Unter PE ctBiosKey.exe entpacken -------- + +if "%PE%" EQU "1" ( + if not exist %workdir%ctbioskey.7z echo Fehler: %workdir%ctbioskey.7z fehlt. && echo. && pause + set decrypt=%workdir%7z-64\7z.exe + if "%ProgramW6432%" EQU "" set decrypt=%workdir%7z-32\7z.exe + !decrypt! e -pctkeyfinder -o%tmpdir% %workdir%ctbioskey.7z >nul 2>nul +) + +rem ----------- los gehts ----------- + +md %tmpdir% >nul 2>nul + +echo ### %COMPUTERNAME% ### %date% ### %time% >> %datei% ### + +echo. +echo Suche in Systemdateien nach nicht-aktivierbaren Schluesseln... +echo. + +For %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist "%%a:\windows" ( + echo Durchforste Laufwerk %%a: ... + For %%d in ("%%a:\windows\System32\LicensingWinRT.dll" "%%a:\windows\System32\clipwinrt.dll" "%%a:\windows\System32\ClipUp.exe" "%%a:\windows\System32\pkeyhelper.dll" "%%a:\windows\System32\reseteng.dll" "%%a:\windows\System32\Dism\TransmogProvider.dll" "%%a:\windows\System32\oobe\winsetup.dll" "%%a:\windows\System32\Secinit.exe") do ( + if exist %%d echo Auswertung: %%d + For /F %%g in ('%strings% -n 29 %%d -accepteula -nobanner 2^>nul') do ( + set Genkey=%%g + if "!GenKey:~5,1!" EQU "-" if "!GenKey:~11,1!" EQU "-" if "!GenKey:~17,1!" EQU "-" if "!GenKey:~23,1!" EQU "-" echo %%g >> %generic% + ) + if "%%a:" NEQ "%systemdrive%" ( + copy %%a:\windows\system32\Config\software %tmpdir%\%%aSoftware >nul 2>nul + reg load HKLM\_Laufwerk_%%a_Software %tmpdir%\%%aSoftware >nul 2>nul + copy %%a:\windows\system32\Config\system %tmpdir%\%%aSystem >nul 2>nul + reg load HKLM\_Laufwerk_%%a_System %tmpdir%\%%aSystem >nul 2>nul + ) + ) + echo. +) + +if "%PE%" EQU "0" if !Build! LSS 9200 ( + echo. >> %datei% + echo Suchlauf unter Windows 7 oder aelter. >> %datei% + echo Damit ist das Auslesen des BIOS-Schluessels nicht moeglich. >> %datei% + echo. >> %datei% + goto reg +) + +echo. +echo Suche Schluessel in ACPI-Tabelle MSDM der Mainboard-Firmware ... +echo. + +if "%PE%" EQU "1" for /f "tokens=* delims=" %%k in ('%BIOS%') do set prodkey=%%k +if "%PE%" EQU "0" for /f "tokens=*" %%k in ('wmic path softwarelicensingservice get OA3xOriginalProductKey 2^>nul') do ( + set tmpKey=%%k + if "!tmpKey:~5,1!" EQU "-" if "!tmpKey:~11,1!" EQU "-" if "!tmpKey:~17,1!" EQU "-" if "!tmpKey:~23,1!" EQU "-" set prodkey=%%k + ) +) + +if "%prodkey%" EQU "" set prodkey=Kein Product Key gefunden. + +echo. >> %datei% +echo BIOS-Schluessel >> %datei% +echo ### %prodkey% ### >> %datei% +echo %prodkey% + +if "%prodkey%" NEQ "Kein Product Key gefunden." ( + if "%PE%" EQU "0" if "%SRP%" EQU "0" ( + for /f "delims=;" %%n in ('powershell -NoLogo -NoProfile -NonInteractive -EP Bypass -File %checkpid% ^"%prodkey%^" -SimpleOutput') do ( + if "%%n" NEQ "Produkt unbekannt" echo Laut PID-Datenbank: %%n >> %datei% + ) + ) +) + +:reg + +echo. +echo Suche Schluessel in der Registry ... +echo. +for /f "delims=" %%d in ('reg query HKLM /s /v "DigitalProductId"') do ( + set Treffer=%%d + if "!Treffer:~0,4!" EQU "HKEY" ( + echo Schluessel gefunden in %%d + echo. + + for /f "tokens=* delims=" %%k in ('cscript.exe /nologo %vbs% "!Treffer!\DigitalProductId"') do set prodkey=%%k + + echo. >> %datei% + echo. >> %datei% + echo ### !prodkey! ### >> %datei% + + if "%PE%" EQU "0" if "%SRP%" EQU "0" ( + for /f "delims=;" %%n in ('powershell -NoLogo -NoProfile -NonInteractive -EP Bypass -File %checkpid% ^"^!prodkey^!^" -SimpleOutput') do ( + if "%%n" NEQ "Produkt unbekannt" echo Laut PID-Datenbank: %%n >> %datei% + ) + ) + + + for /f "tokens=3*" %%i in ('reg query "!Treffer!" /v ProductName 2^>nul ^| %windir%\system32\find.exe "ProductName"') do if "%%i" neq "" for /f "tokens=3*" %%i in ('reg query ^"!Treffer!^" /v ProductName 2^>nul ^| %windir%\system32\find.exe "REG_SZ"') do echo Laut Registry: %%i %%j >> %datei% + + for /f "tokens=3*" %%m in ('reg query "!Treffer!" /v CurrentBuild 2^>nul ^| %windir%\system32\find.exe "CurrentBuild"') do if "%%m" neq "" for /f "tokens=3*" %%m in ('reg query ^"!Treffer!^" /v CurrentBuild 2^>nul ^| %windir%\system32\find.exe "REG_SZ"') do echo Laut Registry: Build %%m %%n >> %datei% + + + echo Fundort: !Treffer! >> %datei% + + if not exist %generic% echo ### Bewertung: Keine Aussage zur Aktivierbarkeit moeglich. ### >> %datei% + + set gen=0 + + if exist %generic% For /F %%t in (%generic%) do if %%t EQU !prodkey! set gen=1 + + if !gen! EQU 1 ( + echo Bewertung: Nicht aktivierbarer Schluessel >> %datei% + ) else ( + if exist %generic% ( + echo Bewertung: >> %datei% + echo ###################################################################### >> %datei% + echo ######### Schluessel ist eventuell aktivierbar. AUSPROBIEREN^^! ######## >> %datei% + echo ###################################################################### >> %datei% + ) + ) + + + ) +) + +echo. >> %datei% + +if "%PE%" EQU "1" ( + echo Achtung^^! Durchlauf unter PE. >> %datei% + echo Auswertung der Informationen aus der >> %datei% + echo PID-Datenbank war daher nicht moeglich. >> %datei% + echo. >> %datei% +) + +If not exist %generic% ( + echo Achtung^^! KeyFinder hat in diesem Durchlauf >> %datei% + echo keine Schluessel in Systemdateien gefunden. >> %datei% + echo Einordnung der Schluessel dadurch nicht moeglich. >> %datei% + echo. >> %datei% +) + +For %%A in (%generic%) do ( + set Gensize=%%~zA + if !Gensize! LEQ 10000 ( + echo Achtung^^! KeyFinder hat in diesem Durchlauf >> %datei% + echo nur sehr wenige Infos ueber nicht aktivierbare >> %datei% + echo Schluessel in Systemdateien gefunden. >> %datei% + echo Einschaetzung der Schluessel dadurch eingeschraenkt. >> %datei% + echo. >> %datei% + ) +) + +echo. >> %datei% +echo. >> %datei% +echo. >> %datei% + +For %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist "%%a:\windows" ( + if "%%a:" NEQ "%systemdrive%" ( + reg unload HKLM\_Laufwerk_%%a_Software >nul 2>nul + reg unload HKLM\_Laufwerk_%%a_System >nul 2>nul + ) + ) + + +if exist %tmpdir% rd /q /s %tmpdir% +start notepad %datei% +goto :eof + + +REM Erstellt 2022 von Axel Vahldiek/c't (axv) +REM mailto: axv@ct.de +REM Urheber der VBS-Routine leider unbekannt. Sachdienliche Hinweise bitte an axv, danke. +REM Version 1.44 \ No newline at end of file diff --git a/ctKeyfinder/sources/7z-32/7z.dll b/ctKeyfinder/sources/7z-32/7z.dll new file mode 100644 index 0000000..02d0974 Binary files /dev/null and b/ctKeyfinder/sources/7z-32/7z.dll differ diff --git a/ctKeyfinder/sources/7z-32/7z.exe b/ctKeyfinder/sources/7z-32/7z.exe new file mode 100644 index 0000000..d5d5801 Binary files /dev/null and b/ctKeyfinder/sources/7z-32/7z.exe differ diff --git a/ctKeyfinder/sources/7z-64/7z.dll b/ctKeyfinder/sources/7z-64/7z.dll new file mode 100644 index 0000000..b028a37 Binary files /dev/null and b/ctKeyfinder/sources/7z-64/7z.dll differ diff --git a/ctKeyfinder/sources/7z-64/7z.exe b/ctKeyfinder/sources/7z-64/7z.exe new file mode 100644 index 0000000..6a34fc6 Binary files /dev/null and b/ctKeyfinder/sources/7z-64/7z.exe differ diff --git a/ctKeyfinder/sources/Check-Pid.ps1 b/ctKeyfinder/sources/Check-Pid.ps1 new file mode 100644 index 0000000..8e1ad57 --- /dev/null +++ b/ctKeyfinder/sources/Check-Pid.ps1 @@ -0,0 +1,371 @@ +[CmdletBinding(DefaultParameterSetName = 'LiteralKeys')] +param ( + [Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true, ParameterSetName='LiteralKeys')] + [string[]] $ProductKey, + [Parameter(Mandatory=$true, ValueFromPipeline=$true, ParameterSetName='KeyFile')] + [string] $KeyFile, + [switch] $SimpleOutput +) + +$source = @" +using System; +using System.Text; +using System.Runtime.InteropServices; + +public static class PidChecker +{ + // Quelle: https://github.com/chughes-3/UpdateProductKey/blob/master/UpdateProductKeys/PidChecker.cs + + [DllImport("pidgenx.dll", EntryPoint = "PidGenX", CharSet = CharSet.Auto)] + static extern int PidGenX(string ProductKey, string PkeyPath, string MSPID, int UnknownUsage, IntPtr ProductID, IntPtr DigitalProductID, IntPtr DigitalProductID4); + + public static string CheckProductKey(string productKey, out string skuId) + { + string result = ""; + skuId = ""; + int RetID; + byte[] gpid = new byte[0x32]; + byte[] opid = new byte[0xA4]; + byte[] npid = new byte[0x04F8]; + + IntPtr PID = Marshal.AllocHGlobal(0x32); + IntPtr DPID = Marshal.AllocHGlobal(0xA4); + IntPtr DPID4 = Marshal.AllocHGlobal(0x04F8); + + string PKeyPath = Environment.SystemDirectory + @"\spp\tokens\pkeyconfig\pkeyconfig.xrm-ms"; + string MSPID = "00000"; + + gpid[0] = 0x32; + opid[0] = 0xA4; + npid[0] = 0xF8; + npid[1] = 0x04; + + Marshal.Copy(gpid, 0, PID, 0x32); + Marshal.Copy(opid, 0, DPID, 0xA4); + Marshal.Copy(npid, 0, DPID4, 0x04F8); + + RetID = PidGenX(productKey, PKeyPath, MSPID, 0, PID, DPID, DPID4); + + if (RetID == 0) + { + Marshal.Copy(PID, gpid, 0, gpid.Length); + Marshal.Copy(DPID, opid, 0, opid.Length); + Marshal.Copy(DPID4, npid, 0, npid.Length); + skuId = "{" + GetString(npid, 0x0088, Encoding.Unicode) + "}"; + result = "Valid"; + } + else if (RetID == -2147024809) + { + result = "PidChecker: Invalid Arguments"; + } + else if (RetID == -1979645695) + { + result = "PidChecker: Not a Windows 7 Product Key"; + } + else if (RetID == -2147024894) + { + result = "PidChecker: pkeyconfig.xrm.ms file is not found"; + } + else + { + result = string.Format("PidChecker: Invalid input! ({0} ≙ 0x{0:x})", RetID); + } + Marshal.FreeHGlobal(PID); + Marshal.FreeHGlobal(DPID); + Marshal.FreeHGlobal(DPID4); + //FreeLibrary(dllHandle); + return result; + } + static string GetString(byte[] bytes, int index, Encoding enc) + { + int n = index; + while (!(bytes[n] == 0 && bytes[n + 1] == 0)) n++; + return enc.GetString(bytes, index, n - index + 1); + } +} +"@ +Add-Type -TypeDefinition $source + +$result = @{} +$PKeyPath = [Environment]::SystemDirectory + '\spp\tokens\pkeyconfig\pkeyconfig.xrm-ms' +$Namespace = @{tm = "http://www.microsoft.com/DRM/XrML2/TM/v2"} +$XPath = "//tm:infoBin[@name='pkeyConfigData']" +$configDataBase64 = Select-Xml -Path $PKeyPath -Namespace $Namespace -XPath $XPath | Select-Object -ExpandProperty Node +if(-not $configDataBase64) { + Write-Host "Datei pkeyconfig.xrm-ms nicht gefunden oder unerwarteter Inhalt." + return +} +$configDataXml = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($configDataBase64.InnerText)) + +if($KeyFile) { + Write-Verbose "Lese $KeyFile ..." + $ProductKey = @() + Get-Content $KeyFile | ForEach-Object { + if($_ -match '([A-Z0-9]{5}-){4}[A-Z0-9]{5}') { + Write-Verbose ("Schlüssel gefunden: {0}" -f $Matches[0]) + $ProductKey += $Matches[0] + } + } +} + +foreach($Key in $ProductKey) { + if($result[$Key]) { + Write-Verbose "Überspringe ${Key}: Schon bekannt." + continue + } + Write-Verbose "Verarbeite $Key ..." + $Product = [PSCustomObject]@{ + Key = $Key + } + $ConfigId = "" + $IsValid = [PidChecker]::CheckProductKey($Key, [ref]$ConfigId) + if($IsValid -ne "Valid") { + $Product | Add-Member -MemberType NoteProperty -Name 'Error' -Value $IsValid + } + else { + $Namespace = @{ns = "http://www.microsoft.com/DRM/PKEY/Configuration/2.0"} + $XPath = "//ns:Configuration[ns:ActConfigId='{0}']" -f $ConfigId + $Configuration = Select-Xml -Content $configDataXml -Namespace $Namespace -XPath $XPath + if(-not $Configuration) { + $Product | Add-Member -MemberType NoteProperty -Name 'Error' -Value "Unbekannter Produktschlüssel" + } + else { + $Product | Add-Member -MemberType NoteProperty -Name 'Product' -Value $Configuration.Node.ProductDescription + $Product | Add-Member -MemberType NoteProperty -Name 'Edition' -Value $Configuration.Node.EditionId + $Product | Add-Member -MemberType NoteProperty -Name 'KeyType' -Value $Configuration.Node.ProductKeyType + } + } + $result[$Key] = $Product +} +if($SimpleOutput) { + $out = "" + foreach($r in $result.GetEnumerator()) + { + if($out -ne "") { + $out += "`r`n" + } + if($result.Count -ne 1) { + $out += "$($r.Name): " + } + if($r.Value.Error) { + $out += "Produkt unbekannt" + } + else { + $out += $r.Value.Product + } + } + return $out +} +else { + return $result.Values # | Sort-Object Key +} + +# SIG # Begin signature block +# MIImxgYJKoZIhvcNAQcCoIImtzCCJrMCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB +# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR +# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUWtKxkAX5tFiVubVKwoRKK/JJ +# gLyggh/XMIIFbzCCBFegAwIBAgIQSPyTtGBVlI02p8mKidaUFjANBgkqhkiG9w0B +# AQwFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVy +# MRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEh +# MB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTIxMDUyNTAwMDAw +# MFoXDTI4MTIzMTIzNTk1OVowVjELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1NlY3Rp +# Z28gTGltaXRlZDEtMCsGA1UEAxMkU2VjdGlnbyBQdWJsaWMgQ29kZSBTaWduaW5n +# IFJvb3QgUjQ2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjeeUEiIE +# JHQu/xYjApKKtq42haxH1CORKz7cfeIxoFFvrISR41KKteKW3tCHYySJiv/vEpM7 +# fbu2ir29BX8nm2tl06UMabG8STma8W1uquSggyfamg0rUOlLW7O4ZDakfko9qXGr +# YbNzszwLDO/bM1flvjQ345cbXf0fEj2CA3bm+z9m0pQxafptszSswXp43JJQ8mTH +# qi0Eq8Nq6uAvp6fcbtfo/9ohq0C/ue4NnsbZnpnvxt4fqQx2sycgoda6/YDnAdLv +# 64IplXCN/7sVz/7RDzaiLk8ykHRGa0c1E3cFM09jLrgt4b9lpwRrGNhx+swI8m2J +# mRCxrds+LOSqGLDGBwF1Z95t6WNjHjZ/aYm+qkU+blpfj6Fby50whjDoA7NAxg0P +# OM1nqFOI+rgwZfpvx+cdsYN0aT6sxGg7seZnM5q2COCABUhA7vaCZEao9XOwBpXy +# bGWfv1VbHJxXGsd4RnxwqpQbghesh+m2yQ6BHEDWFhcp/FycGCvqRfXvvdVnTyhe +# Be6QTHrnxvTQ/PrNPjJGEyA2igTqt6oHRpwNkzoJZplYXCmjuQymMDg80EY2NXyc +# uu7D1fkKdvp+BRtAypI16dV60bV/AK6pkKrFfwGcELEW/MxuGNxvYv6mUKe4e7id +# FT/+IAx1yCJaE5UZkADpGtXChvHjjuxf9OUCAwEAAaOCARIwggEOMB8GA1UdIwQY +# MBaAFKARCiM+lvEH7OKvKe+CpX/QMKS0MB0GA1UdDgQWBBQy65Ka/zWWSC8oQEJw +# IDaRXBeF5jAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zATBgNVHSUE +# DDAKBggrBgEFBQcDAzAbBgNVHSAEFDASMAYGBFUdIAAwCAYGZ4EMAQQBMEMGA1Ud +# HwQ8MDowOKA2oDSGMmh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL0FBQUNlcnRpZmlj +# YXRlU2VydmljZXMuY3JsMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0 +# cDovL29jc3AuY29tb2RvY2EuY29tMA0GCSqGSIb3DQEBDAUAA4IBAQASv6Hvi3Sa +# mES4aUa1qyQKDKSKZ7g6gb9Fin1SB6iNH04hhTmja14tIIa/ELiueTtTzbT72ES+ +# BtlcY2fUQBaHRIZyKtYyFfUSg8L54V0RQGf2QidyxSPiAjgaTCDi2wH3zUZPJqJ8 +# ZsBRNraJAlTH/Fj7bADu/pimLpWhDFMpH2/YGaZPnvesCepdgsaLr4CnvYFIUoQx +# 2jLsFeSmTD1sOXPUC4U5IOCFGmjhp0g4qdE2JXfBjRkWxYhMZn0vY86Y6GnfrDyo +# XZ3JHFuu2PMvdM+4fvbXg50RlmKarkUT2n/cR/vfw1Kf5gZV6Z2M8jpiUbzsJA8p +# 1FiAhORFe1rYMIIGGjCCBAKgAwIBAgIQYh1tDFIBnjuQeRUgiSEcCjANBgkqhkiG +# 9w0BAQwFADBWMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVk +# MS0wKwYDVQQDEyRTZWN0aWdvIFB1YmxpYyBDb2RlIFNpZ25pbmcgUm9vdCBSNDYw +# HhcNMjEwMzIyMDAwMDAwWhcNMzYwMzIxMjM1OTU5WjBUMQswCQYDVQQGEwJHQjEY +# MBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMSswKQYDVQQDEyJTZWN0aWdvIFB1Ymxp +# YyBDb2RlIFNpZ25pbmcgQ0EgUjM2MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB +# igKCAYEAmyudU/o1P45gBkNqwM/1f/bIU1MYyM7TbH78WAeVF3llMwsRHgBGRmxD +# eEDIArCS2VCoVk4Y/8j6stIkmYV5Gej4NgNjVQ4BYoDjGMwdjioXan1hlaGFt4Wk +# 9vT0k2oWJMJjL9G//N523hAm4jF4UjrW2pvv9+hdPX8tbbAfI3v0VdJiJPFy/7Xw +# iunD7mBxNtecM6ytIdUlh08T2z7mJEXZD9OWcJkZk5wDuf2q52PN43jc4T9OkoXZ +# 0arWZVeffvMr/iiIROSCzKoDmWABDRzV/UiQ5vqsaeFaqQdzFf4ed8peNWh1OaZX +# nYvZQgWx/SXiJDRSAolRzZEZquE6cbcH747FHncs/Kzcn0Ccv2jrOW+LPmnOyB+t +# AfiWu01TPhCr9VrkxsHC5qFNxaThTG5j4/Kc+ODD2dX/fmBECELcvzUHf9shoFvr +# n35XGf2RPaNTO2uSZ6n9otv7jElspkfK9qEATHZcodp+R4q2OIypxR//YEb3fkDn +# 3UayWW9bAgMBAAGjggFkMIIBYDAfBgNVHSMEGDAWgBQy65Ka/zWWSC8oQEJwIDaR +# XBeF5jAdBgNVHQ4EFgQUDyrLIIcouOxvSK4rVKYpqhekzQwwDgYDVR0PAQH/BAQD +# AgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAwEwYDVR0lBAwwCgYIKwYBBQUHAwMwGwYD +# VR0gBBQwEjAGBgRVHSAAMAgGBmeBDAEEATBLBgNVHR8ERDBCMECgPqA8hjpodHRw +# Oi8vY3JsLnNlY3RpZ28uY29tL1NlY3RpZ29QdWJsaWNDb2RlU2lnbmluZ1Jvb3RS +# NDYuY3JsMHsGCCsGAQUFBwEBBG8wbTBGBggrBgEFBQcwAoY6aHR0cDovL2NydC5z +# ZWN0aWdvLmNvbS9TZWN0aWdvUHVibGljQ29kZVNpZ25pbmdSb290UjQ2LnA3YzAj +# BggrBgEFBQcwAYYXaHR0cDovL29jc3Auc2VjdGlnby5jb20wDQYJKoZIhvcNAQEM +# BQADggIBAAb/guF3YzZue6EVIJsT/wT+mHVEYcNWlXHRkT+FoetAQLHI1uBy/YXK +# ZDk8+Y1LoNqHrp22AKMGxQtgCivnDHFyAQ9GXTmlk7MjcgQbDCx6mn7yIawsppWk +# vfPkKaAQsiqaT9DnMWBHVNIabGqgQSGTrQWo43MOfsPynhbz2Hyxf5XWKZpRvr3d +# MapandPfYgoZ8iDL2OR3sYztgJrbG6VZ9DoTXFm1g0Rf97Aaen1l4c+w3DC+IkwF +# kvjFV3jS49ZSc4lShKK6BrPTJYs4NG1DGzmpToTnwoqZ8fAmi2XlZnuchC4NPSZa +# PATHvNIzt+z1PHo35D/f7j2pO1S8BCysQDHCbM5Mnomnq5aYcKCsdbh0czchOm8b +# kinLrYrKpii+Tk7pwL7TjRKLXkomm5D1Umds++pip8wH2cQpf93at3VDcOK4N7Ew +# oIJB0kak6pSzEu4I64U6gZs7tS/dGNSljf2OSSnRr7KWzq03zl8l75jy+hOds9TW +# SenLbjBQUGR96cFr6lEUfAIEHVC1L68Y1GGxx4/eRI82ut83axHMViw1+sVpbPxg +# 51Tbnio1lB93079WPFnYaOvfGAA0e0zcfF/M9gXr+korwQTh2Prqooq2bYNMvUoU +# KD85gnJ+t0smrWrb8dee2CvYZXD5laGtaAxOfy/VKNmwuWuAh9kcMIIGWDCCBMCg +# AwIBAgIQJ9duLUO9FDxmyM5o3NajBDANBgkqhkiG9w0BAQwFADBUMQswCQYDVQQG +# EwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMSswKQYDVQQDEyJTZWN0aWdv +# IFB1YmxpYyBDb2RlIFNpZ25pbmcgQ0EgUjM2MB4XDTIyMTIwNjAwMDAwMFoXDTI0 +# MDEwODIzNTk1OVowbzELMAkGA1UEBhMCREUxFjAUBgNVBAgMDU5pZWRlcnNhY2hz +# ZW4xIzAhBgNVBAoMGkhlaXNlIE1lZGllbiBHbWJIICYgQ28uIEtHMSMwIQYDVQQD +# DBpIZWlzZSBNZWRpZW4gR21iSCAmIENvLiBLRzCCAiIwDQYJKoZIhvcNAQEBBQAD +# ggIPADCCAgoCggIBAJb++5FeuAjKhFSXbwoAxxmkmBMjLocELgkOP0E4mNmy1tyP +# cqAYE2Jspg3X+KE/X4swbnCU8wBI3MX0RkjTM06kDb9YetDnLHMSzk0BhnrUf7um +# FfmyuowlEhWrrGQGwiL/kYGo0z5vi0+2Xro7Dc9Yd6TPOxCXhOAQF+ltcCk47Zza +# y1GsW63G8cBowQLYuBAn5tiNj4Y9qT0iJ40GSNEFWUg3SCl9Bmy1/ANpVepT4/aV +# Vd0r6WP71jSiQltAHQ51QV1tsolgBBbnfwBfEfMKBvyvXG+46WszJ9fywVj9pkLA +# IwUU+e03ix5+xQ5icMAjvNi9ZNNr0gj2NShXf2k//oOUdqgkFvmXKdlWISbqLBXl +# h8K5LU9BgrK3GiELPj6P4T5y00p6TfnsCica2mP0JeuUR+GD8dtnus1F481vNLdV +# 0kBPIpPdFR5/W7o2E9gEzvLjc3UlR+lMiZ39a5plv1ne55IkvpHpWdJLEoi0O8Hz +# HUn0wvGaOYOU2XaJLyy5Lcl4FXDuW3s4SNBgB482+CyxlXA+TNCNxOplNwok73iq +# Z/Lt/IIwwfWVGWbdOf9HXh07EfRvMMaot66uUKfp3s+ffPI53lUDq0g8+fdQFC+A +# uUtfHyE5jFKL7TW0teZOovUtC5nBJB6kcfMl/SzcLsv+rjhH+tDgC3mADC6fAgMB +# AAGjggGJMIIBhTAfBgNVHSMEGDAWgBQPKssghyi47G9IritUpimqF6TNDDAdBgNV +# HQ4EFgQURR6a6AkwL9LB7PPGFHi0Fds7NkswDgYDVR0PAQH/BAQDAgeAMAwGA1Ud +# EwEB/wQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwMwSgYDVR0gBEMwQTA1BgwrBgEE +# AbIxAQIBAwIwJTAjBggrBgEFBQcCARYXaHR0cHM6Ly9zZWN0aWdvLmNvbS9DUFMw +# CAYGZ4EMAQQBMEkGA1UdHwRCMEAwPqA8oDqGOGh0dHA6Ly9jcmwuc2VjdGlnby5j +# b20vU2VjdGlnb1B1YmxpY0NvZGVTaWduaW5nQ0FSMzYuY3JsMHkGCCsGAQUFBwEB +# BG0wazBEBggrBgEFBQcwAoY4aHR0cDovL2NydC5zZWN0aWdvLmNvbS9TZWN0aWdv +# UHVibGljQ29kZVNpZ25pbmdDQVIzNi5jcnQwIwYIKwYBBQUHMAGGF2h0dHA6Ly9v +# Y3NwLnNlY3RpZ28uY29tMA0GCSqGSIb3DQEBDAUAA4IBgQAtQeD4SqSJdR4OsP2w +# ybXWKyEV/0pG9ruAOBR60MKpR3u+jCM0P/dzO1tU1dcyozlIGgMHdPqzECJzOQmO +# cCb32Rpm+pV0vDmmcn34x10bzGMoCqcgqdoKBk2sC9wJTsM4nzKwSTFyXGUlmo1T +# sVNXmDogyT2hXDuLZe6MNFoQ3MuevUyrT8srUixtCTh4eQKNwO7AMtQ/RrococTi +# EsxJkrhiU1AiEObKnhrc2GCF4nN/pir9iUR8h7NfS+JuGh4v3+0E7aUzo4kNz0GW +# eLou03eRhUj1c6zkfePZxCN3NVq+WuBF2zZmT36w2PhxDGCxYaYxWVWikzdWdK8P +# kIzU4OGx9976l7Ehw9MfTW7ZLiylBQvCKMgcdcDXt6QzltGzyrk0mCbkcOZ9xUDw +# y+6kWNTev3cvjzCL8rYHM1RNdb10/bjO9pIGsyFXPmMU/XKbu0oUWJgxam4wHzuP +# GXMjAhUAXADXYV38dvavSmWgGrkrv8PvSUStS5rQft16JFkwggbsMIIE1KADAgEC +# AhAwD2+s3WaYdHypRjaneC25MA0GCSqGSIb3DQEBDAUAMIGIMQswCQYDVQQGEwJV +# UzETMBEGA1UECBMKTmV3IEplcnNleTEUMBIGA1UEBxMLSmVyc2V5IENpdHkxHjAc +# BgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEuMCwGA1UEAxMlVVNFUlRydXN0 +# IFJTQSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xOTA1MDIwMDAwMDBaFw0z +# ODAxMTgyMzU5NTlaMH0xCzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1h +# bmNoZXN0ZXIxEDAOBgNVBAcTB1NhbGZvcmQxGDAWBgNVBAoTD1NlY3RpZ28gTGlt +# aXRlZDElMCMGA1UEAxMcU2VjdGlnbyBSU0EgVGltZSBTdGFtcGluZyBDQTCCAiIw +# DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMgbAa/ZLH6ImX0BmD8gkL2cgCFU +# k7nPoD5T77NawHbWGgSlzkeDtevEzEk0y/NFZbn5p2QWJgn71TJSeS7JY8ITm7aG +# PwEFkmZvIavVcRB5h/RGKs3EWsnb111JTXJWD9zJ41OYOioe/M5YSdO/8zm7uaQj +# QqzQFcN/nqJc1zjxFrJw06PE37PFcqwuCnf8DZRSt/wflXMkPQEovA8NT7ORAY5u +# nSd1VdEXOzQhe5cBlK9/gM/REQpXhMl/VuC9RpyCvpSdv7QgsGB+uE31DT/b0OqF +# jIpWcdEtlEzIjDzTFKKcvSb/01Mgx2Bpm1gKVPQF5/0xrPnIhRfHuCkZpCkvRuPd +# 25Ffnz82Pg4wZytGtzWvlr7aTGDMqLufDRTUGMQwmHSCIc9iVrUhcxIe/arKCFiH +# d6QV6xlV/9A5VC0m7kUaOm/N14Tw1/AoxU9kgwLU++Le8bwCKPRt2ieKBtKWh97o +# aw7wW33pdmmTIBxKlyx3GSuTlZicl57rjsF4VsZEJd8GEpoGLZ8DXv2DolNnyrH6 +# jaFkyYiSWcuoRsDJ8qb/fVfbEnb6ikEk1Bv8cqUUotStQxykSYtBORQDHin6G6Ui +# rqXDTYLQjdprt9v3GEBXc/Bxo/tKfUU2wfeNgvq5yQ1TgH36tjlYMu9vGFCJ10+d +# M70atZ2h3pVBeqeDAgMBAAGjggFaMIIBVjAfBgNVHSMEGDAWgBRTeb9aqitKz1SA +# 4dibwJ3ysgNmyzAdBgNVHQ4EFgQUGqH4YRkgD8NBd0UojtE1XwYSBFUwDgYDVR0P +# AQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAwEwYDVR0lBAwwCgYIKwYBBQUH +# AwgwEQYDVR0gBAowCDAGBgRVHSAAMFAGA1UdHwRJMEcwRaBDoEGGP2h0dHA6Ly9j +# cmwudXNlcnRydXN0LmNvbS9VU0VSVHJ1c3RSU0FDZXJ0aWZpY2F0aW9uQXV0aG9y +# aXR5LmNybDB2BggrBgEFBQcBAQRqMGgwPwYIKwYBBQUHMAKGM2h0dHA6Ly9jcnQu +# dXNlcnRydXN0LmNvbS9VU0VSVHJ1c3RSU0FBZGRUcnVzdENBLmNydDAlBggrBgEF +# BQcwAYYZaHR0cDovL29jc3AudXNlcnRydXN0LmNvbTANBgkqhkiG9w0BAQwFAAOC +# AgEAbVSBpTNdFuG1U4GRdd8DejILLSWEEbKw2yp9KgX1vDsn9FqguUlZkClsYcu1 +# UNviffmfAO9Aw63T4uRW+VhBz/FC5RB9/7B0H4/GXAn5M17qoBwmWFzztBEP1dXD +# 4rzVWHi/SHbhRGdtj7BDEA+N5Pk4Yr8TAcWFo0zFzLJTMJWk1vSWVgi4zVx/AZa+ +# clJqO0I3fBZ4OZOTlJux3LJtQW1nzclvkD1/RXLBGyPWwlWEZuSzxWYG9vPWS16t +# oytCiiGS/qhvWiVwYoFzY16gu9jc10rTPa+DBjgSHSSHLeT8AtY+dwS8BDa153fL +# nC6NIxi5o8JHHfBd1qFzVwVomqfJN2Udvuq82EKDQwWli6YJ/9GhlKZOqj0J9QVs +# t9JkWtgqIsJLnfE5XkzeSD2bNJaaCV+O/fexUpHOP4n2HKG1qXUfcb9bQ11lPVCB +# bqvw0NP8srMftpmWJvQ8eYtcZMzN7iea5aDADHKHwW5NWtMe6vBE5jJvHOsXTpTD +# eGUgOw9Bqh/poUGd/rG4oGUqNODeqPk85sEwu8CgYyz8XBYAqNDEf+oRnR4GxqZt +# Ml20OAkrSQeq/eww2vGnL8+3/frQo4TZJ577AWZ3uVYQ4SBuxq6x+ba6yDVdM3aO +# 8XwgDCp3rrWiAoa6Ke60WgCxjKvj+QrJVF3UuWp0nr1Irpgwggb2MIIE3qADAgEC +# AhEAkDl/mtJKOhPyvZFfCDipQzANBgkqhkiG9w0BAQwFADB9MQswCQYDVQQGEwJH +# QjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3Jk +# MRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0ZWQxJTAjBgNVBAMTHFNlY3RpZ28gUlNB +# IFRpbWUgU3RhbXBpbmcgQ0EwHhcNMjIwNTExMDAwMDAwWhcNMzMwODEwMjM1OTU5 +# WjBqMQswCQYDVQQGEwJHQjETMBEGA1UECBMKTWFuY2hlc3RlcjEYMBYGA1UEChMP +# U2VjdGlnbyBMaW1pdGVkMSwwKgYDVQQDDCNTZWN0aWdvIFJTQSBUaW1lIFN0YW1w +# aW5nIFNpZ25lciAjMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJCy +# cT954dS5ihfMw5fCkJRy7Vo6bwFDf3NaKJ8kfKA1QAb6lK8KoYO2E+RLFQZeaoog +# NHF7uyWtP1sKpB8vbH0uYVHQjFk3PqZd8R5dgLbYH2DjzRJqiB/G/hjLk0NWesfO +# A9YAZChWIrFLGdLwlslEHzldnLCW7VpJjX5y5ENrf8mgP2xKrdUAT70KuIPFvZgs +# B3YBcEXew/BCaer/JswDRB8WKOFqdLacRfq2Os6U0R+9jGWq/fzDPOgNnDhm1fx9 +# HptZjJFaQldVUBYNS3Ry7qAqMfwmAjT5ZBtZ/eM61Oi4QSl0AT8N4BN3KxE8+z3N +# 0Ofhl1tV9yoDbdXNYtrOnB786nB95n1LaM5aKWHToFwls6UnaKNY/fUta8pfZMdr +# KAzarHhB3pLvD8Xsq98tbxpUUWwzs41ZYOff6Bcio3lBYs/8e/OS2q7gPE8PWsxu +# 3x+8Iq+3OBCaNKcL//4dXqTz7hY4Kz+sdpRBnWQd+oD9AOH++DrUw167aU1ymeXx +# Mi1R+mGtTeomjm38qUiYPvJGDWmxt270BdtBBcYYwFDk+K3+rGNhR5G8RrVGU2zF +# 9OGGJ5OEOWx14B0MelmLLsv0ZCxCR/RUWIU35cdpp9Ili5a/xq3gvbE39x/fQnuq +# 6xzp6z1a3fjSkNVJmjodgxpXfxwBws4cfcz7lhXFAgMBAAGjggGCMIIBfjAfBgNV +# HSMEGDAWgBQaofhhGSAPw0F3RSiO0TVfBhIEVTAdBgNVHQ4EFgQUJS5oPGuaKyQU +# qR+i3yY6zxSm8eAwDgYDVR0PAQH/BAQDAgbAMAwGA1UdEwEB/wQCMAAwFgYDVR0l +# AQH/BAwwCgYIKwYBBQUHAwgwSgYDVR0gBEMwQTA1BgwrBgEEAbIxAQIBAwgwJTAj +# BggrBgEFBQcCARYXaHR0cHM6Ly9zZWN0aWdvLmNvbS9DUFMwCAYGZ4EMAQQCMEQG +# A1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwuc2VjdGlnby5jb20vU2VjdGlnb1JT +# QVRpbWVTdGFtcGluZ0NBLmNybDB0BggrBgEFBQcBAQRoMGYwPwYIKwYBBQUHMAKG +# M2h0dHA6Ly9jcnQuc2VjdGlnby5jb20vU2VjdGlnb1JTQVRpbWVTdGFtcGluZ0NB +# LmNydDAjBggrBgEFBQcwAYYXaHR0cDovL29jc3Auc2VjdGlnby5jb20wDQYJKoZI +# hvcNAQEMBQADggIBAHPa7Whyy8K5QKExu7QDoy0UeyTntFsVfajp/a3Rkg18PTag +# adnzmjDarGnWdFckP34PPNn1w3klbCbojWiTzvF3iTl/qAQF2jTDFOqfCFSr/8R+ +# lmwr05TrtGzgRU0ssvc7O1q1wfvXiXVtmHJy9vcHKPPTstDrGb4VLHjvzUWgAOT4 +# BHa7V8WQvndUkHSeC09NxKoTj5evATUry5sReOny+YkEPE7jghJi67REDHVBwg80 +# uIidyCLxE2rbGC9ueK3EBbTohAiTB/l9g/5omDTkd+WxzoyUbNsDbSgFR36bLvBk +# +9ukAzEQfBr7PBmA0QtwuVVfR745ZM632iNUMuNGsjLY0imGyRVdgJWvAvu00S6d +# OHw14A8c7RtHSJwialWC2fK6CGUD5fEp80iKCQFMpnnyorYamZTrlyjhvn0boXzt +# VoCm9CIzkOSEU/wq+sCnl6jqtY16zuTgS6Ezqwt2oNVpFreOZr9f+h/EqH+noUgU +# kQ2C/L1Nme3J5mw2/ndDmbhpLXxhL+2jsEn+W75pJJH/k/xXaZJL2QU/bYZy06LQ +# wGTSOkLBGgP70O2aIbg/r6ayUVTVTMXKHxKNV8Y57Vz/7J8mdq1kZmfoqjDg0q23 +# fbFqQSduA4qjdOCKCYJuv+P2t7yeCykYaIGhnD9uFllLFAkJmuauv2AV3Yb1MYIG +# WTCCBlUCAQEwaDBUMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1p +# dGVkMSswKQYDVQQDEyJTZWN0aWdvIFB1YmxpYyBDb2RlIFNpZ25pbmcgQ0EgUjM2 +# AhAn124tQ70UPGbIzmjc1qMEMAkGBSsOAwIaBQCgeDAYBgorBgEEAYI3AgEMMQow +# CKACgAChAoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcC +# AQsxDjAMBgorBgEEAYI3AgEVMCMGCSqGSIb3DQEJBDEWBBRYuHYX0/Psx3DVYlbr +# NEghmE7f1TANBgkqhkiG9w0BAQEFAASCAgBKzSvvyJRd+hesdPhVVnwQ/KdNkmEi +# ecxtqiiPF83A+ld1iq/7M8qqClceal+frAqt+sL06jZhIYhsz1M6uC3fABvPGWhj +# fnoLOEsBX5U8myJ9+dfQYnFN+q0lD6m80R+8iuj8daxc4HI/3TXJzFCgh9v8U76C +# MnKShkhG6DLPW1VWpa82xwI682tgvAYNMSnYzaVsZeHb8OB7QLX2yAokl2Te+KxZ +# uj2CkzX7qvGvDQ8uZt6+IndWCAlXdcqOH7j3b7flA+v39lwqzyvl6qgkKpuP0b/d +# IluvMuUXdwEB+fU81ovpg2x7VSXKRwrZIvTCi+sYYdOHVCmsXXUdqmCdACJ1qHsN +# teu/+LJPCNMl1FdMHGN9wMUUaGdh0/obKTGA1J3yH/Tb8SPMpwZjAFsKaH40MuhW +# 5VuoYGU5cTwrwlAEz4crimClHkumxIrw58W4cfAdSjY2UvdnZGQ5ILv4yEBWoVEJ +# JAIyjrUGAV3LLpo7K6Sk969tyarz0gOpgzBAYguQes2gBuinQPxpneSOrVUWaOF5 +# 3xEGmtG8lFNXPoiTwNiKBUuh0vgnXkapxBUa3j5RwrbiaFzjeBSUfHKrmAZfQXAl +# NGKxLbbEqr4vJD0CfuyKKTInvoZs4wS6J8k+kWhckKyMtTGr4RjLbmU1qf2pU6x5 +# u1hirHFBF123g6GCA0wwggNIBgkqhkiG9w0BCQYxggM5MIIDNQIBATCBkjB9MQsw +# CQYDVQQGEwJHQjEbMBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQH +# EwdTYWxmb3JkMRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0ZWQxJTAjBgNVBAMTHFNl +# Y3RpZ28gUlNBIFRpbWUgU3RhbXBpbmcgQ0ECEQCQOX+a0ko6E/K9kV8IOKlDMA0G +# CWCGSAFlAwQCAgUAoHkwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG +# 9w0BCQUxDxcNMjMwMzA2MTUxNTMxWjA/BgkqhkiG9w0BCQQxMgQwOy4V957f9rpC +# Kp3+dqwZ4DkAZvVMrS6U1lcyoR/OJBEAkbENDWuQtXrt7/v/DuD7MA0GCSqGSIb3 +# DQEBAQUABIICAIBnGaeWCd7n/dfX4wFKJbzQjXBig9YwKyGP2xlKDcAgEJQsJ3A5 +# mBU2JvrPu5G4tsY7G03nU42HL2vwcilJs/NYIHP65SSYwXk2UCgOnuJ308iV+wQK +# /FYj0lM3v7rXmQo5BBRI3oN0u4Hdp6haStQnjtHf0PwuW77r/XwXC9Sb1cPM+dlf +# UG0tkPrc/B3wnbz2aV77TASkceaUzgJgaFDR60KrnvmqUCGf/N0nOu9OzV//U0V1 +# I4qAc88QVhYue14YZoUVxxgV46bH/PtSYWumjPmZFMlfUeZJpFrYp/Qe9AcC4bo1 +# LpZIcLwoyGSHfTyoR1PpG55qWFVHUL7tXVreUAG9MBk2viKV/hhWwpA2kA9bOOHE +# dnVAaFDLDg9pCLVd42gprTjBu53t2R34gyizG+zeVdreMDbjo0DG2m26Y9mfYj9g +# 68/FeP8s6nOHkMI6CNYZK6/0Vum01lH3YH8aZSv2UZrPN4E5/v8BG04PKFeaeQiU +# GfS+Q60DbbEol1/Y9qSEZFhowhHiXzfJF9JvpCBlE8fjFwWuPgOzqxBz7T0DkzI9 +# KU/nyj57VcUzQw7xt3TmM+ANJMKQFhigcCbOM3I2j+cpCFNwRC9CRfbIrwMbzIHH +# Jf+hVTvL4gpn3R/Or2XGqqvyxkvzLWMYAPLkeMoO3SOUFvFXmhX61vnE +# SIG # End signature block diff --git a/ctKeyfinder/sources/DecodeKey.vbs b/ctKeyfinder/sources/DecodeKey.vbs new file mode 100644 index 0000000..b4787b7 --- /dev/null +++ b/ctKeyfinder/sources/DecodeKey.vbs @@ -0,0 +1,33 @@ +Set WshShell = CreateObject("WScript.Shell") +WScript.echo decode(WshShell.RegRead(WScript.Arguments(0))) + +Function decode(id) + Dim WinNew, Map, Out, A, B, C, D, E, F + WinNew = (id(66) \ 6) And 1 + id(66) = (id(66) And &HF7) Or ((WinNew And 2) * 4) + A = 24 + Map = "BCDFGHJKMPQRTVWXY2346789" + Do + B = 14 + C = 0 + Do + C = C * 256 + C = id(B + 52) + C + id(B + 52) = (C \ 24) + C = C Mod 24 + B = B -1 + Loop While B >= 0 + A = A - 1 + Out = Mid(Map, C + 1, 1) & Out + E = C + Loop While A >= 0 + If (WinNew = 1) Then + D = Mid(Out, 2, E) + F = "N" + Out = Replace(Out, D, D & F, 2, 1, 0) + If E = 0 Then Out = F & Out + End If + decode = Mid(Out, 1, 5) & "-" & Mid(Out, 6, 5) & "-" & Mid(Out, 11, 5) & "-" & Mid(Out, 16, 5) & "-" & Mid(Out, 21, 5) +End Function + +' Urheber der Funktion leider unbekannt. Sachdienliche Hinweise bitte an axv@ct.de, danke. \ No newline at end of file diff --git a/ctKeyfinder/sources/ct-PID-Check.bat b/ctKeyfinder/sources/ct-PID-Check.bat new file mode 100644 index 0000000..5c033d9 --- /dev/null +++ b/ctKeyfinder/sources/ct-PID-Check.bat @@ -0,0 +1,6 @@ +@echo off + +Set workdir=%~d0%~p0 +Set checkpid=%workdir%\Check-Pid.ps1 + +powershell -NoLogo -NoProfile -NonInteractive -EP Bypass -File %checkpid% %* -SimpleOutput \ No newline at end of file diff --git a/ctKeyfinder/sources/ctbioskey.7z b/ctKeyfinder/sources/ctbioskey.7z new file mode 100644 index 0000000..78e1521 Binary files /dev/null and b/ctKeyfinder/sources/ctbioskey.7z differ diff --git a/ctKeyfinder/sources/strings.exe b/ctKeyfinder/sources/strings.exe new file mode 100644 index 0000000..396140a Binary files /dev/null and b/ctKeyfinder/sources/strings.exe differ diff --git a/ctKeyfinder/sources/strings64.exe b/ctKeyfinder/sources/strings64.exe new file mode 100644 index 0000000..44d6eba Binary files /dev/null and b/ctKeyfinder/sources/strings64.exe differ