Autor Thema: AES Reverseengineering  (Gelesen 12551 mal)

Offline jab

  • Full Member
  • ***
  • Beiträge: 337
AES Reverseengineering
« am: 12 Februar 2014, 13:51:29 »
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


Offline mgernoth

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 643
Antw:AES Reverseengineering
« Antwort #1 am: 12 Februar 2014, 14:50:30 »
Hi,

so dann versuche ich mal Zusammenzufassen, was ich vor einiger Zeit herausgefunden habe:

- 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

Offline jab

  • Full Member
  • ***
  • Beiträge: 337
Antw:AES Reverseengineering
« Antwort #2 am: 12 Februar 2014, 15:04:41 »
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.

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.

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

Offline mgernoth

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 643
Antw:AES Reverseengineering
« Antwort #3 am: 12 Februar 2014, 15:13:54 »
Hi,

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

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16371
  • s/fhem\.cfg/configDB/g
Antw:AES Reverseengineering
« Antwort #4 am: 12 Februar 2014, 15:46:34 »
- 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?
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Lesen gefährdet die Unwissenheit!

Offline mgernoth

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 643
Antw:AES Reverseengineering
« Antwort #5 am: 12 Februar 2014, 15:47:01 »
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

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16371
  • s/fhem\.cfg/configDB/g
Antw:AES Reverseengineering
« Antwort #6 am: 12 Februar 2014, 15:55:17 »
- Update des Regensensors. Möglicherweise ein AVR Controller.

Nein, ein STM8L151C8U6


« Letzte Änderung: 12 Februar 2014, 15:57:45 von betateilchen »
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Lesen gefährdet die Unwissenheit!

Offline Samsi

  • Sr. Member
  • ****
  • Beiträge: 580
Antw:AES Reverseengineering
« Antwort #7 am: 12 Februar 2014, 15:55:35 »
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
FHEM 5.5 / BBB Debian Wheezy

Homematic CFG-LAN

HM-Sec-MDIR / HM-Sec-SD / HM-Sec-WDS / HM-LC-Sw2-FM / HM-Sec-SC / HM-LC-Sw1PBU-FM / HM-SCI-3-FM / HM-Sec-Key / HM-RC-Key3-B / HM-LC-Dim1TPBU-FM /  HM-CC-RT-DN / HM-PBI-4-FM / HM-RC-Key4-2 / HM-ES-PMSw1-Pl / HM-LC-Sw4-WM

Offline jab

  • Full Member
  • ***
  • Beiträge: 337
Antw:AES Reverseengineering
« Antwort #8 am: 12 Februar 2014, 16:21:08 »
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 *)
« Letzte Änderung: 12 Februar 2014, 16:23:49 von jab »

Offline jab

  • Full Member
  • ***
  • Beiträge: 337
Antw:AES Reverseengineering
« Antwort #9 am: 12 Februar 2014, 16:23:25 »
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

Offline mgernoth

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 643
Antw:AES Reverseengineering
« Antwort #10 am: 12 Februar 2014, 16:38:54 »
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
« Letzte Änderung: 12 Februar 2014, 17:37:54 von mgernoth »

Offline jab

  • Full Member
  • ***
  • Beiträge: 337
Antw:AES Reverseengineering
« Antwort #11 am: 16 Februar 2014, 20:36:00 »
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

Offline martinp876

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 10782
Antw:AES Reverseengineering
« Antwort #12 am: 16 Februar 2014, 20:48:07 »
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

Offline jab

  • Full Member
  • ***
  • Beiträge: 337
Antw:AES Reverseengineering
« Antwort #13 am: 16 Februar 2014, 20:55:52 »
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

Offline mgernoth

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 643
Antw:AES Reverseengineering
« Antwort #14 am: 16 Februar 2014, 21:02:02 »
Hi,

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

 

decade-submarginal