Reverse Engineering: (Android .dex) und HTTP API-Signatur
Guten Tag Leute.
Ich hoffe, mir kann hier jemand weiter helfen. Ich bin leider mit meinen Möglichkeiten so gut wie am Ende.
Bitte lasst mich vorab gesagt haben, dass ich keine illegalen Zwecke verfolge!
Folgendes Problem/Vorgeschichte:
Ich habe ein 7" Android-System in meinem Auto installiert. Dieses kommuniziert über die MCU mit der Canbus-Box (Simple Soft) und diese wiederum mit dem Fahrzeug-CAN. Die Informationen von z.B. offenen Türen, Klima- und Lichtsteuerung, Außentemperatur) werden mir ohne weiteres mitgeteilt. Probleme gibt es allerdings mit dem Radio-Bedienteil (Tastenfeld). Dieses erkennt nach einer Umprogrammierung der MCU die Tasten nicht mehr richtig, sie werden falsch zugewiesen (z.B. aus "Zurück" wird "Stumm/Mute") oder beim Anlernen der Tasten werden vorhandene Einstellungen überschrieben ("CONFIG" soll die Android-Einstellungen aufrufen, "TONE" den Equalizer; wird "CONFIG" angelernt, wird z.B. "TONE" überschrieben.)
Das Problem ist erst aufgetreten, nachdem die MCU ab Werk der Chinesen neu auf mein Fahrzeugmodell abgestimmt wurde, welches ich (dummerweise) selbst durchgeführt habe. Die Programmierung erfolgt durch die Android-App "Car Choose", welche die entsprechende MCU, APK (für Klima etc.) und Logo von einem chinesischen Server bezieht.
Mein Vorhaben:
Ich möchte unbedingt wieder auf die Werks-MCU der Chinesen (Auslieferungszustand) zurück setzen. Leider habe ich davon weder einen Screenshot noch weitere Informationen. Der russische Händler (und dessen Techniker) können mir scheinbar keinen richtigen Support anbieten. Ich habe sämtliche Foren durchkämmt (u.a. 4PDA, RedMOD, XDA) und bin bis jetzt auf keine Lösung gestoßen.
Mein Fortschritt:
Nun, da sich die Werks-MCU nicht so leicht beziehen lässt, habe ich mit IDA die Car Choose Anwendung auseinander genommen und versuche seitdem zu verstehen, welche Bedeutung folgende Signatur ("sig":"") im http-body hat. Dank Proxymon konnte ich die http-Anfragen aufzeichnen. Was ich bis jetzt feststellen konnte, dass diese Signatur scheinbar keinen Datum/Zeitstempel besitzt. Die folgende Anfrage lässt sich zu jeder Zeit aufrufen.
Hat jemand eine Idee, welchen Algorythmus diese Signatur besitzt und wie sie sich zusammen setzen könnte? Sie scheint wie erwähnt unabhängig von Datum und Uhrzeit von der Car Choose App generiert worden zu sein. Leider sind meine Möglichkeiten in IDA begrenzt und ich finde dazu keine näheren Informationen.
Ich hoffe, mir kann hier jemand weiter helfen. Ich bin leider mit meinen Möglichkeiten so gut wie am Ende.
Bitte lasst mich vorab gesagt haben, dass ich keine illegalen Zwecke verfolge!
Folgendes Problem/Vorgeschichte:
Ich habe ein 7" Android-System in meinem Auto installiert. Dieses kommuniziert über die MCU mit der Canbus-Box (Simple Soft) und diese wiederum mit dem Fahrzeug-CAN. Die Informationen von z.B. offenen Türen, Klima- und Lichtsteuerung, Außentemperatur) werden mir ohne weiteres mitgeteilt. Probleme gibt es allerdings mit dem Radio-Bedienteil (Tastenfeld). Dieses erkennt nach einer Umprogrammierung der MCU die Tasten nicht mehr richtig, sie werden falsch zugewiesen (z.B. aus "Zurück" wird "Stumm/Mute") oder beim Anlernen der Tasten werden vorhandene Einstellungen überschrieben ("CONFIG" soll die Android-Einstellungen aufrufen, "TONE" den Equalizer; wird "CONFIG" angelernt, wird z.B. "TONE" überschrieben.)
Das Problem ist erst aufgetreten, nachdem die MCU ab Werk der Chinesen neu auf mein Fahrzeugmodell abgestimmt wurde, welches ich (dummerweise) selbst durchgeführt habe. Die Programmierung erfolgt durch die Android-App "Car Choose", welche die entsprechende MCU, APK (für Klima etc.) und Logo von einem chinesischen Server bezieht.
Mein Vorhaben:
Ich möchte unbedingt wieder auf die Werks-MCU der Chinesen (Auslieferungszustand) zurück setzen. Leider habe ich davon weder einen Screenshot noch weitere Informationen. Der russische Händler (und dessen Techniker) können mir scheinbar keinen richtigen Support anbieten. Ich habe sämtliche Foren durchkämmt (u.a. 4PDA, RedMOD, XDA) und bin bis jetzt auf keine Lösung gestoßen.
Mein Fortschritt:
Nun, da sich die Werks-MCU nicht so leicht beziehen lässt, habe ich mit IDA die Car Choose Anwendung auseinander genommen und versuche seitdem zu verstehen, welche Bedeutung folgende Signatur ("sig":"") im http-body hat. Dank Proxymon konnte ich die http-Anfragen aufzeichnen. Was ich bis jetzt feststellen konnte, dass diese Signatur scheinbar keinen Datum/Zeitstempel besitzt. Die folgende Anfrage lässt sich zu jeder Zeit aufrufen.
http://api.mcu.cardoor.cn/move/mcu/queryRelationConfig
POST /move/mcu/queryRelationConfig HTTP/1.1
Host: api.mcu.cardoor.cn
Content-Type: application/json
Charset: UTF-8
Content-Length: 168
User-Agent: Dalvik/2.1.0 (Linux; U; Android 9; Octa - TS9 Build/OPM2.171019.012)
Connection: Keep-Alive
Accept-Encoding: gzip
{"appid":"dfsgherthdfghkj6o78tdftyw4uyrtyj","id":"11","language":"de-DE","level":"1","ratio":"0","remark":"2","resourcesId":"","sig":"af3a3dcc6107fb5ad137ec5823cc7176"}
Hat jemand eine Idee, welchen Algorythmus diese Signatur besitzt und wie sie sich zusammen setzen könnte? Sie scheint wie erwähnt unabhängig von Datum und Uhrzeit von der Car Choose App generiert worden zu sein. Leider sind meine Möglichkeiten in IDA begrenzt und ich finde dazu keine näheren Informationen.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 3348846875
Url: https://administrator.de/forum/reverse-engineering-android-dex-und-http-api-signatur-3348846875.html
Ausgedruckt am: 21.03.2025 um 01:03 Uhr
16 Kommentare
Neuester Kommentar
Konkret würde mir da erstmal auffallen - Differenz zwischen 2012 und 2015, gab es da ggf. dazwischen einen Wechsel des Moduls?
Generell ist auch die Frage, wie wird die MCU angesprochen. Ich weiss es noch von meinem 2015er Mazda, da war am Anfang das Tweaken sehr easy und wurde immer mehr blockiert. GGf. ist das derselbe Effekt?
Hast du vielleicht einen Opeltechniker zu Hand, der da mal mit der Diagnose rangeht? ggf reichen auch Dinge wie OBD Analysen, die für schmales Geld machbar sind.
Generell ist auch die Frage, wie wird die MCU angesprochen. Ich weiss es noch von meinem 2015er Mazda, da war am Anfang das Tweaken sehr easy und wurde immer mehr blockiert. GGf. ist das derselbe Effekt?
Hast du vielleicht einen Opeltechniker zu Hand, der da mal mit der Diagnose rangeht? ggf reichen auch Dinge wie OBD Analysen, die für schmales Geld machbar sind.
Zitat von @Winstar:
Gibt es eine Möglichkeit herauszufinden, wie sich diese Signatur zusammen setzen könnte?
Gibt es eine Möglichkeit herauszufinden, wie sich diese Signatur zusammen setzen könnte?
Aus den signierten Daten und dem Schlüssel, also nur durch Analyse der Anwendung zu bestimmen. Wenn man HMAC vermutet, kann man ja danach suchen. Oder die signierten Daten verfolgen.
Also,
das was hinter "sig:" steht ist ein einfacher MD5 Hash, also nichts mit "Secret Key"
.
Als erstes wird ein TreeMap-Objekt erstellt, das aus sich aus den folgenden Bestandteilen zusammensetzt
Diese wird dann an die Funktion com/tw/carchoose/upgrade/utils/NetworkUtils;->getSig übergeben. Die Funktion wandelt das TreeMap Objekt dann mit einem while loop in ein Stringbuilder-Objekt (Objekt um Strings effizient zusammenzusetzen) um, bei dem die Values aneinander gehangen werden und am Ende das ganze als ein langer String zurückgegeben wird.
Das Ergebnis der Funktion wird seinerseits an ein StringBuilder Objekt angehängt zusammen mit einer Konstanten "dfsgherthdfghkj5j6o78tdftyw4uyr". Dieses StringBuilder-Objekt wird dann zu einem String umgewandelt und daraus wird dann der finale MD5 Hash erstellt der in der property "sig" im JSON-String des POST Requests landet.
Diese Prozeduren finden hauptsächlich in den Klassen com/tw/mcudebug/MCUService/MCUService und com/tw/carchoose/upgrade/utils/NetworkUtils statt.
Updatefiles werden dann so wie ich das auf den ersten Blick sehe unter der Base-URL
in der jeweilig angeforderten Version heruntergeladen.
Vielleicht hilft dir das bei dem Kram aus der Bucht weiter
.
Falls du das Disassembly der App brauchst (ressources und SMALI Files), kurz Bescheid geben dann schick ich dir einen Link zum ZIP.
Grüße Uwe
p.s. der Popel gehört doch eigentlich in die Presse 😀. Duck und wech ...
das was hinter "sig:" steht ist ein einfacher MD5 Hash, also nichts mit "Secret Key"
Als erstes wird ein TreeMap-Objekt erstellt, das aus sich aus den folgenden Bestandteilen zusammensetzt
file: <output-path>
mcu_version : <mcu_version>
sys_version: <sys_version>
Das Ergebnis der Funktion wird seinerseits an ein StringBuilder Objekt angehängt zusammen mit einer Konstanten "dfsgherthdfghkj5j6o78tdftyw4uyr". Dieses StringBuilder-Objekt wird dann zu einem String umgewandelt und daraus wird dann der finale MD5 Hash erstellt der in der property "sig" im JSON-String des POST Requests landet.
Diese Prozeduren finden hauptsächlich in den Klassen com/tw/mcudebug/MCUService/MCUService und com/tw/carchoose/upgrade/utils/NetworkUtils statt.
Updatefiles werden dann so wie ich das auf den ersten Blick sehe unter der Base-URL
http://update.cardoor.cn/terminal/software/update/car/android/
Vielleicht hilft dir das bei dem Kram aus der Bucht weiter
Falls du das Disassembly der App brauchst (ressources und SMALI Files), kurz Bescheid geben dann schick ich dir einen Link zum ZIP.
Grüße Uwe
p.s. der Popel gehört doch eigentlich in die Presse 😀. Duck und wech ...
Zitat von @Winstar:
Hat denn hier niemand eine Idee oder kann mir die Vorgehensweise anhand eines Beispiels zeigen?
Hat denn hier niemand eine Idee oder kann mir die Vorgehensweise anhand eines Beispiels zeigen?
Lerne wie man Java programmiert dann verstehst du auch meine detaillierte Beschreibung dazu oben und auch den Smali-Code und wie sich die Signatur zusammensetzt, ist im Endeffekt nur eine Aneinanderreihung der entsprechenden Strings in der richtigen Reihenfolge die man dann an die allseits bekannte MD5() Hashing-Funktion übergibt.
Das berechnen der Signatur wird dich aber trotzdem auch nicht viel weiter bringen, denn die Links lassen sich auch so ohne die Signatur abrufen du musst nur den richtigen Dateinamen und URL zusammensetzen.
https://mobsecguys.medium.com/smali-assembler-for-dalvik-e37c8eed22f9
Ohne grundlegendes Programmierverständnis, wirst du hier nicht weiterkommen auch wenn ich es dir noch detaillierter erklären würde, du würdest es mangels Programmierkenntnisse trotzdem nicht verstehen. Mangels vorliegendem Gerät und Testmöglichkeit ist meine Zeit dann doch ehrlich gesagt zu schade für so einen China-Schrott. Sorry, aber wer sich den Mist selbst einbrockt und sich die Originaldaten vorher nicht notiert und den Flash nicht in eine Datei sichert muss ihn auch auslöffeln.
Von meiner Seite aus wünsche ich trotzdem viel Erfolg. 🖖
Grüße Uwe