Hi zusammen,
um das Thema getrennt vom OTA Firmwareupdate zu behandeln hier ein neuer Thread. Es gibt zwei Ziele:
- Den genauen Algorithmus finden
- Den default AES Key finden
Aktuell wissen wir, dass der Key gehashed (md5) von der Windowssoftware übertragen wird. Die Länge ist somit 32 Byte in Hex = 128Bit.
Folgende Angriffsvektoren haben wir:
- rfd aus der CCU2. Das ist ein C++ Binary mit Debugsymbols das sich gut debuggen lässt. Man kann das generelle Vorgehen gut verstehen. Außerdem spricht es den internen Funkchip der CCU2 an. Ggf ist AES hier anders implementiert als beim USB Stick und HMLAN
- Firmware Update des HM-USB-CFG2. Möglicherweise ist der Key enthalten. Vielleicht liegt er auch im EEPROM. Ggf kann man das EEPROM mit einem selbstgeschrieben Update extrahieren
- Update des HM-CC-TC-DN. Firmware liegt unverschlüsselt vor. Leider ist es ein STM8 Controller und dafür gibt es keinen ordentlichen Debugger. Man sollte die AES Implementierung finden. Der Key kann auch im EEPROM sein
- Update des Regensensors. Möglicherweise ein AVR Controller. Man sollte die AES Implementierung finden. Der Key kann auch im EEPROM sein.
- Ausprobieren. Ggf ist es der md5("") also d41d8cd98f00b204e9800998ecf8427e. Oder md5("eq3") / md5("homematic")
Weitere Ideen?
Gruß,
Jan
Hi,
so dann versuche ich mal Zusammenzufassen, was ich vor einiger Zeit herausgefunden habe:
Zitat von: jab am 12 Februar 2014, 13:51:29
- Den genauen Algorithmus finden
Der Signatur-Algorithmus ist mir immernoch schleierhaft, der Key-Exchange-Algorithmus ist aber ganz normales AES. Wenn man den alten Key kennt und die Funkkommunikation mitschneidet, kann man den KEX entschlüsseln.
Mitgesniffed hatte ich damals den Funkverkehr eines hmcfgusb bei den folgenden Kommandos, wobei sowohl der alte wie auch der neue Key "00000000000000000000000000000000" waren:
SCAB06FA0,00,00000000,01,017F0709,04A00468EA141ED0170102
SCAB06FA0,00,00000000,01,017F0709,04A00468EA141ED0170103
Natürlich habe ich mir nicht den ganzen Funkverkehr aufgehoben, sondern nur die AES-Teile der beiden Messages :-(
"2F029A0991B5C5C77FFD6824D7906AB2", #kex 0000 with 0000 0102 SCAB06FA0,00,00000000,01,017F0709,04A00468EA141ED0170102
"16A3345D535B6285DAA3639836C716D0", #kex 0000 with 0000 0103 SCAB06FA0,00,00000000,01,017F0709,04A00468EA141ED0170103
Das ganze jetzt in Perl entschlüsselt:
#!/usr/bin/perl -w
use Digest::MD5 qw(md5);
my @keys = (
#unpack('H*', md5('')),
"00000000000000000000000000000000",
#...
);
my @msgs = (
"2F029A0991B5C5C77FFD6824D7906AB2", #kex 0000 with 0000 0102 SCAB06FA0,00,00000000,01,017F0709,04A00468EA141ED0170102
"16A3345D535B6285DAA3639836C716D0", #kex 0000 with 0000 0103 SCAB06FA0,00,00000000,01,017F0709,04A00468EA141ED0170103
);
use Crypt::Rijndael;
use Data::Hexdumper;
foreach $key (@keys) {
print "Key: ${key}\n";
my $cipher=Crypt::Rijndael->new(pack("H*", $key), Crypt::Rijndael::MODE_ECB());
foreach my $msg (@msgs) {
my $d = $cipher->decrypt(pack("H*", $msg));
my $e = $cipher->encrypt(pack("H*", $msg));
print "d: ".hexdump($d);
}
}
Führt zu folgendem Ergebnis:
Key: 00000000000000000000000000000000
d: 0x0000 : 01 04 00 00 00 00 00 00 00 00 E8 7E 7E 29 6F A5 : ...........~~)o.
d: 0x0000 : 01 05 00 00 00 00 00 00 00 00 9B FA 7E 29 6F A5 : ............~)o.
Hier sieht man die Übertragung des neuen Keys in den zwei Nachrichten (1. Hälfte und 2. Hälfte des Keys)
Zitat
- rfd aus der CCU2. Das ist ein C++ Binary mit Debugsymbols das sich gut debuggen lässt. Man kann das generelle Vorgehen gut verstehen. Außerdem spricht es den internen Funkchip der CCU2 an. Ggf ist AES hier anders implementiert als beim USB Stick und HMLAN
Das AES steckt bei der CCU2 IIRC im Atmel, der da noch auf dem Mainboard ist. Diesen kann man nicht auslesen, das hatte ich probiert.
Zitat
- Firmware Update des HM-USB-CFG2. Möglicherweise ist der Key enthalten. Vielleicht liegt er auch im EEPROM. Ggf kann man das EEPROM mit einem selbstgeschrieben Update extrahieren
Die extrahierte Firmwaredatei ist kein gültiger ARM-Code, egal wie ich objdump versuche zu überzeugen sie zu lesen. Das Firmwareformat ist das gleiche wie beim HM-CC-RT-DN (Also HEX-Blöcke mit Längenangaben davor).
Zitat
- Update des HM-CC-TC-DN. Firmware liegt unverschlüsselt vor. Leider ist es ein STM8 Controller und dafür gibt es keinen ordentlichen Debugger. Man sollte die AES Implementierung finden. Der Key kann auch im EEPROM sein
Ich würde mich sehr freuen, wenn das Ding wirklich unverschlüsselt ist.
Zitat
- Ausprobieren. Ggf ist es der md5("") also d41d8cd98f00b204e9800998ecf8427e. Oder md5("eq3") / md5("homematic")
Die meisten offensichtlichen (also auch die drei) hatte ich damals ausprobiert, indem ich versucht habe die KEX vom Default-Key auf "00000000000000000000000000000000" zu entschlüsseln. Hat alles nicht geklappt. Der d41d... wäre ja auch zu einfach, der wird vom rfd ja beim starten gesetzt.
Gruß
Michael
Moin Michael,
[quote author=mgernoth link=topic=20121.msg136802#msg136802 date=1392213030]
Das AES steckt bei der CCU2 IIRC im Atmel, der da noch auf dem Mainboard ist. Diesen kann man nicht auslesen, das hatte ich probiert.
Schade. Müssen wir im Notfall wohl mal jemanden mit FIB besuchen und die Fuses kippen. Das ist allerdings eine längere Aktion.
Zitat von: mgernoth am 12 Februar 2014, 14:50:30
Die extrahierte Firmwaredatei ist kein gültiger ARM-Code, egal wie ich objdump versuche zu überzeugen sie zu lesen. Das Firmwareformat ist das gleiche wie beim HM-CC-RT-DN (Also HEX-Blöcke mit Längenangaben davor).
Ich würde mich sehr freuen, wenn das Ding wirklich unverschlüsselt ist.
Der Debugger findet Funktionen und Functioncalls. Ich habe mal spaßeshalber bei jedem Block ein Byte am Ende weggeschnitten und dann findet der Debugger gar nichts mehr. Von daher sieht mir das sehr intakt aus.
Zitat von: mgernoth am 12 Februar 2014, 14:50:30
Die meisten offensichtlichen (also auch die drei) hatte ich damals ausprobiert, indem ich versucht habe die KEX vom Default-Key auf "00000000000000000000000000000000" zu entschlüsseln. Hat alles nicht geklappt. Der d41d... wäre ja auch zu einfach, der wird vom rfd ja beim starten gesetzt.
d41d8cd98f00b204e9800998ecf8427e wird vom RFD gesetzt? Dann haben wir doch den default Key oder nicht?
Ich gucke mir später mal HM-CFG-USB2 an.
Gruß,
Jan
Hi,
Zitat von: jab am 12 Februar 2014, 15:04:41
Der Debugger findet Funktionen und Functioncalls. Ich habe mal spaßeshalber bei jedem Block ein Byte am Ende weggeschnitten und dann findet der Debugger gar nichts mehr. Von daher sieht mir das sehr intakt aus.
Welchen Debugger für STM8 benutzt Du?
Zitat
d41d8cd98f00b204e9800998ecf8427e wird vom RFD gesetzt?
Ja, wenn man einen hmland an eine ccu2 koppelt kann man im Debug folgendes bewundern:
LAN > Y03,00,D41D8CD98F00B204E9800998ECF8427E
Zitat
Dann haben wir doch den default Key oder nicht?
Dann hätte ich damit den KEX von Default auf was anderes entschlüsseln können müssen, das ging aber leider nicht.
Zitat
Ich gucke mir später mal HM-CFG-USB2 an.
Hoffentlich hast Du mehr Glück.
Gruß
Michael
Zitat von: jab am 12 Februar 2014, 13:51:29- Update des HM-CC-TC-DN. Firmware liegt unverschlüsselt vor.
Um keine Verwirrung zu stiften: Du meinst sicher den HM-CC-RT-DN ;)
Hat sich eigentlich mal jemand Gedanken darüber gemacht, ob es einen Zusammenhang zwischen HM-Id, Seriennummer und dem Default-AES-Key geben könnte?
Zitat von: jab am 12 Februar 2014, 15:04:41
Schade. Müssen wir im Notfall wohl mal jemanden mit FIB besuchen und die Fuses kippen. Das ist allerdings eine längere Aktion.
Mir ist gerade wieder eingefallen, dass das Firmware-Update für den Atmel im Filesystem der CCU2 liegt...
[/mnt/firmware]# ls -l
...
-rwxr-xr-x 1 root root 57880 Feb 4 10:09 coprocessor_update.eq3
...
Evtl. ist das ja einfach Plain :-)
Gruß
Michael
Zitat von: jab am 12 Februar 2014, 13:51:29- Update des Regensensors. Möglicherweise ein AVR Controller.
Nein, ein STM8L151C8U6
Man könnte theoretisch 2 eeprom Inhalte von den Unterputz-Funkschaltern vergleichen, indem man bei beiden sign aktiviert, zwei unterschiedliche Schlüssel anlernt, alle sonstigen register gleich setzt und dann eine custom firmware installiert die das eeprom ausliest und seriell ausgibt, wie jab schon vorgeschlagen hat. Danach kann man dann zwar nur noch die FW von jab installieren, aber da existiert wenigstens schon etwas das annähernd fertig ist.
Noch besser wären 3 Aktoren , 2 mit gleichem bekannten AES key und einer mit dem default AES key. Weil ja auch bei gleichem AES key unterschiedet sich ja der EEPROM inhalt wegen der unterschiedlichen Seriennnumer und HMID, so kann man das etwas eingrenzen was die Seriennummer ist.
Sobald die Firmware perfekt ist, will ich ohnehin noch drei weitere dieser Aktoren neu flashen.
Grüße
Moin,
@Michael:
ja habe ich mir gerade auch angesehen. Das liegt da. Ich bin mir aktuell nicht mehr so 100% sicher ob das plain ist oder nicht. Die Entropie ist wirklich fast maximal bei dem Ding (siehe Bild). Allerdings ist die bei der Asksin Firmware auch nicht viel drunter (schon etwas aber da sind auch noch Strings für Serialausgabe drin). Der Debugger mag die Firmware auch.
@Samsi: Das funktioniert nur wenn die EESave Fuse gesetzt ist. Ansonsten ist das interne EEPROM beim programmieren weg. Allerdings gibt es auf manchen Geräten ein externes. Da kommt man sicher dran. Das nutzen wir aktuell in der Customfirmware auch nicht. Ich sollte das auf meinen Geräten auslesen können.
Ich habe mir gerade mal rfd angesehen. AES wird im CFB Mode verwendet (http://de.wikipedia.org/wiki/Cipher_Feedback_Mode). Die Methode um den Key zu generieren ist gigantisch. Viel memcpy und ganz am Anfang spielt er definitiv mit der Serial Number.
Ansonsten kann RFChannel im rfd auch AES sprechen. Und die Funktionen sind einfach:
.text:0002B654 ; AES_encrypt_block(unsigned char *, unsigned char *)
.text:0002B654 EXPORT _Z17AES_encrypt_blockPhS_
.text:0002B654 _Z17AES_encrypt_blockPhS_ ; CODE XREF: RFChannel::performCBCAuthentification(BidcosFrame &)+280p
.text:0002B654 ; RFChannel::performCBCAuthentification(BidcosFrame &)+724p
.text:0002B654
.text:0002B654 var_40 = -0x40
.text:0002B654 var_3C = -0x3C
.text:0002B654 var_38 = -0x38
.text:0002B654 var_34 = -0x34
.text:0002B654 var_30 = -0x30
.text:0002B654 var_2C = -0x2C
.text:0002B654
.text:0002B654 STMFD SP!, {R4-R11,LR}
.text:0002B658 LDRB R3, [R0,#9]
.text:0002B65C LDRB R5, [R0,#0xA]
.text:0002B660 SUB SP, SP, #0x1C
.text:0002B664 LDR R4, =_ZL10CurrentKey ; CurrentKey
.text:0002B668 LDRB LR, [R0,#4]
.text:0002B66C STR R3, [SP,#0x40+var_40]
.text:0002B670 STR R5, [SP,#0x40+var_3C]
.text:0002B674 LDRB R3, [R0,#0xB]
.text:0002B678 LDRB R5, [R0,#0xC]
.text:0002B67C LDRB R12, [R0,#5]
.text:0002B680 LDRB R2, [R0,#6]
.text:0002B684 LDRB R10, [R0]
.text:0002B688 LDRB R8, [R0,#1]
.text:0002B68C LDRB R7, [R0,#2]
.text:0002B690 LDRB R6, [R0,#3]
.text:0002B694 LDRB R9, [R0,#7]
.text:0002B698 LDRB R11, [R0,#8]
.text:0002B69C STRB LR, [R4,#(_ZL5State+1 - 0x9DA98)]
.text:0002B6A0 STR R3, [SP,#0x40+var_38]
.text:0002B6A4 LDR LR, [SP,#0x40+var_40]
.text:0002B6A8 LDRB R3, [R0,#0xD]
.text:0002B6AC STR R5, [SP,#0x40+var_34]
.text:0002B6B0 LDRB R5, [R0,#0xE]
.text:0002B6B4 STRB R12, [R4,#(_ZL5State+5 - 0x9DA98)]
.text:0002B6B8 STRB R2, [R4,#(_ZL5State+9 - 0x9DA98)]
.text:0002B6BC STRB R10, [R4,#(_ZL5State - 0x9DA98)] ; State
.text:0002B6C0 STRB R8, [R4,#(_ZL5State+4 - 0x9DA98)]
.text:0002B6C4 STRB R7, [R4,#(_ZL5State+8 - 0x9DA98)]
.text:0002B6C8 STRB R6, [R4,#(_ZL5State+0xC - 0x9DA98)]
.text:0002B6CC STRB R9, [R4,#(_ZL5State+0xD - 0x9DA98)]
.text:0002B6D0 STRB R11, [R4,#(_ZL5State+2 - 0x9DA98)]
.text:0002B6D4 STR R3, [SP,#0x40+var_30]
.text:0002B6D8 STR R5, [SP,#0x40+var_2C]
.text:0002B6DC LDRB R3, [R0,#0xF]
.text:0002B6E0 STRB LR, [R4,#(_ZL5State+6 - 0x9DA98)]
.text:0002B6E4 LDR R10, [SP,#0x40+var_3C]
.text:0002B6E8 LDR R9, [SP,#0x40+var_38]
.text:0002B6EC LDR R8, [SP,#0x40+var_34]
.text:0002B6F0 LDR R7, [SP,#0x40+var_30]
.text:0002B6F4 LDR R6, [SP,#0x40+var_2C]
.text:0002B6F8 STRB R3, [R4,#(_ZL5State+0xF - 0x9DA98)]
.text:0002B6FC MOV R0, #0
.text:0002B700 STRB R10, [R4,#(_ZL5State+0xA - 0x9DA98)]
.text:0002B704 STRB R9, [R4,#(_ZL5State+0xE - 0x9DA98)]
.text:0002B708 STRB R8, [R4,#(_ZL5State+3 - 0x9DA98)]
.text:0002B70C STRB R7, [R4,#(_ZL5State+7 - 0x9DA98)]
.text:0002B710 STRB R6, [R4,#(_ZL5State+0xB - 0x9DA98)]
.text:0002B714 MOV R5, R1
.text:0002B718 BL _ZL8LoadKeysh ; LoadKeys(uchar)
.text:0002B71C BL _ZL11AddRoundKeyv ; AddRoundKey(void)
.text:0002B720 BL _Z8SubBytesv ; SubBytes(void)
.text:0002B724 BL _Z9ShiftRowsv ; ShiftRows(void)
.text:0002B728 BL _Z10MixColumnsv ; MixColumns(void)
.text:0002B72C MOV R0, #1
.text:0002B730 BL _ZL8LoadKeysh ; LoadKeys(uchar)
.text:0002B734 BL _ZL11AddRoundKeyv ; AddRoundKey(void)
.text:0002B738 BL _Z8SubBytesv ; SubBytes(void)
.text:0002B73C BL _Z9ShiftRowsv ; ShiftRows(void)
.text:0002B740 BL _Z10MixColumnsv ; MixColumns(void)
.text:0002B744 MOV R0, #2
.text:0002B748 BL _ZL8LoadKeysh ; LoadKeys(uchar)
.text:0002B74C BL _ZL11AddRoundKeyv ; AddRoundKey(void)
.text:0002B750 BL _Z8SubBytesv ; SubBytes(void)
.text:0002B754 BL _Z9ShiftRowsv ; ShiftRows(void)
.text:0002B758 BL _Z10MixColumnsv ; MixColumns(void)
.text:0002B75C MOV R0, #3
.text:0002B760 BL _ZL8LoadKeysh ; LoadKeys(uchar)
.text:0002B764 BL _ZL11AddRoundKeyv ; AddRoundKey(void)
.text:0002B768 BL _Z8SubBytesv ; SubBytes(void)
.text:0002B76C BL _Z9ShiftRowsv ; ShiftRows(void)
.text:0002B770 BL _Z10MixColumnsv ; MixColumns(void)
.text:0002B774 MOV R0, #4
.text:0002B778 BL _ZL8LoadKeysh ; LoadKeys(uchar)
.text:0002B77C BL _ZL11AddRoundKeyv ; AddRoundKey(void)
.text:0002B780 BL _Z8SubBytesv ; SubBytes(void)
.text:0002B784 BL _Z9ShiftRowsv ; ShiftRows(void)
.text:0002B788 BL _Z10MixColumnsv ; MixColumns(void)
.text:0002B78C MOV R0, #5
.text:0002B790 BL _ZL8LoadKeysh ; LoadKeys(uchar)
.text:0002B794 BL _ZL11AddRoundKeyv ; AddRoundKey(void)
.text:0002B798 BL _Z8SubBytesv ; SubBytes(void)
.text:0002B79C BL _Z9ShiftRowsv ; ShiftRows(void)
.text:0002B7A0 BL _Z10MixColumnsv ; MixColumns(void)
.text:0002B7A4 MOV R0, #6
.text:0002B7A8 BL _ZL8LoadKeysh ; LoadKeys(uchar)
.text:0002B7AC BL _ZL11AddRoundKeyv ; AddRoundKey(void)
.text:0002B7B0 BL _Z8SubBytesv ; SubBytes(void)
.text:0002B7B4 BL _Z9ShiftRowsv ; ShiftRows(void)
.text:0002B7B8 BL _Z10MixColumnsv ; MixColumns(void)
.text:0002B7BC MOV R0, #7
.text:0002B7C0 BL _ZL8LoadKeysh ; LoadKeys(uchar)
.text:0002B7C4 BL _ZL11AddRoundKeyv ; AddRoundKey(void)
.text:0002B7C8 BL _Z8SubBytesv ; SubBytes(void)
.text:0002B7CC BL _Z9ShiftRowsv ; ShiftRows(void)
.text:0002B7D0 BL _Z10MixColumnsv ; MixColumns(void)
.text:0002B7D4 MOV R0, #8
.text:0002B7D8 BL _ZL8LoadKeysh ; LoadKeys(uchar)
.text:0002B7DC BL _ZL11AddRoundKeyv ; AddRoundKey(void)
.text:0002B7E0 BL _Z8SubBytesv ; SubBytes(void)
.text:0002B7E4 BL _Z9ShiftRowsv ; ShiftRows(void)
.text:0002B7E8 BL _Z10MixColumnsv ; MixColumns(void)
.text:0002B7EC MOV R0, #9
.text:0002B7F0 BL _ZL8LoadKeysh ; LoadKeys(uchar)
.text:0002B7F4 BL _ZL11AddRoundKeyv ; AddRoundKey(void)
.text:0002B7F8 BL _Z8SubBytesv ; SubBytes(void)
.text:0002B7FC BL _Z9ShiftRowsv ; ShiftRows(void)
.text:0002B800 MOV R0, #0xA
.text:0002B804 BL _ZL8LoadKeysh ; LoadKeys(uchar)
.text:0002B808 BL _ZL11AddRoundKeyv ; AddRoundKey(void)
.text:0002B80C LDRB R3, [R4,#(_ZL5State+0xE - 0x9DA98)]
.text:0002B810 LDRB R11, [R4,#(_ZL5State+6 - 0x9DA98)]
.text:0002B814 STR R3, [SP,#0x40+var_40]
.text:0002B818 LDRB R3, [R4,#(_ZL5State+3 - 0x9DA98)]
.text:0002B81C LDRB R12, [R4,#(_ZL5State+5 - 0x9DA98)]
.text:0002B820 LDRB R1, [R4,#(_ZL5State+0xD - 0x9DA98)]
.text:0002B824 STR R3, [SP,#0x40+var_3C]
.text:0002B828 LDRB R3, [R4,#(_ZL5State+7 - 0x9DA98)]
.text:0002B82C STR R11, [SP,#0x40+var_30]
.text:0002B830 LDRB R0, [R4,#(_ZL5State+9 - 0x9DA98)]
.text:0002B834 LDRB R2, [R4,#(_ZL5State+2 - 0x9DA98)]
.text:0002B838 LDRB R9, [R4,#(_ZL5State - 0x9DA98)] ; State
.text:0002B83C LDRB R10, [R4,#(_ZL5State+4 - 0x9DA98)]
.text:0002B840 LDRB R8, [R4,#(_ZL5State+8 - 0x9DA98)]
.text:0002B844 LDRB R7, [R4,#(_ZL5State+0xC - 0x9DA98)]
.text:0002B848 LDRB R6, [R4,#(_ZL5State+1 - 0x9DA98)]
.text:0002B84C LDRB R11, [R4,#(_ZL5State+0xA - 0x9DA98)]
.text:0002B850 STR R3, [SP,#0x40+var_38]
.text:0002B854 STRB R12, [R5,#5]
.text:0002B858 LDRB R3, [R4,#(_ZL5State+0xB - 0x9DA98)]
.text:0002B85C STRB R1, [R5,#7]
.text:0002B860 LDR R12, [SP,#0x40+var_30]
.text:0002B864 LDR R1, [SP,#0x40+var_40]
.text:0002B868 STR R3, [SP,#0x40+var_34]
.text:0002B86C LDRB R4, [R4,#(_ZL5State+0xF - 0x9DA98)]
.text:0002B870 STRB R0, [R5,#6]
.text:0002B874 STRB R2, [R5,#8]
.text:0002B878 STRB R9, [R5]
.text:0002B87C STRB R10, [R5,#1]
.text:0002B880 STRB R8, [R5,#2]
.text:0002B884 STRB R7, [R5,#3]
.text:0002B888 STRB R6, [R5,#4]
.text:0002B88C STRB R12, [R5,#9]
.text:0002B890 STRB R11, [R5,#0xA]
.text:0002B894 STRB R1, [R5,#0xB]
.text:0002B898 LDR R0, [SP,#0x40+var_3C]
.text:0002B89C LDR R3, [SP,#0x40+var_38]
.text:0002B8A0 LDR R2, [SP,#0x40+var_34]
.text:0002B8A4 STRB R0, [R5,#0xC]
.text:0002B8A8 STRB R3, [R5,#0xD]
.text:0002B8AC STRB R2, [R5,#0xE]
.text:0002B8B0 STRB R4, [R5,#0xF]
.text:0002B8B4 ADD SP, SP, #0x1C
.text:0002B8B8 LDMFD SP!, {R4-R11,PC}
.text:0002B8B8 ; End of function AES_encrypt_block(uchar *,uchar *)
.text:0002C878 ; AES_decrypt_block(unsigned char *, unsigned char *)
.text:0002C878 EXPORT _Z17AES_decrypt_blockPhS_
.text:0002C878 _Z17AES_decrypt_blockPhS_
.text:0002C878
.text:0002C878 var_40 = -0x40
.text:0002C878 var_3C = -0x3C
.text:0002C878 var_38 = -0x38
.text:0002C878 var_34 = -0x34
.text:0002C878 var_30 = -0x30
.text:0002C878 var_2C = -0x2C
.text:0002C878
.text:0002C878 STMFD SP!, {R4-R11,LR}
.text:0002C87C LDRB R3, [R0,#9]
.text:0002C880 LDRB R5, [R0,#0xA]
.text:0002C884 SUB SP, SP, #0x1C
.text:0002C888 LDR R4, =_ZL10CurrentKey ; CurrentKey
.text:0002C88C LDRB LR, [R0,#4]
.text:0002C890 STR R3, [SP,#0x40+var_40]
.text:0002C894 STR R5, [SP,#0x40+var_3C]
.text:0002C898 LDRB R3, [R0,#0xB]
.text:0002C89C LDRB R5, [R0,#0xC]
.text:0002C8A0 LDRB R12, [R0,#5]
.text:0002C8A4 LDRB R2, [R0,#6]
.text:0002C8A8 LDRB R10, [R0]
.text:0002C8AC LDRB R8, [R0,#1]
.text:0002C8B0 LDRB R7, [R0,#2]
.text:0002C8B4 LDRB R6, [R0,#3]
.text:0002C8B8 LDRB R9, [R0,#7]
.text:0002C8BC LDRB R11, [R0,#8]
.text:0002C8C0 STRB LR, [R4,#(_ZL5State+1 - 0x9DA98)]
.text:0002C8C4 STR R3, [SP,#0x40+var_38]
.text:0002C8C8 LDR LR, [SP,#0x40+var_40]
.text:0002C8CC LDRB R3, [R0,#0xD]
.text:0002C8D0 STR R5, [SP,#0x40+var_34]
.text:0002C8D4 LDRB R5, [R0,#0xE]
.text:0002C8D8 STRB R12, [R4,#(_ZL5State+5 - 0x9DA98)]
.text:0002C8DC STRB R2, [R4,#(_ZL5State+9 - 0x9DA98)]
.text:0002C8E0 STRB R10, [R4,#(_ZL5State - 0x9DA98)] ; State
.text:0002C8E4 STRB R8, [R4,#(_ZL5State+4 - 0x9DA98)]
.text:0002C8E8 STRB R7, [R4,#(_ZL5State+8 - 0x9DA98)]
.text:0002C8EC STRB R6, [R4,#(_ZL5State+0xC - 0x9DA98)]
.text:0002C8F0 STRB R9, [R4,#(_ZL5State+0xD - 0x9DA98)]
.text:0002C8F4 STRB R11, [R4,#(_ZL5State+2 - 0x9DA98)]
.text:0002C8F8 STR R3, [SP,#0x40+var_30]
.text:0002C8FC STR R5, [SP,#0x40+var_2C]
.text:0002C900 LDRB R3, [R0,#0xF]
.text:0002C904 STRB LR, [R4,#(_ZL5State+6 - 0x9DA98)]
.text:0002C908 LDR R10, [SP,#0x40+var_3C]
.text:0002C90C LDR R9, [SP,#0x40+var_38]
.text:0002C910 LDR R8, [SP,#0x40+var_34]
.text:0002C914 LDR R7, [SP,#0x40+var_30]
.text:0002C918 LDR R6, [SP,#0x40+var_2C]
.text:0002C91C STRB R3, [R4,#(_ZL5State+0xF - 0x9DA98)]
.text:0002C920 MOV R0, #0xA
.text:0002C924 STRB R10, [R4,#(_ZL5State+0xA - 0x9DA98)]
.text:0002C928 STRB R9, [R4,#(_ZL5State+0xE - 0x9DA98)]
.text:0002C92C STRB R8, [R4,#(_ZL5State+3 - 0x9DA98)]
.text:0002C930 STRB R7, [R4,#(_ZL5State+7 - 0x9DA98)]
.text:0002C934 STRB R6, [R4,#(_ZL5State+0xB - 0x9DA98)]
.text:0002C938 MOV R5, R1
.text:0002C93C BL _ZL8LoadKeysh ; LoadKeys(uchar)
.text:0002C940 BL _ZL11AddRoundKeyv ; AddRoundKey(void)
.text:0002C944 BL _Z12InvShiftRowsv ; InvShiftRows(void)
.text:0002C948 BL _Z11InvSubBytesv ; InvSubBytes(void)
.text:0002C94C MOV R0, #9
.text:0002C950 BL _ZL8LoadKeysh ; LoadKeys(uchar)
.text:0002C954 BL _ZL11AddRoundKeyv ; AddRoundKey(void)
.text:0002C958 BL _Z13InvMixColumnsv ; InvMixColumns(void)
.text:0002C95C BL _Z12InvShiftRowsv ; InvShiftRows(void)
.text:0002C960 BL _Z11InvSubBytesv ; InvSubBytes(void)
.text:0002C964 MOV R0, #8
.text:0002C968 BL _ZL8LoadKeysh ; LoadKeys(uchar)
.text:0002C96C BL _ZL11AddRoundKeyv ; AddRoundKey(void)
.text:0002C970 BL _Z13InvMixColumnsv ; InvMixColumns(void)
.text:0002C974 BL _Z12InvShiftRowsv ; InvShiftRows(void)
.text:0002C978 BL _Z11InvSubBytesv ; InvSubBytes(void)
.text:0002C97C MOV R0, #7
.text:0002C980 BL _ZL8LoadKeysh ; LoadKeys(uchar)
.text:0002C984 BL _ZL11AddRoundKeyv ; AddRoundKey(void)
.text:0002C988 BL _Z13InvMixColumnsv ; InvMixColumns(void)
.text:0002C98C BL _Z12InvShiftRowsv ; InvShiftRows(void)
.text:0002C990 BL _Z11InvSubBytesv ; InvSubBytes(void)
.text:0002C994 MOV R0, #6
.text:0002C998 BL _ZL8LoadKeysh ; LoadKeys(uchar)
.text:0002C99C BL _ZL11AddRoundKeyv ; AddRoundKey(void)
.text:0002C9A0 BL _Z13InvMixColumnsv ; InvMixColumns(void)
.text:0002C9A4 BL _Z12InvShiftRowsv ; InvShiftRows(void)
.text:0002C9A8 BL _Z11InvSubBytesv ; InvSubBytes(void)
.text:0002C9AC MOV R0, #5
.text:0002C9B0 BL _ZL8LoadKeysh ; LoadKeys(uchar)
.text:0002C9B4 BL _ZL11AddRoundKeyv ; AddRoundKey(void)
.text:0002C9B8 BL _Z13InvMixColumnsv ; InvMixColumns(void)
.text:0002C9BC BL _Z12InvShiftRowsv ; InvShiftRows(void)
.text:0002C9C0 BL _Z11InvSubBytesv ; InvSubBytes(void)
.text:0002C9C4 MOV R0, #4
.text:0002C9C8 BL _ZL8LoadKeysh ; LoadKeys(uchar)
.text:0002C9CC BL _ZL11AddRoundKeyv ; AddRoundKey(void)
.text:0002C9D0 BL _Z13InvMixColumnsv ; InvMixColumns(void)
.text:0002C9D4 BL _Z12InvShiftRowsv ; InvShiftRows(void)
.text:0002C9D8 BL _Z11InvSubBytesv ; InvSubBytes(void)
.text:0002C9DC MOV R0, #3
.text:0002C9E0 BL _ZL8LoadKeysh ; LoadKeys(uchar)
.text:0002C9E4 BL _ZL11AddRoundKeyv ; AddRoundKey(void)
.text:0002C9E8 BL _Z13InvMixColumnsv ; InvMixColumns(void)
.text:0002C9EC BL _Z12InvShiftRowsv ; InvShiftRows(void)
.text:0002C9F0 BL _Z11InvSubBytesv ; InvSubBytes(void)
.text:0002C9F4 MOV R0, #2
.text:0002C9F8 BL _ZL8LoadKeysh ; LoadKeys(uchar)
.text:0002C9FC BL _ZL11AddRoundKeyv ; AddRoundKey(void)
.text:0002CA00 BL _Z13InvMixColumnsv ; InvMixColumns(void)
.text:0002CA04 BL _Z12InvShiftRowsv ; InvShiftRows(void)
.text:0002CA08 BL _Z11InvSubBytesv ; InvSubBytes(void)
.text:0002CA0C MOV R0, #1
.text:0002CA10 BL _ZL8LoadKeysh ; LoadKeys(uchar)
.text:0002CA14 BL _ZL11AddRoundKeyv ; AddRoundKey(void)
.text:0002CA18 BL _Z13InvMixColumnsv ; InvMixColumns(void)
.text:0002CA1C BL _Z12InvShiftRowsv ; InvShiftRows(void)
.text:0002CA20 BL _Z11InvSubBytesv ; InvSubBytes(void)
.text:0002CA24 MOV R0, #0
.text:0002CA28 BL _ZL8LoadKeysh ; LoadKeys(uchar)
.text:0002CA2C BL _ZL11AddRoundKeyv ; AddRoundKey(void)
.text:0002CA30 LDRB R3, [R4,#(_ZL5State+0xE - 0x9DA98)]
.text:0002CA34 LDRB R11, [R4,#(_ZL5State+6 - 0x9DA98)]
.text:0002CA38 STR R3, [SP,#0x40+var_40]
.text:0002CA3C LDRB R3, [R4,#(_ZL5State+3 - 0x9DA98)]
.text:0002CA40 LDRB R12, [R4,#(_ZL5State+5 - 0x9DA98)]
.text:0002CA44 LDRB R1, [R4,#(_ZL5State+0xD - 0x9DA98)]
.text:0002CA48 STR R3, [SP,#0x40+var_3C]
.text:0002CA4C LDRB R3, [R4,#(_ZL5State+7 - 0x9DA98)]
.text:0002CA50 STR R11, [SP,#0x40+var_30]
.text:0002CA54 LDRB R0, [R4,#(_ZL5State+9 - 0x9DA98)]
.text:0002CA58 LDRB R2, [R4,#(_ZL5State+2 - 0x9DA98)]
.text:0002CA5C LDRB R9, [R4,#(_ZL5State - 0x9DA98)] ; State
.text:0002CA60 LDRB R10, [R4,#(_ZL5State+4 - 0x9DA98)]
.text:0002CA64 LDRB R8, [R4,#(_ZL5State+8 - 0x9DA98)]
.text:0002CA68 LDRB R7, [R4,#(_ZL5State+0xC - 0x9DA98)]
.text:0002CA6C LDRB R6, [R4,#(_ZL5State+1 - 0x9DA98)]
.text:0002CA70 LDRB R11, [R4,#(_ZL5State+0xA - 0x9DA98)]
.text:0002CA74 STR R3, [SP,#0x40+var_38]
.text:0002CA78 STRB R12, [R5,#5]
.text:0002CA7C LDRB R3, [R4,#(_ZL5State+0xB - 0x9DA98)]
.text:0002CA80 STRB R1, [R5,#7]
.text:0002CA84 LDR R12, [SP,#0x40+var_30]
.text:0002CA88 LDR R1, [SP,#0x40+var_40]
.text:0002CA8C STR R3, [SP,#0x40+var_34]
.text:0002CA90 LDRB R4, [R4,#(_ZL5State+0xF - 0x9DA98)]
.text:0002CA94 STRB R0, [R5,#6]
.text:0002CA98 STRB R2, [R5,#8]
.text:0002CA9C STRB R9, [R5]
.text:0002CAA0 STRB R10, [R5,#1]
.text:0002CAA4 STRB R8, [R5,#2]
.text:0002CAA8 STRB R7, [R5,#3]
.text:0002CAAC STRB R6, [R5,#4]
.text:0002CAB0 STRB R12, [R5,#9]
.text:0002CAB4 STRB R11, [R5,#0xA]
.text:0002CAB8 STRB R1, [R5,#0xB]
.text:0002CABC LDR R0, [SP,#0x40+var_3C]
.text:0002CAC0 LDR R3, [SP,#0x40+var_38]
.text:0002CAC4 LDR R2, [SP,#0x40+var_34]
.text:0002CAC8 STRB R0, [R5,#0xC]
.text:0002CACC STRB R3, [R5,#0xD]
.text:0002CAD0 STRB R2, [R5,#0xE]
.text:0002CAD4 STRB R4, [R5,#0xF]
.text:0002CAD8 ADD SP, SP, #0x1C
.text:0002CADC LDMFD SP!, {R4-R11,PC}
.text:0002CADC ; End of function AES_decrypt_block(uchar *,uchar *)
.text:0002AD24 ; AES_inti_key(unsigned char *)
.text:0002AD24 EXPORT _Z12AES_inti_keyPh
.text:0002AD24 _Z12AES_inti_keyPh ; CODE XREF: RFChannel::performCBCAuthentification(BidcosFrame &)+268p
.text:0002AD24 ; RFChannel::performCBCAuthentification(BidcosFrame &)+70Cp
.text:0002AD24
.text:0002AD24 var_E8 = -0xE8
.text:0002AD24 var_E4 = -0xE4
.text:0002AD24 var_E0 = -0xE0
.text:0002AD24 var_DC = -0xDC
.text:0002AD24 var_D8 = -0xD8
.text:0002AD24 var_D4 = -0xD4
.text:0002AD24 var_D0 = -0xD0
.text:0002AD24 var_CF = -0xCF
.text:0002AD24 var_CE = -0xCE
.text:0002AD24 var_CD = -0xCD
.text:0002AD24 var_CC = -0xCC
.text:0002AD24 var_CB = -0xCB
.text:0002AD24 var_CA = -0xCA
.text:0002AD24 var_C9 = -0xC9
.text:0002AD24 var_C8 = -0xC8
.text:0002AD24 var_C7 = -0xC7
.text:0002AD24 var_C6 = -0xC6
.text:0002AD24 var_C5 = -0xC5
.text:0002AD24 var_C4 = -0xC4
.text:0002AD24 var_C3 = -0xC3
.text:0002AD24 var_C2 = -0xC2
.text:0002AD24 var_C1 = -0xC1
.text:0002AD24
.text:0002AD24 STMFD SP!, {R4-R11}
.text:0002AD28 LDRB R2, [R0,#9]
.text:0002AD2C LDRB R7, [R0,#3]
.text:0002AD30 LDRB R1, [R0,#0xA]
.text:0002AD34 LDRB R3, [R0,#0xB]
.text:0002AD38 SUB SP, SP, #0xC8
.text:0002AD3C STR R2, [SP,#0xE8+var_E8]
.text:0002AD40 LDRB R8, [R0,#2]
.text:0002AD44 LDRB R6, [R0,#4]
.text:0002AD48 LDRB R5, [R0,#5]
.text:0002AD4C LDRB R4, [R0,#6]
.text:0002AD50 LDRB R12, [R0,#7]
.text:0002AD54 LDRB R2, [R0,#0xC]
.text:0002AD58 LDRB R9, [R0]
.text:0002AD5C LDRB R10, [R0,#1]
.text:0002AD60 LDRB R11, [R0,#8]
.text:0002AD64 STR R1, [SP,#0xE8+var_E4]
.text:0002AD68 STR R3, [SP,#0xE8+var_E0]
.text:0002AD6C LDRB R1, [R0,#0xD]
.text:0002AD70 LDRB R3, [R0,#0xE]
.text:0002AD74 STRB R7, [SP,#0xE8+var_CD]
.text:0002AD78 LDR R7, [SP,#0xE8+var_E8]
.text:0002AD7C STR R2, [SP,#0xE8+var_DC]
.text:0002AD80 STR R1, [SP,#0xE8+var_D8]
.text:0002AD84 STR R3, [SP,#0xE8+var_D4]
.text:0002AD88 LDRB R0, [R0,#0xF]
.text:0002AD8C STRB R8, [SP,#0xE8+var_CE]
.text:0002AD90 STRB R6, [SP,#0xE8+var_CC]
.text:0002AD94 STRB R5, [SP,#0xE8+var_CB]
.text:0002AD98 STRB R4, [SP,#0xE8+var_CA]
.text:0002AD9C STRB R12, [SP,#0xE8+var_C9]
.text:0002ADA0 STRB R9, [SP,#0xE8+var_D0]
.text:0002ADA4 STRB R10, [SP,#0xE8+var_CF]
.text:0002ADA8 STRB R11, [SP,#0xE8+var_C8]
.text:0002ADAC LDR R1, =_ZTI9RFChannel ; `typeinfo for'RFChannel
.text:0002ADB0 STRB R7, [SP,#0xE8+var_C7]
.text:0002ADB4 LDR R5, [SP,#0xE8+var_E4]
.text:0002ADB8 LDR R6, [SP,#0xE8+var_E0]
.text:0002ADBC LDR R8, [SP,#0xE8+var_DC]
.text:0002ADC0 LDR R12, [SP,#0xE8+var_D8]
.text:0002ADC4 LDR R4, [SP,#0xE8+var_D4]
.text:0002ADC8 ADD R3, SP, #0xE8+var_D0
.text:0002ADCC MOV R2, #4
.text:0002ADD0 STRB R5, [SP,#0xE8+var_C6]
.text:0002ADD4 STRB R6, [SP,#0xE8+var_C5]
.text:0002ADD8 STRB R8, [SP,#0xE8+var_C4]
.text:0002ADDC STRB R12, [SP,#0xE8+var_C3]
.text:0002ADE0 STRB R4, [SP,#0xE8+var_C2]
.text:0002ADE4 STRB R0, [SP,#0xE8+var_C1]
.text:0002ADE8
.text:0002ADE8 loc_2ADE8 ; CODE XREF: AES_inti_key(uchar *)+1E4j
.text:0002ADE8 ADD R6, SP, #0xE8+var_D0
.text:0002ADEC SUB R5, R2, #1
.text:0002ADF0 LDRB R7, [R6,R5,LSL#2]
.text:0002ADF4 ADD R11, R6, R5,LSL#2
.text:0002ADF8 ADD R4, R1, R7
.text:0002ADFC LDRB R5, [R11,#2]
.text:0002AE00 ADD R12, R6, R2,LSL#2
.text:0002AE04 STR R4, [SP,#0xE8+var_E8]
.text:0002AE08 LDRB R6, [R11,#1]
.text:0002AE0C LDRB R4, [R11,#3]
.text:0002AE10 AND R8, R2, #0xFF
.text:0002AE14 TST R2, #3
.text:0002AE18 ADD R0, R2, #1
.text:0002AE1C ADD R9, R1, R6
.text:0002AE20 ADD R10, R1, R5
.text:0002AE24 ADD R11, R1, R4
.text:0002AE28 ADD R8, R1, R8,LSR#2
.text:0002AE2C BNE loc_2AE4C
.text:0002AE30 LDRB R6, [R10,#0xC]
.text:0002AE34 LDR R10, [SP,#0xE8+var_E8]
.text:0002AE38 LDRB R9, [R9,#0xC]
.text:0002AE3C LDRB R7, [R8,#0x10B]
.text:0002AE40 LDRB R5, [R11,#0xC]
.text:0002AE44 LDRB R4, [R10,#0xC]
.text:0002AE48 EOR R7, R9, R7
.text:0002AE4C
.text:0002AE4C loc_2AE4C ; CODE XREF: AES_inti_key(uchar *)+108j
.text:0002AE4C LDRB R8, [R3,#2]
.text:0002AE50 LDRB R9, [R3]
.text:0002AE54 LDRB R10, [R3,#1]
.text:0002AE58 LDRB R11, [R3,#3]
.text:0002AE5C EOR R5, R5, R8
.text:0002AE60 EOR R6, R6, R10
.text:0002AE64 EOR R11, R4, R11
.text:0002AE68 EOR R7, R7, R9
.text:0002AE6C ADD R8, SP, #0xE8+var_D0
.text:0002AE70 TST R0, #3
.text:0002AE74 STRB R6, [R3,#0x11]
.text:0002AE78 STRB R7, [R3,#0x10]
.text:0002AE7C STRB R5, [R3,#0x12]
.text:0002AE80 STRB R11, [R3,#0x13]
.text:0002AE84 AND R6, R0, #0xFF
.text:0002AE88 LDRB R5, [R8,R2,LSL#2]
.text:0002AE8C LDRB R4, [R12,#2]
.text:0002AE90 LDRB R2, [R12,#1]
.text:0002AE94 ADD R3, R3, #4
.text:0002AE98 LDRB R12, [R12,#3]
.text:0002AE9C BNE loc_2AECC
.text:0002AEA0 ADD R7, R1, R2
.text:0002AEA4 ADD R6, R1, R6,LSR#2
.text:0002AEA8 ADD R2, R1, R4
.text:0002AEAC ADD R9, R1, R12
.text:0002AEB0 ADD R8, R1, R5
.text:0002AEB4 LDRB R10, [R7,#0xC]
.text:0002AEB8 LDRB R5, [R6,#0x10B]
.text:0002AEBC LDRB R2, [R2,#0xC]
.text:0002AEC0 LDRB R4, [R9,#0xC]
.text:0002AEC4 LDRB R12, [R8,#0xC]
.text:0002AEC8 EOR R5, R10, R5
.text:0002AECC
.text:0002AECC loc_2AECC ; CODE XREF: AES_inti_key(uchar *)+178j
.text:0002AECC LDRB R7, [R3]
.text:0002AED0 LDRB R6, [R3,#1]
.text:0002AED4 EOR R9, R5, R7
.text:0002AED8 LDRB R10, [R3,#2]
.text:0002AEDC LDRB R5, [R3,#3]
.text:0002AEE0 EOR R8, R2, R6
.text:0002AEE4 ADD R2, R0, #1
.text:0002AEE8 EOR R11, R4, R10
.text:0002AEEC EOR R0, R12, R5
.text:0002AEF0 CMP R2, #0x2C
.text:0002AEF4 STRB R9, [R3,#0x10]
.text:0002AEF8 STRB R8, [R3,#0x11]
.text:0002AEFC STRB R11, [R3,#0x12]
.text:0002AF00 STRB R0, [R3,#0x13]
.text:0002AF04 ADD R3, R3, #4
.text:0002AF08 BNE loc_2ADE8
.text:0002AF0C LDR R0, =_ZL10CurrentKey ; CurrentKey
.text:0002AF10 MOV R7, #0
.text:0002AF14 MOV R1, R7
.text:0002AF18
.text:0002AF18 loc_2AF18 ; CODE XREF: AES_inti_key(uchar *)+258j
.text:0002AF18 ADD R4, SP, #0xE8+var_D0
.text:0002AF1C MOV R11, R4
.text:0002AF20 ADD R6, R7, #4
.text:0002AF24 LDRB R9, [R4,R7]!
.text:0002AF28 LDRB R5, [R11,R6]!
.text:0002AF2C LDRB R7, [R4,#3]
.text:0002AF30 LDRB R10, [R4,#1]
.text:0002AF34 LDRB R8, [R4,#2]
.text:0002AF38 LDRB R12, [R11,#2]
.text:0002AF3C LDRB R4, [R11,#1]
.text:0002AF40 LDRB R11, [R11,#3]
.text:0002AF44 ADD R2, R0, R1,LSL#2
.text:0002AF48 ADD R3, R1, #1
.text:0002AF4C ADD R1, R1, #2
.text:0002AF50 ADD R3, R0, R3,LSL#2
.text:0002AF54 CMP R1, #0x2C
.text:0002AF58 STRB R7, [R2,#0x13]
.text:0002AF5C STRB R9, [R2,#0x10]
.text:0002AF60 STRB R10, [R2,#0x11]
.text:0002AF64 STRB R8, [R2,#0x12]
.text:0002AF68 ADD R7, R6, #4
.text:0002AF6C STRB R5, [R3,#0x10]
.text:0002AF70 STRB R4, [R3,#0x11]
.text:0002AF74 STRB R12, [R3,#0x12]
.text:0002AF78 STRB R11, [R3,#0x13]
.text:0002AF7C BNE loc_2AF18
.text:0002AF80 ADD SP, SP, #0xC8
.text:0002AF84 LDMFD SP!, {R4-R11}
.text:0002AF88 BX LR
.text:0002AF88 ; End of function AES_inti_key(uchar *)
So der Post war zu lang. Der vermutlich relevante Teil noch mal hier:
.text:0002F748 ADD R1, R4, #0x14
.text:0002F74C ADD R0, SP, #0x70+var_48
.text:0002F750 BL _ZNSsC1ERKSs ; std::string::string(std::string const&)
.text:0002F754 MOV R0, #1
.text:0002F758 MOV R1, #0x49
.text:0002F75C ADD R2, SP, #0x70+var_2C
.text:0002F760 BL _ZNSs12_S_constructEjcRKSaIcE ; std::string::_S_construct(uint,char,std::allocator<char> const&)
.text:0002F764 STR R0, [SP,#0x70+var_44]
.text:0002F768 MOV R0, R6
.text:0002F76C BL _ZNK11BidcosFrame16GetSenderAddressEv ; BidcosFrame::GetSenderAddress(void)
.text:0002F770 MOV R1, R0
.text:0002F774 ADD R0, SP, #0x70+var_40
.text:0002F778 BL _ZN3HM2L37convertBidcosAddressToBigEndianStringEi ; HM2::convertBidcosAddressToBigEndianString(int)
.text:0002F77C LDR R1, [SP,#0x70+var_40]
.text:0002F780 ADD R12, SP, #0x70+var_44
.text:0002F784 MOV R0, R12
.text:0002F788 LDR R2, [R1,#-0xC]
.text:0002F78C STR R12, [SP,#0x70+var_60]
.text:0002F790 BL _ZNSs6appendEPKcj ; std::string::append(char const*,uint)
.text:0002F794 MOV R0, R6
.text:0002F798 BL _ZNK11BidcosFrame18GetReceiverAddressEv ; BidcosFrame::GetReceiverAddress(void)
.text:0002F79C MOV R1, R0
.text:0002F7A0 ADD R0, SP, #0x70+var_3C
.text:0002F7A4 BL _ZN3HM2L37convertBidcosAddressToBigEndianStringEi ; HM2::convertBidcosAddressToBigEndianString(int)
.text:0002F7A8 ADD R0, SP, #0x70+var_40
.text:0002F7AC ADD R1, SP, #0x70+var_3C
.text:0002F7B0 BL _ZNSs6assignERKSs ; std::string::assign(std::string const&)
.text:0002F7B4 ADD R0, SP, #0x70+var_3C
.text:0002F7B8 BL _ZNSsD1Ev ; std::string::~string()
.text:0002F7BC LDR R1, [SP,#0x70+var_40]
.text:0002F7C0 LDR R0, [SP,#0x70+var_60]
.text:0002F7C4 LDR R2, [R1,#-0xC]
.text:0002F7C8 BL _ZNSs6appendEPKcj ; std::string::append(char const*,uint)
.text:0002F7CC ADD R0, SP, #0x70+var_38
.text:0002F7D0 LDR R1, [SP,#0x70+var_64]
.text:0002F7D4 BL _ZN3HM2L37convertBidcosAddressToBigEndianStringEi ; HM2::convertBidcosAddressToBigEndianString(int)
.text:0002F7D8 ADD R0, SP, #0x70+var_40
.text:0002F7DC ADD R1, SP, #0x70+var_38
.text:0002F7E0 BL _ZNSs6assignERKSs ; std::string::assign(std::string const&)
.text:0002F7E4 ADD R0, SP, #0x70+var_38
.text:0002F7E8 BL _ZNSsD1Ev ; std::string::~string()
.text:0002F7EC LDR R1, [SP,#0x70+var_40]
.text:0002F7F0 LDR R0, [SP,#0x70+var_60]
.text:0002F7F4 LDR R2, [R1,#-0xC]
.text:0002F7F8 BL _ZNSs6appendEPKcj ; std::string::append(char const*,uint)
.text:0002F7FC LDR R0, [SP,#0x70+var_60]
.text:0002F800 MOV R1, #5
.text:0002F804 MOV R2, #0
.text:0002F808 BL _ZNSs6appendEjc ; std::string::append(uint,char)
.text:0002F80C LDR R0, [SP,#0x70+var_60]
.text:0002F810 MOV R1, #1
.text:0002F814 MOV R2, #5
.text:0002F818 BL _ZNSs6appendEjc ; std::string::append(uint,char)
.text:0002F81C LDR R0, [SP,#0x70+var_48]
.text:0002F820 BL _Z12AES_inti_keyPh ; AES_inti_key(uchar *)
.text:0002F824 MOV R0, #0x10
.text:0002F828 BL _Znaj ; operator new[](uint)
.text:0002F82C MOV R1, R0
.text:0002F830 MOV R8, R0
.text:0002F834 LDR R0, [SP,#0x70+var_44]
.text:0002F838 BL _Z17AES_encrypt_blockPhS_ ; AES_encrypt_block(uchar *,uchar *)
.text:0002F83C MOV R0, R6
Gruß,
Jan
Zitat von: jab am 12 Februar 2014, 16:23:25
So der Post war zu lang. Der vermutlich relevante Teil noch mal hier:
Uhh, Wow :-)
Klasse :-)
Mal sehen ob ich noch ein paar Logs mit bekannten Keys wiederfinde, dann mache ich mich mal ans re-implementieren und verifizieren.
EDIT: habe in meinen Aufzeichnungen das hier gefunden:
#key: geheim
#A0F4DA03E68EA141ED0171ED017400160
#A0E4D80021ED01768EA140101000025
#A194EA00468EA141ED0172D01F41F2E52AB28F506E381A5AEAB73
#A114EA0021ED01768EA14047D5101811D1A02
#A194EA00368EA141ED0177BDB0CAFF9DE94D634A934389B92B69C
#A0E4E80021ED01768EA14002AE9B166
#A194FA00468EA141ED0172CADD1AC0170B67761637687E99048C4
#A114FA0021ED01768EA14047844BF6BE59002
#A194FA00368EA141ED017C7986D967898B43A536F2E46223456AD
#A0E4F80021ED01768EA1400B1AB6556
Gruß
Michael
Abend,
so ich habe mir mal meinen HM-LC-Sw1PBU-FM angeschaut und das externe EEPROM ausgelesen. An das interne kommt man bei dem Gerät nicht da EESave leider nicht gesetzt ist. Sieht aber nicht sonderlich spannend aus:
0: 0 0 32 64 0 FF 0 FF 1 64 66 0 0 32 64 0 FF 0 FF 21 64 66 1 DF FF FF FF FF FF FF FF FF
32: 0 0 32 64 0 FF 0 FF 1 13 33 0 0 32 64 0 FF 0 FF 21 13 33 1 D7 FF FF FF FF FF FF FF FF
64: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
96: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
128: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
160: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
192: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
224: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
256: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
288: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
320: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
352: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
384: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
416: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
448: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
480: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
512: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
544: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
576: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
608: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
640: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
672: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
704: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
736: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
768: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
800: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
832: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
864: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
896: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
928: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
960: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
992: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
1024: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
1056: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
1088: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
1120: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
1152: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
1184: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
1216: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
1248: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
1280: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
1312: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
1344: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
1376: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
1408: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
1440: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
1472: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
1504: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
1536: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
1568: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
1600: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
1632: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
1664: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
1696: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
1728: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
1760: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
1792: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
1824: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
1856: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
1888: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
1920: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
1952: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
1984: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
2016: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
2048: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
2080: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
2112: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
2144: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
2176: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
2208: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
2240: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
2272: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
2304: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
2336: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
2368: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
2400: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
2432: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
2464: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
2496: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
2528: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
2560: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
2592: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
2624: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
2656: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
2688: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
2720: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
2752: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
2784: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
2816: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
2848: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
2880: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
2912: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
2944: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
2976: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3008: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3040: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3072: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3104: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3136: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3168: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3200: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3232: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3264: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3296: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3328: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3360: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3392: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3424: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3456: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3488: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3520: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3552: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3584: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3616: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3648: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3680: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3712: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3744: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3776: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3808: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3840: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3872: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3904: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3936: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
3968: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
4000: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
4032: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
4064: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF AB CD
Sieht mir fast ein wenig wie die Register aus. Habe das Gerät nie mit der Originalfirmware benutzt. Dürfte also Defaultsetting sein.
Gruß,
Jan
Hi,
Hinweis: ich denke ich habe (einen Teil mehr ) begriffen wie HMLAN mit AES umgeht. Man kann je device einstellen, dass HMLAN vor jeden ACK (so das Device eins fordert) den key überprüft.
Eingebaut habe ich bisher zum Beobachten ein Reading "aesCommToDev".
Sollte bei remotes eingeschaltet sein...
Der fertige umbau zur sinnvollen nutzung steht noch aus
Gruss Martin
Hi Martin,
streng genommen war der Thread für AES im Funk gedacht. Weißt du da mehr über den Algorithmus bzw über was genau die Signatur gebaut wird?
Den HMLAN Teil habe ich nur rausgesucht, weil sie da möglicherweise einfach genau das gleiche benutzen und es uns weiterhelfen kann. Da geht es um die Verschlüsselung der Nachrichten zwischen HMLAN und der CCU2 (zumindest wenn ich das richtig verstanden habe).
rfd macht wirklich viel AES. Da sind mindestens zwei Verschiedene AES Funktionen drin. Von daher kann man da evtl noch mehr verstehen. Leider fehlt uns bisher noch recht viel Wissen.
Gruß,
Jan
Hi,
Zitat von: jab am 16 Februar 2014, 20:55:52
Den HMLAN Teil habe ich nur rausgesucht, weil sie da möglicherweise einfach genau das gleiche benutzen und es uns weiterhelfen kann. Da geht es um die Verschlüsselung der Nachrichten zwischen HMLAN und der CCU2 (zumindest wenn ich das richtig verstanden habe).
Die AES-Verschlüsselung zwischen HMLAN und CCU ist sehr einfach, siehe: http://forum.fhem.de/index.php?topic=12954.0
Da wird tatsächlich nur der aufgedruckte Schlüssel benutzt und kein Transaktionsspezifischer.
Gruß
Michael
Hi Michael,
das sieht ja super aus. Das wusste ich nicht. Danke dir! Dann war mein Debugging mit IDA ja redundant eigentlich und bestätigt das eigentlich nur. Warum ist das eigentlich noch nicht in FHEM eingebaut?
Ok dann back to track: Was wissen wir über den Funk AES?
- Nachricht wird gesendet (1)
- ACK wird gesendet mit Signing Flag (?) (2)
- AES Signatur wird gesendet (3)
Jetzt die Frage: Was wird signiert? Die Nachricht (1), wenn ja was aus der Nachricht? Oder gibt es irgendeine Challenge im ACK (2)?
Wissen wir über den Algorithmus? Irgendwelche Erkenntnisse? IVs? Randomseeds? Wir haben ja keinen vernünftigen Random auf den Controllern.
Gruß,
Jan
hi,
klar rede ich von funk.
Ich denke das flag entdeckt zu haben, mit dem HMLAN einem device nur antwortet, wenn es vorher "die AES-frage" beantworten kann.
Es betrifft also die Kommunikation zwischen FHEM und den Devices. virtuellen aktoren sind aussen vor! Die lassen sich so nicht bedienen.
natuerlich geht es nicht fuer CUL, da braucht es den Algorythmus, den ihr sucht.
Gruss Martin
Hallo zusammen,
Was ist eigentlich aus dem Thema geworden? Wäre sehr interessiert daran um es für einen keymatic nutzen zu können.
Grüße ulli
Nur mal als Einwurf: auf dem 30C3 wurde auch Homematic behandelt.
Infos bekommt man bestimmt von den Autoren, wenn man nett fragt.
http://media.ccc.de/browse/congress/2013/30C3_-_5444_-_en_-_saal_g_-_201312301600_-_attacking_homematic_-_sathya_-_malli.html#video
Hallo,
ich denke hier sollte es auch rein:
Zu AES-Key siehe auch Pastebin-Link im 2. Beitrag des folgenden aus dem Homegear-Forum: https://forum.homegear.eu/viewtopic.php?t=217#p1485
Gruss
Michael
Hallo,
fhem> set COC hmPairForSec 30
2015-06-07 15:50:48 CUL COC hmPairForSec 30
2015-06-07 15:50:54 Global global DEFINED HM_1ED017
2015-06-07 15:50:54 Global global DEFINED FileLog_HM_1ED017
2015-06-07 15:50:54 Global global SAVE
2015-06-07 15:50:54 CUL COC SND L:10 N:02 F:A0 CMD:01 SRC:68EA14 DST:HM_1ED017 00050000000000 (CONFIG_START CHANNEL:0x00 PEER_ADDRESS:0x000000 PEER_CHANNEL:0x00 PARAM_LIST:0x00) (,BIDI,RPTEN)
2015-06-07 15:50:54 CUL_HM HM_1ED017 D-firmware: 1.9
2015-06-07 15:50:54 CUL_HM HM_1ED017 D-serialNr: JEQ0697776
2015-06-07 15:50:54 CUL_HM HM_1ED017 R-pairCentral: set_0x68EA14
2015-06-07 15:50:54 CUL COC RCV L:0A N:02 F:80 CMD:02 SRC:HM_1ED017 DST:68EA14 00 (ACK) (,RPTEN)
2015-06-07 15:50:54 CUL COC SND L:13 N:03 F:A0 CMD:01 SRC:68EA14 DST:HM_1ED017 000802010A680BEA0C14 (CONFIG_WRITE_INDEX CHANNEL:0x00 DATA: 02:01 0A:68 0B:EA 0C:14) (,BIDI,RPTEN)
2015-06-07 15:50:54 CUL COC RCV L:0A N:03 F:80 CMD:02 SRC:HM_1ED017 DST:68EA14 00 (ACK) (,RPTEN)
2015-06-07 15:50:55 CUL COC SND L:0B N:04 F:A0 CMD:01 SRC:68EA14 DST:HM_1ED017 0006 (CONFIG_END CHANNEL:0x00) (,BIDI,RPTEN)
2015-06-07 15:50:55 CUL COC RCV L:0A N:04 F:80 CMD:02 SRC:HM_1ED017 DST:68EA14 00 (ACK) (,RPTEN)
fhem> set HM_1ED017 getConfig
...
fhem> set HM_1ED017 on
2015-06-07 15:54:18 CUL_HM HM_1ED017 set_on
2015-06-07 15:54:18 CUL COC SND L:0E N:0F F:A0 CMD:11 SRC:68EA14 DST:HM_1ED017 0201C80000 (SET CHANNEL:0x01 VALUE:0xC8 RAMPTIME:2) (,BIDI,RPTEN)
2015-06-07 15:54:18 CUL COC RCV L:0E N:0F F:80 CMD:02 SRC:HM_1ED017 DST:68EA14 0101C80021 (ACK_STATUS CHANNEL:0x01 STATUS:0xC8 UP:0 DOWN:0 LOWBAT:0 RSSI:-33) (,RPTEN)
2015-06-07 15:54:18 CUL_HM HM_1ED017 deviceMsg: on (to COC)
2015-06-07 15:54:18 CUL_HM HM_1ED017 level: 100
2015-06-07 15:54:18 CUL_HM HM_1ED017 pct: 100
2015-06-07 15:54:18 CUL_HM HM_1ED017 on
2015-06-07 15:54:18 CUL_HM HM_1ED017 timedOn: off
fhem> set HM_1ED017 sign on
2015-06-07 15:54:32 CUL_HM HM_1ED017 R-sign: set_on
2015-06-07 15:54:32 CUL COC SND L:10 N:10 F:A0 CMD:01 SRC:68EA14 DST:HM_1ED017 01050000000001 (CONFIG_START CHANNEL:0x01 PEER_ADDRESS:0x000000 PEER_CHANNEL:0x00 PARAM_LIST:0x01) (,BIDI,RPTEN)
2015-06-07 15:54:32 CUL COC RCV L:0A N:10 F:80 CMD:02 SRC:HM_1ED017 DST:68EA14 00 (ACK) (,RPTEN)
2015-06-07 15:54:32 CUL COC SND L:0D N:11 F:A0 CMD:01 SRC:68EA14 DST:HM_1ED017 01080801 (CONFIG_WRITE_INDEX CHANNEL:0x01 DATA: 08:01) (,BIDI,RPTEN)
2015-06-07 15:54:32 CUL COC RCV L:0A N:11 F:80 CMD:02 SRC:HM_1ED017 DST:68EA14 00 (ACK) (,RPTEN)
2015-06-07 15:54:32 CUL COC SND L:0B N:12 F:A0 CMD:01 SRC:68EA14 DST:HM_1ED017 0106 (CONFIG_END CHANNEL:0x01) (,BIDI,RPTEN)
2015-06-07 15:54:32 CUL COC RCV L:0A N:12 F:80 CMD:02 SRC:HM_1ED017 DST:68EA14 00 (ACK) (,RPTEN)
fhem> set HM_1ED017 off
2015-06-07 15:56:56 CUL_HM HM_1ED017 set_off
2015-06-07 15:56:56 CUL COC SND L:0E N:22 F:A0 CMD:11 SRC:68EA14 DST:HM_1ED017 0201000000 (SET CHANNEL:0x01 VALUE:0x00 RAMPTIME:2) (,BIDI,RPTEN)
2015-06-07 15:56:57 CUL COC RCV L:11 N:22 F:A0 CMD:02 SRC:HM_1ED017 DST:68EA14 04FCBAE287E31E00 (AES_req Para1:0xFCBA Para2:0xE287 Para3:0xE31E keyNo:0x00) (,BIDI,RPTEN)
2015-06-07 15:56:57 CUL COC SND L:0A N:22 F:80 CMD:02 SRC:68EA14 DST:HM_1ED017 00 (ACK) (,RPTEN)
2015-06-07 15:56:57 CUL_HM HM_1ED017 aesKeyNbr: 00
2015-06-07 15:56:57 CUL COC RCV L:19 N:22 F:A0 CMD:03 SRC:68EA14 DST:HM_1ED017 3B2C43920C729737C2A232AB169C586F (AES reply DATA:0x3B2C43920C729737C2A232AB169C586F) (,BIDI,RPTEN)
2015-06-07 15:56:57 CUL COC RCV L:19 N:22 F:A0 CMD:03 SRC:68EA14 DST:HM_1ED017 3B2C43920C729737C2A232AB169C586F (AES reply DATA:0x3B2C43920C729737C2A232AB169C586F) (,BIDI,RPTEN)
2015-06-07 15:56:57 CUL COC UNKNOWNCODE A1922A00368EA141ED0173B2C43920C729737C2A232AB169C586F::-48:COC
2015-06-07 15:56:57 CUL COC RCV L:12 N:22 F:80 CMD:02 SRC:HM_1ED017 DST:68EA14 0101000036F17BA8A9 (ACK_STATUS CHANNEL:0x01 STATUS:0x00 UP:0 DOWN:0 LOWBAT:0 RSSI:-54) (,RPTEN)
2015-06-07 15:56:57 CUL_HM HM_1ED017 deviceMsg: off (to COC)
2015-06-07 15:56:57 CUL_HM HM_1ED017 level: 0
2015-06-07 15:56:57 CUL_HM HM_1ED017 pct: 0
2015-06-07 15:56:57 CUL_HM HM_1ED017 off
2015-06-07 15:56:57 CUL_HM HM_1ED017 timedOn: off
More to come :-)
cool. dein coc spricht aes? 8)
Zitat von: frank am 07 Juni 2015, 16:20:23
cool. dein coc spricht aes? 8)
Nein, die rfbee mit culfw am Beaglebone daneben :-)
War der einfachste proof-of-concept Aufbau.
Gruss
Michael
Top. Respekt!
Damit dürfte es ja tatsächlich möglich sein
1) AES in Homematic komplett in fhem zu implementieren und komplett auf die Win-Software zu verzichten
2) AES in die culfw einzubauen und somit CULs, COCs und wie sie alle heißen ebenfalls statt HM-CFG-USB oder HMLAN nutzen zu müssen.
Hallo,
so, was lange währt ... ;-)
https://git.zerfleddert.de/hmcfgusb/AES/
Das AES habe ich in meinem Testaufbau nicht in der culfw implementiert (da würde es gar nicht mehr reinpassen), sondern in einem kleinen Perlskript, welches (wie Fhem) mit dem CUL (Rfbee) redet.
Aber das sollte direkt in 10_CUL_HM implementiert werden, mein Testhack ist nicht mehr als genau das, ein übler Hack der einfach alle AES Signaturrequests beantwortet.
Nachdem ich gestern den ganzen Tag mit dem Finden des Algorithmus verbracht habe, hatte ich heute keine Lust und Zeit mehr es richtig zu implementieren. Ausserdem muss ich dazu wahrscheinlich Martin ziemlich löchern, da mir doch viel Wissen über die Internals von 10_CUL_HM.pm fehlt (wie komme ich z.B. an das zuletzt an das Gerät gesendete Frame, bzw. geht das überhaupt).
Gruß
Michael
respekt!!!!!!!
ich muss mir das mal genauer anschauen und verstehen, vielleicht bekomme ich es ja in die Newasksin rein....
wäre der hammer, damit hätte man eine komplett emulation :-)
Hallo,
ich habe jetzt mal das Challenge-Response in 10_CUL_HM.pm reingehackt und einen Diff hier angehaengt. Damit kann man jetzt AES-Geraete bedienen (bisher nur mit statisch konfiguriertem Defaultkey).
Leider fehlt mir mehr Wissen ueber die Internas von CUL_HM um das schoen zu machen, evtl. kann Martin sich das mal anschauen und es so hinbauen, dass es zum Rest von CUL_HM passt, man den Schluessel auch setzen kann (z.Zt wird bei einer Schluesselnummer != 00 ein Fehler ausgegeben und dann trotzdem der hartkodierte Defaultschluessel verwendet) und in der Response die ersten 6 Bytes auf einen Zeitstempel gesetzt werden. Und das ganze sollte nur ausgefuehrt werden, wenn es auch wirklich von einem CUL-Device empfangen wurde...
2015-06-08 23:53:03 CUL_HM Steckdose_Test set_toggle
2015-06-08 23:53:03 CUL COC SND L:0E N:01 F:A0 CMD:11 SRC:68EA14 DST:Steckdose_Test 0201000000 (SET CHANNEL:0x01 VALUE:0x00 RAMPTIME:2) (,BIDI,RPTEN)
2015-06-08 23:53:03 CUL COC RCV L:11 N:01 F:A0 CMD:02 SRC:Steckdose_Test DST:68EA14 0463906CE1765E00 (AES_req Para1:0x6390 Para2:0x6CE1 Para3:0x765E keyNo:0x00) (,BIDI,RPTEN)
2015-06-08 23:53:03 CUL COC SND L:19 N:01 F:A0 CMD:03 SRC:68EA14 DST:Steckdose_Test ce1968c7333714ffc23603be6db057d1 (AES reply DATA:0xce1968c7333714ffc23603be6db057d1) (,BIDI,RPTEN)
2015-06-08 23:53:03 CUL COC SND L:0A N:01 F:80 CMD:02 SRC:68EA14 DST:Steckdose_Test 00 (ACK) (,RPTEN)
2015-06-08 23:53:03 CUL_HM Steckdose_Test CUL_HM signing request for As0E01A01168EA141ED0170201000000 challenge: 63906CE1765E kNo: 00
2015-06-08 23:53:03 CUL_HM Steckdose_Test aesKeyNbr: 00
2015-06-08 23:53:03 CUL COC RCV L:12 N:01 F:80 CMD:02 SRC:Steckdose_Test DST:68EA14 010100001EE57EFEE6 (ACK_STATUS CHANNEL:0x01 STATUS:0x00 UP:0 DOWN:0 LOWBAT:0 RSSI:-30) (,RPTEN)
2015-06-08 23:53:03 CUL_HM Steckdose_Test deviceMsg: off (to COC)
2015-06-08 23:53:03 CUL_HM Steckdose_Test level: 0
2015-06-08 23:53:03 CUL_HM Steckdose_Test pct: 0
2015-06-08 23:53:03 CUL_HM Steckdose_Test off
2015-06-08 23:53:03 CUL_HM Steckdose_Test timedOn: off
Gruss
Michael
Hallo,
so habe das ganze nochmal etwas aufgeraeumt und angehaengt.
Offene Punkte sind noch:
- Wie kann man Schluessel fuer einen CUL definieren, oder soll das nur an der VCCU funktionieren?
- Wie kann man dann auf diese Schluessel zugreifen (die muessen an den jeweiligen Schluesselindex im @keys-Array im ACK-AES)?
- Wie kann das zusaetzlich generierte ACK (neben der Signing-response) unterbunden werden? Habe dazu in CUL_HM_parseCommon keine Moeglichkeit gefunden, auf @ack Einfluss zu nehmen.
- Wie koennen die vom Geraet in der ACK-Nachricht zurueckgelieferten 4 Bytes mit den im Signierungsprozess erzeugten verglichen werden?
Gruss
Michael
man kann jetzt assignHmKey probieren.
testen muss man selbst. Die Kommandos kommen - ob es klappt muss man sehen. Sicher noch etwas docu zu leisten!
Hallo Martin,
Zitat von: martinp876 am 09 Juni 2015, 21:10:10
man kann jetzt assignHmKey probieren.
testen muss man selbst.
Funktioniert wunderbar, vielen Dank :-)
Zitat
Die Kommandos kommen - ob es klappt muss man sehen. Sicher noch etwas docu zu leisten!
Soll ich da ein/zwei Saetze schreiben?
Ich habe mal die neuesten Version der AES CUL-Implementierung angehaengt, es hat eine Interpretierung der Schluesselnummer als Hex gefehlt.
Viele Gruesse
Michael
Hat bei mir gestern nicht funktioniert. Liegt evtl daran, dass key 00 als der alte erkannt wurde, es aber nicht war. Ich werde eest am wo henende testen.
Ins wiki sollte eine erklaerung, wie man keys festlegt und aendert. Ich denke, das sollte in ein eigenes kapitel.
Das kommando werde ich noch erweitern, so dass man den alten key auch frei waehlen kann. Default bleibt das reading
Hallo Martin,
Zitat von: martinp876 am 10 Juni 2015, 21:32:59
Hat bei mir gestern nicht funktioniert. Liegt evtl daran, dass key 00 als der alte erkannt wurde, es aber nicht war.
Ja, wahrscheinlich.
Zitat
Ich werde eest am wo henende testen.
Falls Du auch meine CUL-AES-Implementierung testen willst, dann habe ich jetzt nochmal eine gefixte angehängt, die die Länge des IV auf 16 Byte beschränkt. Ansonsten will das AES nicht...
Zitat
Ins wiki sollte eine erklaerung, wie man keys festlegt und aendert. Ich denke, das sollte in ein eigenes kapitel.
Das kommando werde ich noch erweitern, so dass man den alten key auch frei waehlen kann. Default bleibt das reading
Ok, ich denke ich komme am WE dazu, da was dazu zu schreiben. Danke für Deine Arbeit :-)
Gruß
Michael
Hi zusammen,
ich habe (vermutlich erfolgreich) AES erstmal Testweise für einen Rollladenaktor mit FHEM Bordmitteln aktiviert, bin mir aber nicht so sicher, ob ich das alles richtig verstanden und richtig gemacht habe.
Das habe ich getan:
- Einen 16-stelligen Hex-Schlüssel erzeugt (per Linux-Kommando, ergibt eine 32-stellige Zeichenkette: head -c16 /dev/urandom | md5sum)
- Den Schlüssel ins HMLAN eingetragen:
attr hmlan1 hmKey 01:geheimer hex-schlüssel
attr hmlan1 hmKey2 02:geheimer hex-schlüssel - Den Schlüssel zum Rollladenaktor (HM-LC-Bl1PBU-FM) übertragen:
set [device-name] assignHmKey - AES für das Gerät eingeschaltet:
set [device-name] sign on
Das lief alles problemlos und das Rollo lässt sich weiterhin steuern.
Ein List auf das Rollo liefert (stark gekürzt):
Internals:
lastMsg No:18 - t:10 s:338BF7 d:8CF27A 0601B200
protEvt_AESok 5 last_at:2015-06-27 20:25:34
protLastRcv 2015-06-27 20:25:38
protSnd 31 last_at:2015-06-27 20:25:38
protState CMDs_done
Readings:
2015-06-27 19:52:27 R-sign on
2015-06-27 19:52:37 aesKeyNbr 02
Für mich sieht das alles gut aus. Aber bevor ich das so für die weiteren Geräte mache, die Fragen:
Hab ich das richtig gemacht?
Und ist jetzt AES für das Gerät aktiviert?
Danke und viele Grüße,
Alex
sniffe die aktionen nach "homematic-art", da sollte man es erkennen.
Zitat von: All-Ex am 27 Juni 2015, 20:28:50
Das habe ich getan:
...
- Den Schlüssel ins HMLAN eingetragen:
attr hmlan1 hmKey 01:geheimer hex-schlüssel
attr hmlan1 hmKey2 02:geheimer hex-schlüssel
Warum und wann hast Du den Schluessel an Index 2 zusaetzlich eingetragen? War das vor oder nach dem assignHmKey? Eigentlich reicht es, ihn an Index 1 zu setzen.
Zitat
- Den Schlüssel zum Rollladenaktor (HM-LC-Bl1PBU-FM) übertragen:
set [device-name] assignHmKey - AES für das Gerät eingeschaltet:
set [device-name] sign on
Hoert sich so an, als ob der eigene Schluessel gesetzt wurde.
Zitat
2015-06-27 19:52:37 aesKeyNbr 02
AES wird mit dem eigenen Schluessel an Index 1 genutzt (aesKeyNbr hat immer den doppelten Wert des echten Index).
Zitat
Hab ich das richtig gemacht?
Und ist jetzt AES für das Gerät aktiviert?
Ja, nur der Schluessel an Index 2 ist komisch. War der schon beim assignHmKey gesetzt? Dann sollte aesKeyNbr eigentlich 04 sein...
Gruss
Michael
Danke für Deine Antwort!
Zitat von: mgernoth am 27 Juni 2015, 23:33:51
Warum und wann hast Du den Schluessel an Index 2 zusaetzlich eingetragen? War das vor oder nach dem assignHmKey? Eigentlich reicht es, ihn an Index 1 zu setzen.
Ich habe es in der Reihenfolge wie oben angegeben gemacht, also erst 2 Schlüssel gesetzt, dann assignHmKey gemacht.
Den Schlüssel an Index 2 hab ich aufgrund eines Forumsbeitrags in einem anderen Thread gesetzt...
Zitat von: mgernoth am 24 Juni 2015, 21:10:05
Nein, eher so:
attr HMLAN1 hmKey 01:supergeheimerschlüssel
attr HMLAN1 hmKey2 02:supergeheimerschlüssel
Und ich wuerde nicht noch hoehere Indizes vergeben, das Geraet fragt nur nach Index 2.
Gruss
Michael
Das trifft bei mir aber evtl. nicht zu, da ich vorher keine Verschlüsselung hatte. Ich möchte von unverschlüsselt auf verschlüsselt umstellen und nicht den Schlüssel wechseln.
Dann kann ich das hmKey2 Attribut ja wieder löschen oder?
Alex
Zitat von: frank am 27 Juni 2015, 22:00:30
sniffe die aktionen nach "homematic-art", da sollte man es erkennen.
Habe das Logging auf den Rollladenaktor (rollo.og.az, ID 338BF7) und das hmlan1 (ID 8CF27A) beschränkt: attr hmlan1 logIDs rollo.og.az,8CF27A
Wenn ich dem Rollo per FHEM ein Down sende, kommt das raus:
2015.06.28 08:44:14.503 0: HMLAN_Send: hmlan1 S:S38E8C175 stat: 00 t:00000000 d:01 r:38E8C175 m:14 A011 8CF27A 338BF7 020120
2015.06.28 08:44:14.681 0: HMLAN_Parse: hmlan1 R:E338BF7 stat:0100 t:02EE9D80 d:FF r:FFD4 m:14 A002 338BF7 8CF27A 0419076C2173F502
2015.06.28 08:44:14.918 0: HMLAN_Parse: hmlan1 R:R38E8C175 stat:0021 t:02EE9D85 d:01 r:FFD4 m:14 8002 338BF7 8CF27A 0101342040E17C145C
2015.06.28 08:44:19.102 0: HMLAN_Parse: hmlan1 R:E338BF7 stat:0000 t:02EEAED4 d:FF r:FFD6 m:15 A410 338BF7 8CF27A 06012000
Woran sehe ich, ob AES aktiviert ist?
Hi,
Zitat von: All-Ex am 28 Juni 2015, 00:00:58
Ich habe es in der Reihenfolge wie oben angegeben gemacht, also erst 2 Schlüssel gesetzt, dann assignHmKey gemacht.
Ok. Interessant, dass der HMLAN dann den Key an Index 1 uebertragen hat. Komische eQ-3-Firmware...
Zitat
Den Schlüssel an Index 2 hab ich aufgrund eines Forumsbeitrags in einem anderen Thread gesetzt...
Das trifft bei mir aber evtl. nicht zu, da ich vorher keine Verschlüsselung hatte. Ich möchte von unverschlüsselt auf verschlüsselt umstellen und nicht den Schlüssel wechseln.
Ja, in dem Thread hat das Geraet explizit nach einem Schluessel an Index 2 gefragt, weswegen das notwenidg war. In Deinem Fall reicht der Index 1 (ich habe bei mir auch nur einen Schluessel an Index 1 definiert).
Zitat
Dann kann ich das hmKey2 Attribut ja wieder löschen oder?
Ja, genau.
Zitat von: All-Ex am 28 Juni 2015, 08:52:06
2015.06.28 08:44:14.681 0: HMLAN_Parse: hmlan1 R:E338BF7 stat:0100 t:02EE9D80 d:FF r:FFD4 m:14 A002 338BF7 8CF27A 0419076C2173F502
Letzte 8 Bytes: Challenge 19076C2173F5 fuer Key 1 (aesKeyNbr 02).
Zitat
2015.06.28 08:44:14.918 0: HMLAN_Parse: hmlan1 R:R38E8C175 stat:0021 t:02EE9D85 d:01 r:FFD4 m:14 8002 338BF7 8CF27A 0101342040E17C145C
stat: xx2x: AES accepted
Letzte 4 Byte: E17C145C - Crypto-Response des Geraets.
Zitat
Woran sehe ich, ob AES aktiviert ist?
Du siehst das daran, dass das Reading aesKeyNbr (kommt aus der Challenge-Nachricht) den erwarteten Wert hat, das Geraet geschaltet hat und der Status accepted ist (das landet im Reading aesCommToDev, ist dann auf ok).
Gruss
Michael
Gut. Nun nehmen wir an, wir haben
attr hmlan hmkey 01:abcdefg...
gesetzt und alle Geräte erfolgreich aktualisiert. Sie fordern brav den aesKeyNbr 02 an.
Wenn nun wiederum ein neuer Key gesetzt werden soll, machen wir das dann aber schon wie folgt?
attr hmlan hmkey2 02:gfedcba....
und ab dafür mit set xyz assignHmKey?
Hallo Ralli,
Zitat von: Ralli am 28 Juni 2015, 12:17:03
Wenn nun wiederum ein neuer Key gesetzt werden soll, machen wir das dann aber schon wie folgt?
attr hmlan hmkey2 02:gfedcba....
und ab dafür mit set xyz assignHmKey?
Ja.
Gruss
Michael
Zitat von: mgernoth am 09 Juni 2015, 00:00:42
Hallo,
ich habe jetzt mal das Challenge-Response in 10_CUL_HM.pm reingehackt und einen Diff hier angehaengt. Damit kann man jetzt AES-Geraete bedienen (bisher nur mit statisch konfiguriertem Defaultkey).
Leider fehlt mir mehr Wissen ueber die Internas von CUL_HM um das schoen zu machen, evtl. kann Martin sich das mal anschauen und es so hinbauen, dass es zum Rest von CUL_HM passt, man den Schluessel auch setzen kann (z.Zt wird bei einer Schluesselnummer != 00 ein Fehler ausgegeben und dann trotzdem der hartkodierte Defaultschluessel verwendet) und in der Response die ersten 6 Bytes auf einen Zeitstempel gesetzt werden. Und das ganze sollte nur ausgefuehrt werden, wenn es auch wirklich von einem CUL-Device empfangen wurde...
2015-06-08 23:53:03 CUL_HM Steckdose_Test set_toggle
2015-06-08 23:53:03 CUL COC SND L:0E N:01 F:A0 CMD:11 SRC:68EA14 DST:Steckdose_Test 0201000000 (SET CHANNEL:0x01 VALUE:0x00 RAMPTIME:2) (,BIDI,RPTEN)
2015-06-08 23:53:03 CUL COC RCV L:11 N:01 F:A0 CMD:02 SRC:Steckdose_Test DST:68EA14 0463906CE1765E00 (AES_req Para1:0x6390 Para2:0x6CE1 Para3:0x765E keyNo:0x00) (,BIDI,RPTEN)
2015-06-08 23:53:03 CUL COC SND L:19 N:01 F:A0 CMD:03 SRC:68EA14 DST:Steckdose_Test ce1968c7333714ffc23603be6db057d1 (AES reply DATA:0xce1968c7333714ffc23603be6db057d1) (,BIDI,RPTEN)
2015-06-08 23:53:03 CUL COC SND L:0A N:01 F:80 CMD:02 SRC:68EA14 DST:Steckdose_Test 00 (ACK) (,RPTEN)
2015-06-08 23:53:03 CUL_HM Steckdose_Test CUL_HM signing request for As0E01A01168EA141ED0170201000000 challenge: 63906CE1765E kNo: 00
2015-06-08 23:53:03 CUL_HM Steckdose_Test aesKeyNbr: 00
2015-06-08 23:53:03 CUL COC RCV L:12 N:01 F:80 CMD:02 SRC:Steckdose_Test DST:68EA14 010100001EE57EFEE6 (ACK_STATUS CHANNEL:0x01 STATUS:0x00 UP:0 DOWN:0 LOWBAT:0 RSSI:-30) (,RPTEN)
2015-06-08 23:53:03 CUL_HM Steckdose_Test deviceMsg: off (to COC)
2015-06-08 23:53:03 CUL_HM Steckdose_Test level: 0
2015-06-08 23:53:03 CUL_HM Steckdose_Test pct: 0
2015-06-08 23:53:03 CUL_HM Steckdose_Test off
2015-06-08 23:53:03 CUL_HM Steckdose_Test timedOn: off
Gruss
Michael
Guten Tag,
zu edukativen Zwecken versuche ich das HomeMatic AES komplett nachzuvollziehen und stehe dabei etwas auf dem Schlauch.
Das zitierte Beispiel von Michael konnte ich nachvollziehen, sobald ich das Verfahren aber im Anlernprozess meines optischen Fensterkontaktes anwenden will scheitere ich.
Zuerst nun die Details des Vorgangs, den Michael aufgezeichnet hat:
Schaltbefehl: 0E 01 A0 11 68EA14 1ED017 0201000000
Challenge-Paket vom Aktor/Sensor: 11 01 A0 02 1ED017 68EA14 04 63906CE1765E 00
Es wird der Default-Key verwendet.
CHALLENGE = 0x63906CE1765E
KEY = Default-Key XOR CHALLENGE = 0xc7731927c6c1d185f27c4e96fc273ae4
R = 0x2a0000000000 (+) 0x01a01168ea141ed01702 = 0x2a000000000001a01168ea141ed01702
R = AES_ECB(KEY, R) = 0xe57efee64eaac35ae7751856a1c7c3ed
PARAMS = 0x01000000
R = R XOR PARAMS = 0xe47efee64eaac35ae7751856a1c7c3ed
R = AES_ECB(KEY, R) = 0xce1968c7333714ffc23603be6db057d1
Dies ist so auch im Zitat ersichtlich.
Das gleiche jetzt für einen Fall meines Sensors. Ich möchte das Config-Start-Index Paket senden.
Schaltbefehl: 10 01 a0 01 b413fe 363c21 00050000000000
Challenge-Paket: 01 a0 02 363c21 b413fe 04 c97d08a5b9f5 00
Es wird der Default-Key verwendet.
CHALLENGE = 0xc97d08a5b9f5
KEY = Default-Key XOR CHALLENGE = 0x6d9e7d63096ad185f27c4e96fc273ae4
R = 0x2a0000000000 (+) 0x01a001b413fe363c2100 = 0x2a000000000001a001b413fe363c2100
R = AES_ECB(KEY, R) = 0x874b83b4cd9bdea06bdec2788cda1388
PARAMS = 0x050000000000
R = R XOR PARAMS = 0x824b83b4cd9bdea06bdec2788cda1388
R = AES_ECB(KEY, R) = 0xff2fb554a270978dfbabe531e968b151
Das Antwortpaket sieht dann so aus: 19 01 a0 03 b413fe 363c21 ff2fb554a270978dfbabe531e968b151
Darauf bekomme ich aber keinerlei Antwort mehr vom Sensor.
Ich wäre wirklich dankbar, wenn jemand eine Idee dazu hätte.
Mit freundlichen Grüßen
Sebastian
EDIT: copy&paste Fehler korrigiert
Hallo Sebastian,
Zitat
R = 0x2a0000000000 (+) 0x01a001b413fe363c2100 = 0x2a000000000001a01168ea141ed01702
Das glaube ich nicht, hier glaube ich an einen Copy&Paste Fehler ;-)
Zitat von: Sebastian89 am 23 September 2015, 12:28:56
Das gleiche jetzt für einen Fall meines Sensors. Ich möchte das Config-Start-Index Paket senden.
Schaltbefehl: 10 01 a0 01 b413fe 363c21 00050000000000
Challenge-Paket: 01 a0 02 363c21 b413fe 04 c97d08a5b9f5 00
Es wird der Default-Key verwendet.
CHALLENGE = 0xc97d08a5b9f5
KEY = Default-Key XOR CHALLENGE = 0x6d9e7d63096ad185f27c4e96fc273ae4
R = 0x2a0000000000 (+) 0x01a001b413fe363c2100 = 0x2a000000000001a001b413fe363c2100
R = AES_ECB(KEY, R) = 0x874b83b4cd9bdea06bdec2788cda1388
PARAMS = 0x050000000000
R = R XOR PARAMS = 0x824b83b4cd9bdea06bdec2788cda1388
R = AES_ECB(KEY, R) = 0xff2fb554a270978dfbabe531e968b151
Das Antwortpaket sieht dann so aus: 19 01 a0 03 b413fe 363c21 ff2fb554a270978dfbabe531e968b151
Wenn ich Deine Daten in meinen AES-Tester reinhacke bekomme ich folgendes:
msg 0x0000: 01 a0 01 b4 13 fe 36 3c 21 00 05 00 00 00 00 00 ......6<!.......
chl 0x0000: 01 a0 02 36 3c 21 b4 13 fe 04 c9 7d 08 a5 b9 f5 ...6<!.....}....
chl 0x0010: 00 .
rsp 0x0000: 01 a0 03 b4 13 fe 36 3c 21 ff 2f b5 54 a2 70 97 ......6<!./.T.p.
rsp 0x0010: 8d fb ab e5 31 e9 68 b1 51 ....1.h.Q
key 0x0000: 6d 9e 7d 63 09 6a d1 85 f2 7c 4e 96 fc 27 3a e4 m.}c.j...|N..':.
IV 0x0000: 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
P 0x0000: ff 2f b5 54 a2 70 97 8d fb ab e5 31 e9 68 b1 51 ./.T.p.....1.h.Q
Pd 0x0000: 82 4b 83 b4 cd 9b de a0 6b de c2 78 8c da 13 88 .K......k..x....
Pd^ 0x0000: 87 4b 83 b4 cd 9b de a0 6b de c2 78 8c da 13 88 .K......k..x....
Pd^d 0x0000: 2a 00 00 00 00 00 01 a0 01 b4 13 fe 36 3c 21 00 *...........6<!.
exp 0x0000: 01 a0 01 b4 13 fe 36 3c 21 00 ......6<!.
res 0x0000: 01 a0 01 b4 13 fe 36 3c 21 00 ......6<!.
MATCH!
Please be so kind and add the following bytes to the ACK message: 874b83b4
Das sieht also erstmal ganz gut aus :-)
Zitat
Darauf bekomme ich aber keinerlei Antwort mehr vom Sensor.
Ich wäre wirklich dankbar, wenn jemand eine Idee dazu hätte.
Hmm, das ist merkwürdig, eigentlich sollte der Sensor das Frame so akzeptieren. Ich kann mir eigentlich nur vorstellen, dass da irgendwas mit dem Timing nicht passt. Mit meiner Implementierung habe ich schonmal einen SCo erfolgreich angelernt und konfiguriert und die würde das gleiche Ergebnis bringen (zumindest bis auf den Zeitstempel).
Viele Grüße
Michael
Hallo Michael,
vielen Dank für deine Mühe. Jegliche andere Kommunikation hat mit meinem Aufbau bisher super funktioniert, daher würde ich einen Timing-Fehler eigentlich ausschließen.
Hättest du vielleicht die Möglichkeit den Anlernprozess des optischen Fensterkontakts mit einem bekannten Key zu loggen? Das wäre ultra hilfreich :-)
Eins noch, beim Drücken der Anlerntaste am Sensor bestätigt dieser direkt mit grüner LED, ich hätte eigentlich erwartet, dass er bis zum Config-End wartet?
Danke und mit freundlichen Grüßen
Sebastian
Hallo Sebastian,
Zitat von: Sebastian89 am 23 September 2015, 13:13:53
Hättest du vielleicht die Möglichkeit den Anlernprozess des optischen Fensterkontakts mit einem bekannten Key zu loggen? Das wäre ultra hilfreich :-)
Anlernprozess mit Defaultkey:
2015.09.23 13:33:49.889 4: CUL_Parse: COC A 0D 00 8610 37BBCE 000000 0601C80E3B -44.5
2015.09.23 13:33:50.158 4: CUL_Parse: COC A 0C 01 8641 37BBCE 000000 0101C83B -44.5
2015.09.23 13:34:02.261 4: CUL_Parse: COC A 1A 02 8400 37BBCE 000000 1000C74D455130323833353135808101013F -42.5
2015.09.23 13:34:02.486 4: CUL_send: COCAs 10 03 A001 68EA14 37BBCE 00050000000000
2015.09.23 13:34:02.666 4: CUL_Parse: COC A 11 03 A002 37BBCE 68EA14 040C8C3D87E2EA003C -44
2015.09.23 13:34:02.768 4: CUL_send: COCAs 19 03 A003 68EA14 37BBCE bbc0f59a516ad75880ecb04da31a0b90
2015.09.23 13:34:02.948 4: CUL_Parse: COC A 0E 03 8002 37BBCE 68EA14 0084E3C08E3B -44.5
2015.09.23 13:34:03.049 4: CUL_send: COCAs 13 04 A001 68EA14 37BBCE 000802010A680BEA0C14
2015.09.23 13:34:03.230 4: CUL_Parse: COC A 11 04 A002 37BBCE 68EA14 04664939D95741002B -52.5
2015.09.23 13:34:03.332 4: CUL_send: COCAs 19 04 A003 68EA14 37BBCE ba9caa5967dd5c370fddd3e28d6d42d8
2015.09.23 13:34:03.512 4: CUL_Parse: COC A 0E 04 8002 37BBCE 68EA14 000680474037 -46.5
2015.09.23 13:34:03.613 4: CUL_send: COCAs 0B 05 A001 68EA14 37BBCE 0006
2015.09.23 13:34:03.790 4: CUL_Parse: COC A 11 05 A002 37BBCE 68EA14 049032B7B781B40037 -46.5
2015.09.23 13:34:03.892 4: CUL_send: COCAs 19 05 A003 68EA14 37BBCE 6dfa94dfe3861466d45323672e4ac76f
2015.09.23 13:34:04.093 4: CUL_Parse: COC A 0E 05 8002 37BBCE 68EA14 00828E667D37 -46.5
Zitat
Eins noch, beim Drücken der Anlerntaste am Sensor bestätigt dieser direkt mit grüner LED, ich hätte eigentlich erwartet, dass er bis zum Config-End wartet?
Hmm, er hat gerade bis zum Ende geblinkt, bilde ich mir ein.
Viele Gruesse
Michael
Hallo Michael,
vielen Dank für deine kompetente Hilfe.
Es gibt tatsächlich ein Timeout bzgl. der AES-Antwort. Ich sende jetzt etwas früher und alles funktioniert wie erwartet.
Mit freundlichen Grüßen
Sebastian
Moin, ich versuche gerade die eq3-Firmware-Dateien zu verstehen, bin soweit gekommen, dass diverse Dateien in dem gleichen groben Format sind:
Blöcke von "LLLL daten CCCC" wobei LLLL die länge der Daten ist, und CCCC ein crc16 über die Daten.
Die Daten sind immer vielfache von 16 lang.
Der erste Block ist meistens zwischen 12 und 17 *16 bytes lang, danach folgt immer ein 1*16 block abwechselnd mit einem 17*16 block - eine pagesize ist 16*16 bytes, ich vermute mal die 17*16 kommen daher durch einen AES IV header oder so etwas.
In dem Format sind die .eq3-Dateien sowie auch die CCU-Firmwares (hss_comm.enc etc.)
Kennt sich jemand damit aus hier zufällig?