Update #4 almost impossible to fix

Hey Guys,

it has been a while since my last update. It was a busy week an unfortunately not a good one for the proxy.

I managed to patch the certificate pinning out of the App to be able to read the SSL encrypted traffic and thought that from now on, it would be easy to get the proxy up and running again.

I was wrong. I was able to reverse engineer the new API but when it comes to play the actual stream I always got the already mentioned Forbidden response from the server. Until yesterday I was not sure what is the problem but then I discovered, that there is always a request on a port directly on the device.

Calling internal SSL Proxy

Calling internal SSL Proxy

What Vodafone is doing here is, they are proxying the stream through an internal SSL-Proxy. This is kind of a a VPN which secures the complete communication of the stream.

I am not able to see what happens inside of this secure connection.

There is a only slight chance that I am able to find some solutions in the source of the Android App, but it is very hard. Vodafone uses a SSL-Proxy package provided by Ineoquest and I am not able to disassemble this part of the code, because it is encrypted.

I am sorry but I think they found an very effective way from preventing us watching TV on other devices than the allowed ones.

Best regards,
André

15 thoughts on “Update #4 almost impossible to fix

  1. siedenburg says:

    Ich weiß nicht in wieweit es umsetzbar wäre, aber wie würde es aussehen, wenn man sich als app ausgibt, dann den videostream empfängt, und diesen dann im eigenen netz weitersendet, so dass man im prinzip eine art mitm durchführt?

    • Leider ist es nicht so einfach.
      In der gesicherten Blackbox in der App findet eine Authentifizierung des Streams statt, welche ich nicht umgehen kann.
      Daher kommt immer als Antwort vom Stream, dass ich nicht befugt wäre.

      Beste Grüße,
      André

  2. Hi André,

    na ich geb die Hoffnung noch nicht auf. 😉

    Dein Proxy hat echt super funktioniert und vieleicht kommt bei Vodafone doch noch das große “vertriebliche” Erwachen, sollten sie die Chancen die in solchen Möglichkeiten liegen erkennen. *daumenhoch*

    Ich drücke uns die Daumen. 🙂

    Viele Grüße,
    Stefan

  3. Jonas says:

    Das klingt ja echt blöde. Fand die Möglichkeit so schön damals.
    Ist es denn möglich Android in einer VM zu installieren, die App zu laden und dann da zu gucken? Wäre halt alles andere als komfortabel aber es wäre eine Möglichkeit.

    • Hey Jonas,
      leider ist auch das nicht möglich.
      Beim sichten des Quellcodes der App fiel mir recht zeitig eine Stelle bei der Generierung der UDID auf, welche auf einen exakten Wert prüft.
      Die UDID ist ein Identifier, welcher Vodafone erlaubt dein Gerät zu erkennen. Der Wert gegen den geprüft wird sind die ersten Zeichen des Identifiers einer jeden Android VM.
      Wenn dieser Wert gefunden wird, quittiert die App ihren Dienst 🙁

      Beste Grüße,
      André

      • Jonas says:

        Och menno. Na dann muss ich wohl mit AirServer o.Ä. arbeiten und es übers iPhone laufen lassen und auf den PC re­s­pek­ti­ve auf den Fernseher streamen.
        Trotzdem danke für deine Mühe. Vielleicht wird es ja doch noch was 😉

      • Kevin says:

        Hi André, schade dass es sich so schwer gestaltet.
        Aber auf meinem Windows Notebook läuft über den Android-Emulator “Bluestacks” die Kabel Deutschland App ohne Probleme. Vielleicht ist das für den Einen oder Anderen interessant.

        Leider habe ich noch keinen Android Emulator für Openelec auf dem Raspberry Pi gefunden.

      • Kanarienvogel says:

        Hallo André,

        ich glaube zu meinen, welche Stelle du meinst mit der Prüfung auf die exakte UUID.

        Wenn es die Stelle ist, dann handelt es sich um eine Prüfung auf die UUID “9774d56d682e549c”, diese wird wohl teilweise im Emulator, einigen älteren Phones und Custom Roms verwendet – oder auch durch einen Bug.

        Sehr ähnlicher – oder der selbe – aber kommentierter Code ist hier nachzulesen: http://developed.kasa.nu/2011/10/get-android-deviceid-simple-enought/

        Kurzum: Das mit der exakten UUID ist kein Security Feature im eigentlichen Sinne sondern ein Check um im Zweifelsfall die IMEI (?) zur Identifikation zu verwenden.

        Viele Grüße
        Vooogel

      • Six ans d'accord, mais avec une grosse interruption quand même, mais je te la crédite sans hésiter, vu que c'est tellement bon que des personnes comme toi soient encore là…

  4. krap0w says:

    Hallo Andre,

    gerade wollte ich mir deinen Proxy anschauen, um das Protokoll als MITM-Proxy unter .NET zu implementieren, als ich dieses Posting sah.

    Das klingt bis hierhin sehr interessant. Könntest du mir evtl. deine vom cert-pinning befreite apk/iOs-Binary zukommen lassen? Es scheint mir einige versuche wert zu sein, die einzelnen Verbindungen, Layer für Layer abzuwickeln und/oder die Ressourcen der apk/binary zu untersuchen

    • Hey,
      ich kann dir gern die bereinigte APK sowie eine decompilierte Version mit Pseudo-Java-Code zukommen lassen.
      Schreib mir kurz eine mail an andre at freshest.me dann bekommst du die Files 😉

      Beste Grüße,
      André

  5. Lars says:

    Hey André,

    Wie schreitet die Entwicklung voran?

    Könnte man nicht eine “echte” UDID verwenden und diese in den “Emulator” eingeben (ähnlich wie mit den Zugangsdaten)?

    Das würde bedeuten, jeder müsste zusätzlich die App auf einem device installieren und die UDID Auslesen, diese dann in den Emulator-Proxy mit den zugangsdaten eingeben und der Stream könnte starten?

    • Hey Lars,

      so einfach ist es leider nicht.
      Wie in meinem letzten Post hier bereits geschrieben, liegt es nicht nur an der UDID sondern daran, dass KD mittlerweile den Stream in einem Container lädt, welcher es mir nicht mehr erlaubt die Urls zu den Streams zu extrahieren.
      Leider muss ich gestehen, dass ich mich in den letzten Monaten nicht mehr an das Thema gesetzt habe 🙁
      Der Code ist komplett auf github, wenn du interesse hast oder jemanden kennst, würde ich mich freuen, wenn jemand mich unterstützt.

      Beste Grüße,
      André

      • Lars says:

        Hey André,

        schade,
        Quellcode lesen und verstehen ist auch noch was anderes als Container auslesen und extrahieren, leider bin ich nichtmal im lesen und verstehen wirklich gut.

        Ich habe mal probiert die Android App “Vodafone Kabel TV” auf meinem FireTV zu installieren, leider ist diese NUR für Touch-Eingabe ausgelegt, und das kann der FireTV nicht :-/ Würde das funtionieren wäre für mich und für manche andere das Problem bestimmt schon gelöst. Aber das beinhaltet auch die App Auseinander zu nehmen und die Oberfläche anders zu gestalten :-/

        Auf dem PC gucken wäre auch ziehmlich gut, aber für mich nicht notwendig.

        Ich denke das ich mir demnächst einfach einen USB-DVB-C Stick bestellen werde der Linux Kompatibel ist, und werde den in verbindung mit einem Raspberry zu einem Kabel-TV-Netzwerk Server machen… und so die Streams innerhalb meines Netzes zu verteilen.

        Ich hoffe das du da trotzdem weiter kommst und hoffentlich die “Erleuchtung” zum lösen des Problems findest.
        Falls ich jemanden zufällig kennen lerne der ´dir möglicherweise helfen kann, leite ich fröhlich weiter 🙂

        Gruß, Lars

        • Hey Lars,
          ich hab eben auch noch mal mit Bluestacks rumgespielt, in der Hoffnung, die App auf meinem mac laufen zu lassen.
          Leider keine Chance 🙁
          Die Idee mit dem DVB-C Stick ist nicht verkehrt. Bin auch vor einer weile auf die XBOX mit einem Stick umgestiegen, so kann ich von überall den Stream sehen, solang ich die XBOX angeschaltet bekomme 😉

          Ich werde dennoch noch etwas weiter probieren, eventuell kommt die Eingebung ja noch.

          Beste Grüße,
          André

Leave a Reply

Your email address will not be published. Required fields are marked *