[Research] Mario Kart 8 - Decrypted Traffic

      [Research] Mario Kart 8 - Decrypted Traffic

      Hey,

      Ich hab mich gestern nochmal daran versucht, den Netzwerkverkehr von MK8 entschlüsselt mitzuschneiden.
      Mit dem function-patcher ist es Möglich auf der WiiU sich in Methoden einzuklinken und diese zu Manipulieren. Die Wii U bietet auch 2 Methoden namens "NSSLRead" und "NSSLWrite", die für verschlüsselten Netzwerkverkehr zuständig sind. Mein erster Ansatz war natürlich diese Funktionen zu manipulieren und von dem Verschlüsseln bzw. nach dem Entschlüsseln die Daten abzufangen.

      Jedoch verschlüsselt/entschlüsselt Mario Kart 8 die meisten Daten selbst und nutzt einfache sockets (+ sendto/recvfrom). Nur die MiiVerse Spielereien laufen über die NSSL Funktionen.

      Über einen kleinen Umweg bin ich dann auf die RC4 Encrypt/Decrypt function von dem Spiel gestoßen, wodurch sich immerhin ein Teil der verschlüsselten Daten entschlüsselt loggen lässt.

      Ich habe ein kleines tool als PoC geschrieben, welches sich in sendto/recvfrom sowie die RC4 Encrypt/Decrypt funktion eínhängt und mitloggt.
      Der Source Code ist hier: github.com/Maschell/nn_nex_logging_and_research


      Hat ansonsten schonmal jemand was in dieser Richtung versucht?

      (thread auf gbatemp: gbatemp.net/threads/research-m…decrypted-traffic.470620/)


      Gruß Maschell

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Maschell ()

      Ich habe ein 2 Tools in das repo geladen, mit deren Hilfe man leicht Funktionen in stripped .rpx's finden kann. Bisher fehlt noch eine gescheite Doku wie man genau diese verwendet, wenn aber jemand interesse hat, kann ich ihm gerne helfen.
      Aber nur hier mal als kleines Beispiel:
      puu.sh/vUb4E/bf8a5b928b.txt

      Kinnay hat auch parallel dazu angefangen sich damit zu beschäftigen und hat inzwischen ein Tool, mit dem er die Rankings von Spielen (derzeit Donkey Kong/Mario Kart 8) runterladen kann:
      github.com/Kinnay/NintendoClients

      Hab zudem auch noch eine Liste mit allen Spielen die ein Update auf NUS haben, non stripped .rpx's haben und die nn::nex lib verwenden.
      github.com/Maschell/nn_nex_log…_stripped_with_nn_nex.txt
      Eine genauere Liste mit den Versionsnummern für einige Spiele sind bei Kinnay im wiki:
      github.com/Kinnay/NintendoClie…/Network-Library-Versions

      Zudem gibt es noch eine "nn::pia" lib, die wohl über nn::nex drüber liegt und von MK8 verwendet wird. Minecraft verwendet diese auch, und hat eine non.stripped rpx, dort lassen sich die funktionen ablesen und später in MK8 zum hooken finden.
      Beispielsweise gibt auch dort die Funktionen "nn::pia::common::Crypto::Encrypt" "nn::pia::common::Crypto::Decrypt" die nochmal extra Daten verschlüsselt wenn man einen Raum joined/leaved.
      Der Rest vom P2P traffic (also z.B. während eines matches) scheint nicht extra verschlüsselt zu sein. Die reine Payload lässt sich über ein hook
      "nn::pia::transport::UnreliableProtocol::sendImpl" (für ausgehende)
      und
      "nn::pia::transport::UnreliableProtocol::Receive" (für eingehende)
      mitschneiden.

      Hooks für diese Funktionen (und mehr) habe ich zum WiiU Projekt hinzugefügt.