VisualBasic CreateObject erstellt kein Objekt / FritzBox SessionID MD5 Hash

7H0M45

Lt. Junior Grade
Dabei seit
Jan. 2010
Beiträge
459
Hallo zusammen,

ich versuche mich per VBA in meine FritzBox einzuloggen um die Daten über die Heizungsthermostate, ... zu erhalten.
Zum Einloggen wird eine SessionID benötigt, welche über einen speziellen MD5 Hash erzeugt wird. Das ganze ist hier beschrieben:
https://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/AVM_Technical_Note_-_Session_ID.pdf

Ich muss gestehen, dass ich Anhand der Erklärung nicht genau kapiert habe, was und wie das gemacht wird, ich habe aber den entsprechenden Code auch hier im Forum gefunden und für mich abgeleitet:
https://www.computerbase.de/forum/threads/vba-fritzbox-7490-ermittlung-der-sessionid-immer-lauter-nullen.1849375/

Im Kern geht es um diesen Code:
Code:
Public Function mfGetFritzBoxMD5Hash_UTF16LE(Zeichenfolge As String) As String
  'Das hier gibt keinen standard MD5 Hash zurück
  'https://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/AVM_Technical_Note_-_Session_ID.pdf
  'Der MD5-Hash wird über die Bytefolge der UTF-16LE-Codierung dieses
  'Strings gebildet (ohne BOM und ohne abschließende 0-Bytes).
  'Aus Kompatibilitätsgründen muss für jedes Zeichen, dessen Unicode Codepoint > 255 ist, die
  'Codierung des "."-Zeichens benutzt werden (0x2e 0x00 in UTF-16LE). Dies betrifft also alle
  'Zeichen, die nicht in ISO-8859-1 dargestellt werden können, z. B. das Euro-Zeichen.
  'Abschließend ein Beispiel mit deutschem Umlaut:
  'Die Challenge
  ' <challenge> = "1234567z"
  'kombiniert mit dem Kennwort
  ' <klartextpassword> = "äbc"
  'ergibt den Wert
  ' <response> = "1234567z-9e224a41eeefa284df7bb0f26c2913e2"

  'Vor der MD5 Codierung muss immer von UTF8(?) nach UTF16LE gewandelt werden.
   

  On Error Resume Next
  Dim MD5Hasher As Object
  Dim TextToHash() As Byte
  Dim bytes() As Byte
  Dim pos As Long
  Dim outstr As String
  Dim oT As Object

  Set oT = CreateObject("System.Text.UnicodeEncoding")
  Set MD5Hasher = CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider")

  TextToHash = oT.GetBytes_4(Zeichenfolge)
  bytes = MD5Hasher.computeHash_2(TextToHash)

  outstr = ""
  For pos = 1 To UBound(bytes) + 1
      outstr = outstr & LCase(Right("0" & Hex(AscB(MidB(bytes, pos, 1))), 2))
  Next pos

  mfGetFritzBoxMD5Hash_UTF16LE = outstr
End Function

Das ganze Funktioniert mit Excel auf meinem Desktoprechner sehr gut.

Jetzt kommt das Problem: Auf meinem Tablet funktioniert der exakt gleiche Code nicht.

Ich habe das Problem auch schon eingegrenzt.
Code:
  Set oT = CreateObject("System.Text.UnicodeEncoding")
  Set MD5Hasher = CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider")
Hier wird beides mal kein Objekt erzeugt. Die beiden Objekte sind danach = Nothing
Selbst per Early-Binding, wenn ich den Verweis auf die mscorlib.dll setze, funktioniert es auf dem Tablet nicht.

Kann mir jemand sagen warum das so ist?

Gibt es eine alternative Lösung welche diese Objekte nicht nutzt?
Ich kann den MD5 Hash aus Strings erzeugen, was hier aber nicht funktioniert, da noch irgendwelche 0 Bytes eingefügt und davon dann die Hex Werte verwendet werden. Die Hex-Werte bekomme ich hin. Wenn ich diese dann hier unter Binary-Hash einfüge bekomme ich auch den korrekten Hash zurück.
http://www.fileformat.info/tool/hash.htm?hex=7400
Nur wie kann ich in VBA den Hash aus den Bytes erzeugen?

Ich hoffe ich habe mein Problem einigermaßen verständlich beschrieben und Danke euch schonmal jetzt für eure Hilfe!

Gruß
Thomas
 

X__

