Das Ganze sollte eigentlich unabhängig von der verwendeten Programmiersprache einheitliche Ergebnisse liefern. Es macht keinen Sinn, wenn mehrere Anwendungen, die dieses System nutzen, verschiedene Dinge produzieren. Momentan ist aber genau dies der Fall und nun stellt sich die Frage, wo die Ursache dafür liegt.
Ich war mal so frei, mir sämtliche Generatoren anzusehen, mit einem interessanten Ergebnis:
Nun die Frage aller Fragen: Was läuft hier falsch? So wie ich das sehe, geht der Fehler von der C++ Version bzw. der DLL aus da
- die Delphi Version die DLL nutzt
- die C++ Version sowohl mit, als auch ohne DLL den falschen Hash ausspuckt
Die C++/DLL Version generiert den Hash folgendermaßen:
szHwProfileGuid-lpVolumeSerialNumber
Beispiel:
{846ee340-7039-11de-9d20-806e6f6e696a}-666855262 = c704fea6931949cf11093fc18e3b4de2
Wobei sich hier die Seriennummer noch zusätzlich von den anderen Unterscheidet. In AutoIT und auch in der C# Version sieht's jedoch so aus:
{846ee340-7039-11de-9d20-806e6f6e696a}3628112034 = 1f789f49ca8a9cdf6bb6eb1b8c30b8d8
Wie man sieht, wird die HardwareGUID überall korrekt ausgelesen. Lediglich bei der Seriennummer gibt es Unterschiede, aber auch bei der Zusammensetzung des Strings, der gehashed wird. Dadurch kommt es dann wiederum zu verschiedenen Ergebnissen und letzendlich zu Inkompabilitäten unter den Programmen, da wir min. 2 verschiedene HWID's besitzen und nicht jedes Programm den gleichen Algorithmus nutzt