Android APP - TCP Network Analysis

Dieses Thema im Forum "Support & Discussion" wurde erstellt von Menower, 6. August 2017.

  1. Menower

    Menower New Member

    Registriert seit:
    6. August 2017
    Beiträge:
    4
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Hallo zusammen,

    die Frage bezieht sich aktuell hauptsächlich auf den Netzwerk Paketen anstelle von AutoIT, habe leider kein besseres Unterforum gefunden und da mir damals hier schon geholfen wurde, wollte ich es nochmal versuchen.

    Bisher lag mein Hauptfokus auf Automatisierungen für Browsergames, weshalb das Paket sniffen und verstehen relativ simpel war, da es mir im Klartext angezeigt wurde.

    Nun wollte ich mich mal an einer simplen Android App versuchen (Idle game, klicken und 3 Stunden warten...).

    Ich habe mir die Android App "Packet Capture" heruntergeladen und ein Zertifikat installiert (fürs HTTPS).
    Beim Sniffen des Games habe ich festgestellt, dass eigtl. nur die Werbung im Hintergrund mittels SSL verschlüsselt wird und die für mich interessanten Pakete ohne (normale TCP und UDP Pakete).

    Wie gelingt es mir aber, die Daten welche hin und her gesendet werden zu interpretieren?
    Ich habe die normalen Pakete mal mit Wireshark gesnifft und wenn ich den TCP stream follow, dann erhalte eine solche Ausgabe:

    [​IMG]

    Nun meine Frage, wie gehe ich weiter?

    Ich habe die .apk mal entpackt und die *.dex Dateien dekompiliert, um mir zumindest etwas vom Code anzuschauen. Hier hatte ich gehofft auf ein decoding oder ähnliches zu stoßen, wurde aber nicht fündig.

    Da wenn ich z.B. eine Rangliste in dem Spiel öffne, dann müssten ja etliche Daten wie Name, Punkte, etc... empfangen werden, wie kann ich diese aus einem obigen dump herausfiltern?

    Vielen Dank im Voraus, hoffe ihr könnt mir helfen mein Verständnis fürs Netzwerk zu erweitern! :)
     
  2. Mastodon

    Mastodon New Member

    Registriert seit:
    1. Juli 2017
    Beiträge:
    10
    Zustimmungen:
    12
    Punkte für Erfolge:
    3
    Geschlecht:
    männlich
    Willkommen bei Codebot.de!

    Ich weiß nicht um welches Spiel es sich handelt und mit den jetzigen Informationen kann ich leider nicht viel anfangen, da diese zu wenig sind.

    Wenn die Pakete wirklich nicht verschlüsselt sind, kannst du schauen ob in den Paketen Strings (Usernamen, Chat-Nachrichten, usw.) enthalten sind.
    Wenn nicht sind die Pakete noch auf andere Weise verschlüsselt oder codiert.
    Wird dann aber trotzdem von Wireshark als normales TCP/IP-Paket gekennzeichnet.

    Suche weiter! Das ist denke ich das beste was du machen kannst. :)

    Richtig!
    Herausfiltern kannst du es erst, wenn du weißt wie das Protokoll aufgebaut ist, die Pakete identifizieren und verarbeiten kannst.
    Im Gegensatz zu HTTP ist dieses Protokoll (warscheinlich) nicht öffentlich bekannt und dokumentiert.
    Während du bei HTTP-Bots bereits die nötigen Funktionen in AutoIT hattest, musst du diesmal erst das Protokoll verstehen und dir deine eigene Bibliothek mit den nötigen Funktionen für das Protokoll schreiben.

    Für ein besseres Verständnis solltest du dich etwas mit Netzwerkprotokolle befassen. (OSI-Modell ist da hilfreich)

    Es ist komplexer und mehr Arbeit als einen Bot für das HTTP-Protokoll zu programmieren, aber man lernt dafür auch um einiges mehr! Lohnt sich also! :)
    Du musst also wie oben bereits erwähnt weiter im Source Code herumwühlen.

    Ein gutes Buch zum Thema Netzwerke ist außerdem das Buch "Computer-Netzwerke" von Harald Zisler oder diverse Wikipedia-Artikel zum Thema TCP/IP, IP, Netzwerkprotokolle, OSI-Modell usw.
    Die englische Wikipedia ist da meist besser und die Artikel sind ausführlicher geschrieben.
     
    Menower und 3HMonkey gefällt das.
  3. .:Error:.

    .:Error:. New Member

    Registriert seit:
    4. Juli 2017
    Beiträge:
    1
    Zustimmungen:
    1
    Punkte für Erfolge:
    3
    Geschlecht:
    männlich
    Wenn Du den Sourcecode schon hast und der nicht obfuskiert ist, solltest Du doch recht schnell erkennnen ob und welche Art von Encryption dort genutzt wird.
    Schau Dir einfach mal die Packet-Send Calls an und guck was als Parameter übergeben wird.
    Sollte die Obfuskation zu stark sein und der Sourcecode eher unleserlich sein, kannst Du die APP debuggen.
    (Bin mir nicht sicher wie schwierig so etwas bei APK-Dateien ist)
    Einfach auf die Send/Recv Funktion einen Breakpoint setzen und auf dem Stack schauen welche Parameter übergeben werden. Sollte dort immernoch etwas kryptisches stehen, dann einfach einen Breakpoint auf die Encrypt-Funktion und das gleiche Spiel dort anwenden.
     
    Menower gefällt das.
  4. Sam

    Sam New Member

    Registriert seit:
    4. Juli 2017
    Beiträge:
    14
    Zustimmungen:
    8
    Punkte für Erfolge:
    3
    Geschlecht:
    männlich
    Eine wichtige Info wäre, welchen Layer des OSI Modells du hier gesnifft hast. Wenn es Layer 1 ist, hast du hier die binären Daten, die auch über die Leitung kamen. Sollte es der TCP Inhalt sein, ist es schon deutlich weniger.
    Ich bin mir nicht sicher, was Wireshark mit dieser Ansicht dort genau darstellt. Wenn ich was mit Wireshark mache, baue ich mir einen schönen Filter zusammen, der dann die einzelnen Pakete einzeln auflistet.

    Jedenfalls ist im Wireshark nur der Inhalt des TCP Pakets interessant. Also der Payload von der TCP Ebene. TCP selbst und das darunter liegende IP Paket sind nur für die IP Adresse (im IP Paket) und den Port (im TCP Paket) nötig.
    Dann hast du den Inhalt, den du auch mit einer eigenen TCP Verbindung übertragen kannst. Den musst du dann eben interpretieren. Bei Web Anwendungen ist das meist ein HTTP Inhalt, bei Spielen meist doch ein eigenes Protokoll.

    Wenn der Inhalt verschlüsselt ist (SSL), dann kannst du das nicht einfach entschlüsseln. Im Grunde musst du dafür einen Man in the middle Spielen und selbst ein Zertifikat erstellen. Das muss nicht unbedingt ein signiertes sein, es muss nur dem Client zum Verschlüsseln reichen.
    Gewisser Maßen sendet dann das Spiel die Daten an dein MIDM Program und das kann den Inhalt dann entschlüsseln, da es das Zertifikat auch hat.
    Danach muss das wieder mit SSL an den originalen Server weitergeschickt werden.
    Dabei kann es nur zu Problemen kommen, wenn das Spiel SSL Pinning nutzt. Wird aber nicht all zu häufig gemacht.
     
    Menower und 3HMonkey gefällt das.
  5. Menower

    Menower New Member

    Registriert seit:
    6. August 2017
    Beiträge:
    4
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Danke für die Antworten, ich war etwas verhindert und habe nebenbei probiert weiterzukommen.

    @Mastodon und @.:Error:.
    Ich denke auch, dass ich die besten Chancen habe, wenn ich mir den Quellcode genauer anschaue und die Funktionen fürs Senden und Empfangen der Pakete finde. Habe nun schon etliche Stunden diesen Code durchforstet und bisher leider noch nicht fündig geworden, näheres dazu unten.

    @Sam
    Die Pakete wurden auf Ebene des (2. Schicht) Data-Link-Layer mitgeschnitten.
    Ich habe durch die Android App "Packet Capture" einen VPN konfiguriert und kann die SSL verschlüsselten Pakete mitlesen (nur über die App selbst und vorausgesetzt, der App entgehen keine Pakete). Ich sehe meine besten Chancen aber aktuell bei dem Quellcode, weshalb ich mich darauf fokussieren werde.

    Aktuell sitze ich immer noch an dem Code und suche und hoffe heute noch etwas schlauer zu werden...
    So sieht die Ordnerstruktur aus (besteht teils aus Standardbibliotheken von z.B. Android und teils aus eigengeschriebenen Klassen, welche einigermaßen leserlich sind):

    [​IMG]

    Ich sitze hier seit geraumer Zeit dran und hoffe, dass ich demnächst endlich fündig werde und einen Ansatz habe...
    Falls jemand mal reingucken könnte/möchte, wäre ich sehr dankbar sowie für alle anderen Tipps!

    Habe die originale .apk bei Dropbox hochgeladen:
    DL: https://www.dropbox.com/s/yln1co23av5m4m0/com.perblue.portalquest-2.apk?dl=0
    VT: https://www.virustotal.com/#/file/5...3d4047b1459bb81ec942fe7a5cddf5855d5/detection
    Dekompilieren mit: https://github.com/skylot/jadx/releases (sogar mit schöner GUI ../lib/jadx-gui-0.6.1.jar)
     
    Zuletzt bearbeitet: 12. August 2017
  6. krusty

    krusty New Member

    Registriert seit:
    1. Juli 2017
    Beiträge:
    17
    Zustimmungen:
    7
    Punkte für Erfolge:
    3
    Geschlecht:
    männlich
    Ort:
    Wadiya
    könntest du den source dumpen und vlt zum download anbieten? Hab ne gedrosselte Leitung und kann die 41mb nicht laden ^^
     
    Menower gefällt das.
  7. Sam

    Sam New Member

    Registriert seit:
    4. Juli 2017
    Beiträge:
    14
    Zustimmungen:
    8
    Punkte für Erfolge:
    3
    Geschlecht:
    männlich
    Retrofit? Das ist ja super!
    Das ist eine Library, mit der man REST APIs ansteuern kann. Wenn diese Library in der App ist, wird vermutlich irgendwo eine REST Schntitstelle angeboten. Dann musst du diese nur noch nachbauen.

    Retrofit gibt es glaubs auch für Java. Das heißt, du könntest die Klassen direkt übernehmen!
     
    Menower gefällt das.
  8. Menower

    Menower New Member

    Registriert seit:
    6. August 2017
    Beiträge:
    4
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
  9. Menower

    Menower New Member

    Registriert seit:
    6. August 2017
    Beiträge:
    4
    Zustimmungen:
    0
    Punkte für Erfolge:
    1
    Huh, das werde ich mir morgen nach der Arbeit direkt genauer anschauen :)

    Ich bin mir leider immer noch nicht sicher ob tatsächlich Retrofit verwendet wurde, weil ich leider mehrere Klassen gefunden habe, welche zum Versenden der Pakete genutzt werden könnten. Ich konnte in den "Spiel-Logik-Klassen" (die, welche von den Entwicklern geschrieben wurden, also gemeint sind damit z.B. keine Libs) bisher keinen eindeutigen Aufruf einer Bibliothek finden, welcher für das Versenden der Pakete oder den Aufbau der Verbindung verantwortlich ist.

    Danke für eure Hilfe :)
     

Diese Seite empfehlen

Die Seite wird geladen...