Lieutenant
Dabei seit
Okt. 2002
Beiträge
515
Ich vermute mal, dass auf deinem Tablet eine abgespeckte
Version von Windows bzw. des .Net-Frameworks installiert ist, in der
diese Objekte einfach fehlen. Vielleicht kannst du da was nachinstallieren.
 

7H0M45

Lt. Junior Grade
Ersteller dieses Themas
Dabei seit
Jan. 2010
Beiträge
459
Hab ich versucht. Hab das .Net Framework heruntergeladen. Die Installationsdatei sagt nur das die neuste Version bereits installiert ist. Ich hab auch Testweise mal VisualStudio installiert, es funktioniert trotzdem nicht.
 

Ocram1992

Lt. Junior Grade
Dabei seit
Mai 2010
Beiträge
500
Welches Windows ist denn auf deinem Tablet installiert? Das normale Windows 10 x86/x64 oder Windows RT/Arm?

Welches Net Framework wolltest du installieren? 4.8?
 

7H0M45

Lt. Junior Grade
Ersteller dieses Themas
Dabei seit
Jan. 2010
Beiträge
459
Windows 10 Pro, Version 1903 32-Bit Betriebssystem. Es sollte .Net 4.8 drauf sein, also das aktuelle.
 

Ocram1992

Lt. Junior Grade
Dabei seit
Mai 2010
Beiträge
500
Kannst du mal folgendes in der Powershell Konsole auf deinem PC und Tablet testen? Es sollte das selbe wie bei deinem Code rumkommen. Musst dann "test" durch was anderes ersetzen. Damit will ich herausfinden ob es an VBA oder an .NET liegt.

PowerShell:
function Get-MD5UnicodeHexString {
  param ([String] $value)
  $bytes = [System.Text.Encoding]::Unicode.GetBytes($value);
  $algorithm = New-Object System.Security.Cryptography.MD5CryptoServiceProvider;
  $hash = $algorithm.ComputeHash($bytes);

  [System.BitConverter]::ToString($hash).Replace("-", "");
};

Get-MD5UnicodeHexString("test");
EDIT: Mit "test" sollte C8059E2EC7419F590E79D7F1B774BFE6 als Hash rauskommen.
 

7H0M45

Lt. Junior Grade
Ersteller dieses Themas
Dabei seit
Jan. 2010
Beiträge
459
Es kommt bei beiden der korrekte Hash raus
 

Ocram1992

Lt. Junior Grade
Dabei seit
Mai 2010
Beiträge
500
Dann ist das Framework wohl in Ordnung. Evtl. läuft dein VBA mit einer alten .NET Version. In .NET kann man die Version des genutzten Frameworks mit Environment.Version herausfinden. Leider hab ich keine Ahnung wie man dieses in VBA aufruft. Evtl. kannst du es ja mal versuchen.

Die Klassen sollten aber schon in .NET Framework 1.1 vorhanden sein, dementsprechend sollte das nicht der Fehler sein.

Kannst du mal eine Beispiel Excel-Datei anhängen wo der Code für den Hash schon drin ist?

Welche Version von Excel nutzt du auf dem Desktop und dem Tablet? Ist es die gleiche?

Ansonsten sieht dein Code sehr ähnlich zu dem Code aus https://en.m.wikibooks.org/wiki/Visual_Basic_for_Applications/String_Hashing_in_VBA Könntest du den mal probieren und sicherstellen, dass du die Referenz auf mscorlib.dll 4.0 64 bit richtig gesetzt hast.

Mehr fällt mir gerade nicht ein woran es liegen könnte.
 

7H0M45

Lt. Junior Grade
Ersteller dieses Themas
Dabei seit
Jan. 2010
Beiträge
459
Der Code Funktioniert auf meinem Rechner, auf meinem Tablet dagegen nicht. In der Zeile wo das Objekt erzeugt werden soll kommt jetzt der Laufzeitfehler -2146232576 "Automatisierungsfehler"

In der Beschreibung ist mir aufgefallen, dass dort eine Referenz auf mscorlib 4.0 64-bit gesetzt werden soll. Ich hab aber so wie es aussieht nur ein 32-bit Windows installiert. Könnte es daran liegen?

Ok. Was ich im Bezug auf den Eingangspost übersehen habe, ist die On-Error-Anweisung. Ich hab die Anweisung jetzt entfernt und es wird auch mit dem alten Code ein Fehler erzeugt.
 

7H0M45

Lt. Junior Grade
Ersteller dieses Themas
Dabei seit
Jan. 2010
Beiträge
459
Die ersten schnellen Tests heute früh sehen gut aus. Ich werd es die Tage mal in meinem finalen Programm testen.
 
Top