Reverse Engineering der Subway-Android-App

Es ist großartig zu sehen, dass das Zertifikat-Pinning zunehmend in Android-Apps zum Einsatz kommt. Wenn ich auf eine App stoße, die beim Versuch, Anfragen weiterzuleiten, Verbindungsfehler auslöst, neige ich dazu, tiefer in die Materie einzutauchen. Das war der Fall, als ich kürzlich die Subway-App nutzte. Die Umkehrung der APK ergab neben einigen anderen interessanten Erkenntnissen auch das Anheften von Zertifikaten.

Das Starten der App während der Weiterleitung von Anfragen verursachte diesen Fehler:

Das Anheften ist einfach zu umgehen. Ich begann damit, die App zu dekompilieren und den Quellcode zum Anheften von Schlüsselwörtern zu analysieren. Ich habe tatsächlich Pinning-Implementierungen in zwei separaten Klassen gefunden, die implementiert wurden X509TrustManager. Hier ist eine der Methoden, die das Anheften erzwungen haben:

 // Code removed at request of Subway leadership

Um dies zu umgehen, musste einfach eine Return-Anweisung in den Smali-Code eingefügt werden, um den Pinning-Code in der obigen Methode zu überspringen. Beachten Sie den Zusatz von 

Rückkehr-nichtig Erklärung unten:

 // Code removed at request of Subway leadership

Nachdem ich die App neu kompiliert und installiert hatte, war ich überrascht, diesen neuen Fehler zu sehen:

Subway verwendete einen benutzerdefinierten Prozess zur Überprüfung der App-Signatur, um eine Umkehrung ihrer APK zu verhindern. Ich suchte in der Quelle nach Erwähnungen dieses Prozesses und führte ihn auf die folgende Methode zurück:

 // Code removed at request of Subway leadership

Dies war ein interessanter Versuch, Reverse Engineering zu verhindern, obwohl es tatsächlich nur zu einer geringfügigen Verzögerung führte. Um diesen Prozess zu umgehen, habe ich einfach eine Zeile hinzugefügt, um die Ausführung der Methode zu überspringen, indem ich eine weitere hinzufüge Rückkehr-nichtig Linie, ähnlich dem Pinning-Bypass-Prozess oben.

 // Code removed at request of Subway leadership

Nach dem Neukompilieren und Installieren der App konnte ich Anfragen erfolgreich weiterleiten:

Bei meiner Recherche bin ich darüber gestolpert dieser Reddit-Beitrag. Anscheinend stellte Subway auch fest, ob das Gerät des Benutzers gerootet war. Ich habe mich in der Quelle umgesehen und Erwähnungen von Root-Erkennungsmethoden bestätigt.

 // Code removed at request of Subway leadership

Dies ist ein großartiges Beispiel dafür, dass eine App die Sicherheit sehr ernst nimmt, aber ich bin mir nicht ganz sicher, was hinter dem Root-Überprüfungsprozess steckt. Obwohl Zertifikats-Pinning- und Signaturüberprüfungstechniken im Allgemeinen eine gute Idee sind, behindern sie den Reverse-Engineering-Prozess nur geringfügig.