UPDATE: FritzBox aus BlitzMax ansprechen
Übersicht BlitzMax, BlitzMax NG Beginners-Corner
MidimasterBetreff: UPDATE: FritzBox aus BlitzMax ansprechen |
Mo, März 08, 2021 11:45 Antworten mit Zitat |
|
---|---|---|
EDIT: ich bin etwas weiter gekommen. Inzwischen habe ich einen MD5 Generator im Internet gefunden, dessen Hash von der Fritzbox akzeptiert wird. (siehe unten)
Ich nutze noch BlitzMax 1.50 und möchte damit die Smarthome Möglichkeiten meiner Fritzbox ansprechen. Dazu gibt es eine Programmierschnittstelle, die schon macht was ich will, wenn ich erst mal eine Session-ID habe. Die besorge ich mir momentan, indem ich mich im Browser auf fritz.box anmelde. Dadurch erhalte ich eine gültige Session-ID. Mit der arbeite dann aus BlitzMax heraus Nun möchte ich natürlich auch den Anmeldeprozess direkt aus BlitzMax durchführen. Dabei kommt das Challenge-Response-Verfahren zur Anwendung. Das geht so: 1. ich frage die FritzBox ohne Parameter: Code: [AUSKLAPPEN] fritz.box/login_sid.lua
als Antwort erhalte ich: Code: [AUSKLAPPEN] <SessionInfo>
<SID>0000000000000000</SID> <Challenge>c4d45d8b</Challenge> <BlockTime>0</BlockTime> <Rights/> </SessionInfo> Nun soll ich aus Challenge und meinem Passwort die nächste URL zusammenbauen: Code: [AUSKLAPPEN] fritz.box/login_sid.lua?username=&response=c4d45d8b-91e5b7b6f354f6ec38ff49a6d62de45d
Dafür muss ein MD5-Hash gebildet werden aus der Challenge und meinem Passwort Der String für den MD5 soll so gebildet werden: Code: [AUSKLAPPEN] Challenge$ + "-" + Passwort$
Die Response soll dann wiederum so aussehen: Code: [AUSKLAPPEN] Challenge$ + "-" + MD5$
Also (wie man denken könnte) alles ganz einfach... aber die FritzBox erteilt daraufhin keine SID, sondern antwortet mit einer neuen Challenge und einem TimeOut Momentan erzeuge ich in BlzuMax nur Strings, die ich dann wieder im Browser reinkopiere und so an die FritzBox sende. Die FritzBox ist aktuell so eingestellt, dass sie nur Passwort aber keinen Usernamen braucht. BlitzMax: [AUSKLAPPEN] MD5$ = MakeMD5(Challenge$ + "-" + Passwort$) Das ist die MD5-Funktion, die ich verwende (im engl. Forum gefunden): BlitzMax: [AUSKLAPPEN] 'entfernt weil fehlerhaft, Damit erhalte ich keinen Zugang! Aber wenn ich den MD5 hier im Internet erzeugen lasse, akzeptiert ihn die FritzBox: https://dencode.com/hash und zwar dann, wenn ich die Methode auf UTF-16LE-MD5 umstelle. Hat hier schon jemand Erfahrungen mit der FritzBox? Wo finde ich einen passenden Algo für BlitzMax? ich habe folgendes BIN Bash für Unix gefunden. Damit soll das Login gelingen. Aber diese Scriptsprache kenne ich leider nicht. Nützt das jemandem was? Code: [AUSKLAPPEN] #!/bin/bash
# Quelle: https://raspberrypiandstuff.wordpress.com/tag/fritzdect/ FBF="http://fritz.box" USER="" PASS="" AIN="" CHALLENGE=$(curl -s "${FBF}/login_sid.lua" | grep -Po '(?<=<Challenge>).*(?=</Challenge>)') MD5=$(echo -n ${CHALLENGE}"-"${PASS} | iconv -f ISO8859-1 -t UTF-16LE | md5sum -b | awk '{print substr($0,1,32)}') RESPONSE="${CHALLENGE}-${MD5}" SID=$(curl -i -s -k -d "response=${RESPONSE}&username=${USER}" "${FBF}" | grep -Po -m 1 '(?<=sid=)[a-f\d]+') TEM |
||
- Zuletzt bearbeitet von Midimaster am Di, März 09, 2021 12:24, insgesamt einmal bearbeitet
XeresModerator |
Mo, März 08, 2021 18:05 Antworten mit Zitat |
|
---|---|---|
Die MD5 Funktion ist falsch implementiert. Laut wikipedia sollte ein leerer string den hash d41d8cd98f00b204e9800998ecf8427e ergeben, bei deinem code bekomme ich aber f8aa48e55de9ae206539bef169d9b56a | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Midimaster |
Di, März 09, 2021 3:19 Antworten mit Zitat |
|
---|---|---|
ich bin ein ganzes Stück weitergekommen.
Ich habe einen zweiten Algo gefunden, der korrekt arbeitet: BlitzMax: [AUSKLAPPEN] Function md5:String(sMessage:String) Damit erziele ich schon mal korrekte Antworten. z.b. müsste eine Beispielsatz wie... Code: [AUSKLAPPEN] The quick brown fox jumps over the lazy dog
...diesen Hash erzeugen: "9e107d9d372bb6826bd81d3542a419d6" Das funktioniert jetzt mit der neuen Funktion einwandfrei. Allerdings erwartet die Fritzbox den UTF-16LE-MD5. Und der ergäbe für den obigen Beispielsatz diesen Hash: "b0986ae6ee1eefee8a4a399090126837" Wenn ich nun den Beispielsatz in einem Text-Edotor als Textdatei mit den Encoding "UTF-16 no BOM" abspeichere und anschließend in BlitzMax lade, dann erhalte ich tatsächlich bereits den erwarteten Hash: BlitzMax: [AUSKLAPPEN]
printet dies: Code: [AUSKLAPPEN] b0986ae6ee1eefee8a4a399090126837
Nur "direkt" will es mir noch nicht gelingen: BlitzMax: [AUSKLAPPEN]
printet dies: Code: [AUSKLAPPEN] 9e107d9d372bb6826bd81d3542a419d6
|
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
MidimasterBetreff: Wieder ein Fortschritt |
Di, März 09, 2021 11:50 Antworten mit Zitat |
|
---|---|---|
Mittlerweile ist es mir gelungen einen String so abzuspeichern und wiederzuladen, dass er bei der MD5-Funktion das gewünschte Ergebnis bringt.
BlitzMax: [AUSKLAPPEN] SuperStrict Der Trick ist, die Bytes des String zwar als UTF-16-LE abzuspeichern, aber nicht den Erkennungsheader (auch BOM genannt) "FF-FE" vorne dran zu stellen. |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
Thunder |
Di, März 09, 2021 12:11 Antworten mit Zitat |
|
---|---|---|
Falls du noch Spaß am Probieren hast, ich glaube dass BlitzMax intern Strings sowieso als UTF-16 abspeichert, daher könntest du eigentlich wenn du direkten Zugriff auf die Rohdaten des Strings bekommst, MD5 darauf anwenden und wenn die Endianess stimmt, sollte auch der richtige Hash rauskommen.
Es gibt intern die Funktion bbStringToWString die einen solchen pointer zurückgibt (müsste meiner meinung nach UTF-16 sein). Der Pointer muss per MemFree freigegeben werden, wenn er nicht mehr gebraucht wird. Siehe: https://github.com/blitz-resea...ing.c#L505 |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
Midimaster |
Di, März 09, 2021 12:19 Antworten mit Zitat |
|
---|---|---|
schon wieder weitergekommen.
BlitzMax: [AUSKLAPPEN] SuperStrict Der String muss in einen "quasi" UTF16 umgewandelt werden, darf aber den Header FF-FE nicht vorneweg bekommen. Dies lässt sich auch direkt mit einem Zwischenspeichern in einem Byte-Array erzeugen. Anschließend ist der String für BlitzMax doppelt so lange und wird eben nicht als UTF16 interpretiert. Wenn ich das jetzt durch den MD5-Algo jage, kommt der erwartete Hash raus! Fertig! |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
Übersicht BlitzMax, BlitzMax NG Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group