Translated ['src/mobile-pentesting/android-app-pentesting/README.md', 's

This commit is contained in:
Translator 2025-08-21 04:13:04 +00:00
parent 5588c8041e
commit f4917ed82e
3 changed files with 262 additions and 52 deletions

View File

@ -326,6 +326,7 @@
- [Android APK Checklist](mobile-pentesting/android-checklist.md)
- [Android Applications Pentesting](mobile-pentesting/android-app-pentesting/README.md)
- [Accessibility Services Abuse](mobile-pentesting/android-app-pentesting/accessibility-services-abuse.md)
- [Android Anti Instrumentation And Ssl Pinning Bypass](mobile-pentesting/android-app-pentesting/android-anti-instrumentation-and-ssl-pinning-bypass.md)
- [Android Applications Basics](mobile-pentesting/android-app-pentesting/android-applications-basics.md)
- [Android Task Hijacking](mobile-pentesting/android-app-pentesting/android-task-hijacking.md)
- [ADB Commands](mobile-pentesting/android-app-pentesting/adb-commands.md)

View File

@ -4,7 +4,7 @@
## Grundlagen der Android-Anwendungen
Es wird dringend empfohlen, diese Seite zu lesen, um die **wichtigsten Teile in Bezug auf die Android-Sicherheit und die gefährlichsten Komponenten in einer Android-Anwendung** zu kennen:
Es wird dringend empfohlen, diese Seite zu lesen, um die **wichtigsten Teile im Zusammenhang mit der Android-Sicherheit und die gefährlichsten Komponenten in einer Android-Anwendung** zu kennen:
{{#ref}}
android-applications-basics.md
@ -13,19 +13,19 @@ android-applications-basics.md
## ADB (Android Debug Bridge)
Dies ist das Hauptwerkzeug, das Sie benötigen, um sich mit einem Android-Gerät (emuliert oder physisch) zu verbinden.\
**ADB** ermöglicht die Steuerung von Geräten entweder über **USB** oder **Netzwerk** von einem Computer aus. Dieses Dienstprogramm ermöglicht das **Kopieren** von Dateien in beide Richtungen, die **Installation** und **Deinstallation** von Apps, die **Ausführung** von Shell-Befehlen, das **Sichern** von Daten, das **Lesen** von Protokollen und andere Funktionen.
**ADB** ermöglicht die Steuerung von Geräten entweder über **USB** oder **Netzwerk** von einem Computer aus. Dieses Dienstprogramm ermöglicht das **Kopieren** von Dateien in beide Richtungen, die **Installation** und **Deinstallation** von Apps, die **Ausführung** von Shell-Befehlen, das **Sichern** von Daten, das **Lesen** von Protokollen und viele andere Funktionen.
Werfen Sie einen Blick auf die folgende Liste von [**ADB-Befehlen**](adb-commands.md), um zu lernen, wie man adb verwendet.
## Smali
Manchmal ist es interessant, den **Anwendungscode zu ändern**, um auf **versteckte Informationen** (vielleicht gut obfuskierte Passwörter oder Flags) zuzugreifen. Dann könnte es interessant sein, die apk zu dekompilieren, den Code zu ändern und ihn neu zu kompilieren.\
[**In diesem Tutorial** können Sie **lernen, wie man eine APK dekompiliert, Smali-Code ändert und die APK** mit der neuen Funktionalität **neu kompiliert**](smali-changes.md). Dies könnte als **Alternative für mehrere Tests während der dynamischen Analyse** sehr nützlich sein, die präsentiert werden. Denken Sie daran, **diese Möglichkeit immer im Hinterkopf zu behalten**.
Manchmal ist es interessant, den **Anwendungscode zu ändern**, um auf **versteckte Informationen** (vielleicht gut obfuskierte Passwörter oder Flags) zuzugreifen. Dann könnte es interessant sein, die APK zu dekompilieren, den Code zu ändern und sie neu zu kompilieren.\
[**In diesem Tutorial** können Sie **lernen, wie man eine APK dekompiliert, Smali-Code ändert und die APK** mit der neuen Funktionalität **neu kompiliert**](smali-changes.md). Dies könnte sehr nützlich sein als **Alternative für mehrere Tests während der dynamischen Analyse**, die präsentiert werden. Denken Sie daran, **diese Möglichkeit immer im Hinterkopf zu behalten**.
## Weitere interessante Tricks
- [Standort im Play Store fälschen](spoofing-your-location-in-play-store.md)
- [Shizuku Privileged API (ADB-basierter privilegierter Zugriff ohne Root)](shizuku-privileged-api.md)
- [Shizuku Privileged API (ADB-basierter nicht-root privilegierter Zugriff)](shizuku-privileged-api.md)
- [Ausnutzen unsicherer In-App-Update-Mechanismen](insecure-in-app-update-rce.md)
- [Missbrauch von Barrierefreiheitsdiensten (Android RAT)](accessibility-services-abuse.md)
- **APK herunterladen**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd)
@ -65,7 +65,7 @@ Bitte, [**lesen Sie hier, um Informationen über verschiedene verfügbare Decomp
### Suche nach interessanten Informationen
Durch einen Blick auf die **Strings** der APK können Sie nach **Passwörtern**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **API**-Schlüsseln, **Verschlüsselung**, **Bluetooth UUIDs**, **Tokens** und allem Interessanten suchen... suchen Sie sogar nach Codeausführungs-**Backdoors** oder Authentifizierungs-Backdoors (hardcodierte Admin-Anmeldeinformationen für die App).
Wenn Sie sich die **Strings** der APK ansehen, können Sie nach **Passwörtern**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **API**-Schlüsseln, **Verschlüsselung**, **Bluetooth UUIDs**, **Tokens** und allem Interessanten suchen... suchen Sie sogar nach Codeausführungs-**Backdoors** oder Authentifizierungs-Backdoors (hardcodierte Admin-Anmeldeinformationen für die App).
**Firebase**
@ -77,9 +77,9 @@ Die **Untersuchung der _Manifest.xml_ und _strings.xml_**-Dateien einer Anwendun
**Schwachstellen**, die aus der **Manifest.xml** identifiziert wurden, umfassen:
- **Debuggable Anwendungen**: Anwendungen, die im _Manifest.xml_ als debuggable (`debuggable="true"`) festgelegt sind, stellen ein Risiko dar, da sie Verbindungen zulassen, die zu einer Ausnutzung führen können. Für ein besseres Verständnis, wie man debuggable Anwendungen ausnutzen kann, verweisen Sie auf ein Tutorial zum Finden und Ausnutzen von debuggable Anwendungen auf einem Gerät.
- **Debuggable Anwendungen**: Anwendungen, die im _Manifest.xml_ als debuggable (`debuggable="true"`) festgelegt sind, stellen ein Risiko dar, da sie Verbindungen zulassen, die zu einer Ausnutzung führen können. Für ein besseres Verständnis, wie man debuggable Anwendungen ausnutzt, verweisen Sie auf ein Tutorial zum Finden und Ausnutzen von debuggable Anwendungen auf einem Gerät.
- **Backup-Einstellungen**: Das Attribut `android:allowBackup="false"` sollte ausdrücklich für Anwendungen, die mit sensiblen Informationen umgehen, festgelegt werden, um unbefugte Datenbackups über adb zu verhindern, insbesondere wenn USB-Debugging aktiviert ist.
- **Netzwerksicherheit**: Benutzerdefinierte Netzwerksicherheitskonfigurationen (`android:networkSecurityConfig="@xml/network_security_config"`) in _res/xml/_ können Sicherheitsdetails wie Zertifikat-Pins und HTTP-Verkehrseinstellungen spezifizieren. Ein Beispiel ist das Zulassen von HTTP-Verkehr für bestimmte Domains.
- **Netzwerksicherheit**: Benutzerdefinierte Netzwerksicherheitskonfigurationen (`android:networkSecurityConfig="@xml/network_security_config"`) in _res/xml/_ können Sicherheitsdetails wie Zertifikatspinning und HTTP-Verkehrseinstellungen spezifizieren. Ein Beispiel ist das Zulassen von HTTP-Verkehr für bestimmte Domains.
- **Exportierte Aktivitäten und Dienste**: Die Identifizierung exportierter Aktivitäten und Dienste im Manifest kann Komponenten hervorheben, die missbraucht werden könnten. Eine weitere Analyse während des dynamischen Testens kann aufzeigen, wie man diese Komponenten ausnutzen kann.
- **Content Provider und FileProviders**: Exponierte Content Provider könnten unbefugten Zugriff oder Modifikationen von Daten ermöglichen. Die Konfiguration von FileProviders sollte ebenfalls überprüft werden.
- **Broadcast-Empfänger und URL-Schemata**: Diese Komponenten könnten für Ausnutzungen verwendet werden, wobei besonderes Augenmerk darauf gelegt werden sollte, wie URL-Schemata für Eingabeschwachstellen verwaltet werden.
@ -89,8 +89,8 @@ Aus der **strings.xml**-Datei können sensible Informationen wie API-Schlüssel,
### Tapjacking
**Tapjacking** ist ein Angriff, bei dem eine **bösartige** **Anwendung** gestartet wird und sich **oberhalb einer Opferanwendung positioniert**. Sobald sie die Opfer-App sichtbar verdeckt, ist ihre Benutzeroberfläche so gestaltet, dass sie den Benutzer dazu verleitet, mit ihr zu interagieren, während sie die Interaktion an die Opfer-App weiterleitet.\
In der Tat **blendet es den Benutzer aus, sodass er nicht weiß, dass er tatsächlich Aktionen in der Opfer-App ausführt**.
**Tapjacking** ist ein Angriff, bei dem eine **bösartige** **Anwendung** gestartet wird und sich **oberhalb einer Opferanwendung positioniert**. Sobald sie die Opferanwendung sichtbar verdeckt, ist ihre Benutzeroberfläche so gestaltet, dass sie den Benutzer dazu verleitet, mit ihr zu interagieren, während sie die Interaktion an die Opferanwendung weitergibt.\
In der Tat **blendet es den Benutzer aus, sodass er nicht weiß, dass er tatsächlich Aktionen in der Opferanwendung ausführt**.
Weitere Informationen finden Sie in:
@ -100,7 +100,7 @@ tapjacking.md
### Task Hijacking
Eine **Aktivität**, deren **`launchMode`** auf **`singleTask`** ohne definierte `taskAffinity` gesetzt ist, ist anfällig für Task Hijacking. Das bedeutet, dass eine **Anwendung** installiert werden kann und, wenn sie vor der echten Anwendung gestartet wird, die **Aufgabe der echten Anwendung übernehmen könnte** (sodass der Benutzer mit der **bösartigen Anwendung interagiert, während er denkt, er benutze die echte**).
Eine **Aktivität**, deren **`launchMode`** auf **`singleTask`** ohne definierte `taskAffinity` gesetzt ist, ist anfällig für Task Hijacking. Das bedeutet, dass eine **Anwendung** installiert werden kann und, wenn sie vor der echten Anwendung gestartet wird, die **Aufgabe der echten Anwendung übernehmen** könnte (sodass der Benutzer mit der **bösartigen Anwendung interagiert, während er denkt, er verwendet die echte**).
Weitere Informationen finden Sie in:
@ -112,12 +112,12 @@ android-task-hijacking.md
**Interner Speicher**
In Android sind Dateien, die im **internen** Speicher **gespeichert** werden, **so konzipiert**, dass sie **ausschließlich** von der **App**, die sie **erstellt** hat, **zugänglich** sind. Diese Sicherheitsmaßnahme wird vom Android-Betriebssystem **durchgesetzt** und ist im Allgemeinen ausreichend für die Sicherheitsbedürfnisse der meisten Anwendungen. Entwickler nutzen jedoch manchmal Modi wie `MODE_WORLD_READABLE` und `MODE_WORLD_WRITABLE`, um **zuzulassen**, dass Dateien zwischen verschiedenen Anwendungen **geteilt** werden. Diese Modi **beschränken jedoch nicht den Zugriff** auf diese Dateien durch andere Anwendungen, einschließlich potenziell bösartiger.
In Android sind Dateien, die im **internen** Speicher **gespeichert** sind, **so konzipiert**, dass sie **ausschließlich** von der **App**, die sie **erstellt** hat, **zugänglich** sind. Diese Sicherheitsmaßnahme wird vom Android-Betriebssystem **durchgesetzt** und ist im Allgemeinen ausreichend für die Sicherheitsbedürfnisse der meisten Anwendungen. Entwickler nutzen jedoch manchmal Modi wie `MODE_WORLD_READABLE` und `MODE_WORLD_WRITABLE`, um **Dateien** zwischen verschiedenen Anwendungen **zu teilen**. Diese Modi **beschränken jedoch nicht den Zugriff** auf diese Dateien durch andere Anwendungen, einschließlich potenziell bösartiger.
1. **Statische Analyse:**
- **Stellen Sie sicher**, dass die Verwendung von `MODE_WORLD_READABLE` und `MODE_WORLD_WRITABLE` **sorgfältig geprüft** wird. Diese Modi **könnten potenziell** Dateien **unbeabsichtigtem oder unbefugtem Zugriff** aussetzen.
2. **Dynamische Analyse:**
- **Überprüfen** Sie die **Berechtigungen**, die auf Dateien gesetzt sind, die von der App erstellt wurden. Überprüfen Sie insbesondere, ob Dateien **so eingestellt sind, dass sie weltweit lesbar oder schreibbar sind**. Dies kann ein erhebliches Sicherheitsrisiko darstellen, da es **jeder Anwendung**, die auf dem Gerät installiert ist, unabhängig von ihrer Herkunft oder Absicht, **ermöglicht, diese Dateien zu lesen oder zu modifizieren**.
- **Überprüfen** Sie die **Berechtigungen**, die für Dateien festgelegt sind, die von der App erstellt wurden. Überprüfen Sie insbesondere, ob Dateien **so eingestellt sind, dass sie weltweit lesbar oder schreibbar sind**. Dies kann ein erhebliches Sicherheitsrisiko darstellen, da es **jeder Anwendung**, die auf dem Gerät installiert ist, unabhängig von ihrer Herkunft oder Absicht, **ermöglicht, diese Dateien zu lesen oder zu modifizieren**.
**Externer Speicher**
@ -135,8 +135,8 @@ Beim Umgang mit Dateien auf **externem Speicher**, wie SD-Karten, sollten bestim
Externer Speicher kann in `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard` **zugegriffen** werden.
> [!TIP]
> Ab Android 4.4 (**API 17**) hat die SD-Karte eine Verzeichnisstruktur, die **den Zugriff einer App auf das Verzeichnis, das speziell für diese App vorgesehen ist, einschränkt**. Dies verhindert, dass bösartige Anwendungen Lese- oder Schreibzugriff auf die Dateien einer anderen App erhalten.
> [!TIPP]
> Seit Android 4.4 (**API 17**) hat die SD-Karte eine Verzeichnisstruktur, die **den Zugriff einer App auf das Verzeichnis, das speziell für diese App vorgesehen ist, einschränkt**. Dies verhindert, dass bösartige Anwendungen Lese- oder Schreibzugriff auf die Dateien einer anderen App erhalten.
**Sensible Daten im Klartext gespeichert**
@ -154,11 +154,11 @@ sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
```
Eine gute Möglichkeit, dies zu testen, besteht darin, den Datenverkehr mit einem Proxy wie Burp zu erfassen, ohne das Burp CA-Zertifikat auf dem Gerät zu autorisieren. Außerdem können Sie mit Burp ein Zertifikat für einen anderen Hostnamen generieren und verwenden.
### Defekte Kryptografie
### Gebrochene Kryptografie
**Schlechte Schlüsselverwaltungsprozesse**
Einige Entwickler speichern sensible Daten im lokalen Speicher und verschlüsseln sie mit einem im Code hartcodierten/vorhersehbaren Schlüssel. Dies sollte nicht geschehen, da einige Reverse-Engineering-Aktivitäten Angreifern ermöglichen könnten, die vertraulichen Informationen zu extrahieren.
Einige Entwickler speichern sensible Daten im lokalen Speicher und verschlüsseln sie mit einem im Code hardcodierten/vorhersehbaren Schlüssel. Dies sollte nicht geschehen, da einige Reverse-Engineering-Angriffe es Angreifern ermöglichen könnten, die vertraulichen Informationen zu extrahieren.
**Verwendung unsicherer und/oder veralteter Algorithmen**
@ -194,7 +194,7 @@ Laut diesem [**Blogbeitrag**](https://clearbluejar.github.io/posts/desuperpackin
### Automatisierte statische Codeanalyse
Das Tool [**mariana-trench**](https://github.com/facebook/mariana-trench) ist in der Lage, **Schwachstellen** durch **Scannen** des **Codes** der Anwendung zu finden. Dieses Tool enthält eine Reihe von **bekannten Quellen** (die dem Tool die **Stellen** anzeigen, an denen die **Eingabe** **vom Benutzer** **kontrolliert** wird), **Senken** (die dem Tool **gefährliche** **Stellen** anzeigen, an denen bösartige Benutzereingaben Schäden verursachen könnten) und **Regeln**. Diese Regeln zeigen die **Kombination** von **Quellen-Senken**, die auf eine Schwachstelle hinweisen.
Das Tool [**mariana-trench**](https://github.com/facebook/mariana-trench) ist in der Lage, **Schwachstellen** durch **Scannen** des **Codes** der Anwendung zu finden. Dieses Tool enthält eine Reihe von **bekannten Quellen** (die dem Tool die **Stellen** anzeigen, an denen die **Eingabe** **vom Benutzer** **kontrolliert** wird), **Senken** (die dem Tool **gefährliche** **Stellen** anzeigen, an denen bösartige Benutzereingaben Schäden verursachen könnten) und **Regeln**. Diese Regeln geben die **Kombination** von **Quellen-Senken** an, die auf eine Schwachstelle hinweisen.
Mit diesem Wissen wird **mariana-trench den Code überprüfen und mögliche Schwachstellen darin finden**.
@ -227,7 +227,7 @@ content-protocol.md
## Dynamische Analyse
> Zunächst benötigen Sie eine Umgebung, in der Sie die Anwendung und die gesamte Umgebung (Burp CA-Zertifikat, Drozer und Frida hauptsächlich) installieren können. Daher wird ein gerootetes Gerät (emuliert oder nicht) dringend empfohlen.
> Zunächst benötigen Sie eine Umgebung, in der Sie die Anwendung und die gesamte Umgebung (Burp CA-Zertifikat, Drozer und Frida hauptsächlich) installieren können. Daher ist ein gerootetes Gerät (emuliert oder nicht) äußerst empfehlenswert.
### Online-Dynamische Analyse
@ -254,13 +254,13 @@ avd-android-virtual-device.md
- [**Nox**](https://es.bignox.com) (Kostenlos, unterstützt jedoch kein Frida oder Drozer).
> [!TIP]
> Denken Sie daran, dass beim Erstellen eines neuen Emulators auf einer beliebigen Plattform der Emulator langsamer läuft, je größer der Bildschirm ist. Wählen Sie also nach Möglichkeit kleine Bildschirme aus.
> Denken Sie daran, dass beim Erstellen eines neuen Emulators auf einer beliebigen Plattform der Emulator umso langsamer läuft, je größer der Bildschirm ist. Wählen Sie also nach Möglichkeit kleine Bildschirme aus.
Um **Google-Dienste** (wie den App Store) in Genymotion zu installieren, müssen Sie auf die rot markierte Schaltfläche im folgenden Bild klicken:
![](<../../images/image (277).png>)
Beachten Sie auch, dass Sie in der **Konfiguration der Android-VM in Genymotion** den **Bridge-Netzwerkmodus** auswählen können (dies ist nützlich, wenn Sie von einer anderen VM mit den Tools auf die Android-VM zugreifen möchten).
Beachten Sie auch, dass Sie in der **Konfiguration der Android-VM in Genymotion** den **Bridge-Netzwerkmodus** auswählen können (dies wird nützlich sein, wenn Sie von einer anderen VM mit den Tools auf die Android-VM zugreifen möchten).
#### Verwendung eines physischen Geräts
@ -279,21 +279,21 @@ Sie müssen die **Debugging**-Optionen aktivieren, und es wäre gut, wenn Sie es
**Protokollierung**
Entwickler sollten vorsichtig sein, **Debugging-Informationen** öffentlich zugänglich zu machen, da dies zu sensiblen Datenlecks führen kann. Die Tools [**pidcat**](https://github.com/JakeWharton/pidcat) und `adb logcat` werden empfohlen, um Anwendungsprotokolle zu überwachen, um sensible Informationen zu identifizieren und zu schützen. **Pidcat** wird wegen seiner Benutzerfreundlichkeit und Lesbarkeit bevorzugt.
Entwickler sollten vorsichtig sein, **Debugging-Informationen** öffentlich zugänglich zu machen, da dies zu sensiblen Datenlecks führen kann. Die Tools [**pidcat**](https://github.com/JakeWharton/pidcat) und `adb logcat` werden empfohlen, um Anwendungsprotokolle zu überwachen und sensible Informationen zu identifizieren und zu schützen. **Pidcat** wird wegen seiner Benutzerfreundlichkeit und Lesbarkeit bevorzugt.
> [!WARNING]
> Beachten Sie, dass ab **neueren Versionen als Android 4.0** **Anwendungen nur auf ihre eigenen Protokolle zugreifen können**. Anwendungen können also nicht auf die Protokolle anderer Apps zugreifen.\
> Dennoch wird empfohlen, **sensible Informationen nicht zu protokollieren**.
> Dennoch wird weiterhin empfohlen, **sensible Informationen nicht zu protokollieren**.
**Zwischenablage-Caching**
Das **zwischenablagebasierte** Framework von Android ermöglicht die Copy-Paste-Funktionalität in Apps, birgt jedoch ein Risiko, da **andere Anwendungen** auf die Zwischenablage **zugreifen** können, was potenziell sensible Daten offenlegen könnte. Es ist wichtig, die **Copy/Paste**-Funktionen für sensible Abschnitte einer Anwendung, wie z.B. Kreditkartendetails, zu deaktivieren, um Datenlecks zu verhindern.
Das **zwischenablagebasierte** Framework von Android ermöglicht die Copy-Paste-Funktionalität in Apps, birgt jedoch ein Risiko, da **andere Anwendungen** auf die Zwischenablage **zugreifen** können, was potenziell sensible Daten offenlegen könnte. Es ist wichtig, die **Copy/Paste**-Funktionen für sensible Abschnitte einer Anwendung, wie z.B. Kreditkartendaten, zu deaktivieren, um Datenlecks zu verhindern.
**Absturzprotokolle**
Wenn eine Anwendung **abstürzt** und **Protokolle speichert**, können diese Protokolle Angreifern helfen, insbesondere wenn die Anwendung nicht umgekehrt werden kann. Um dieses Risiko zu mindern, vermeiden Sie das Protokollieren bei Abstürzen, und wenn Protokolle über das Netzwerk übertragen werden müssen, stellen Sie sicher, dass sie über einen SSL-Kanal zur Sicherheit gesendet werden.
Als Pentester, **versuchen Sie, einen Blick auf diese Protokolle zu werfen**.
Als Pentester sollten Sie **diese Protokolle überprüfen**.
**Analysedaten, die an Dritte gesendet werden**
@ -304,23 +304,23 @@ Anwendungen integrieren häufig Dienste wie Google Adsense, die unbeabsichtigt *
Die meisten Anwendungen verwenden **interne SQLite-Datenbanken**, um Informationen zu speichern. Während des Pentests sollten Sie einen **Blick** auf die **Datenbanken** werfen, die erstellt wurden, die Namen der **Tabellen** und **Spalten** sowie alle **gespeicherten Daten**, da Sie **sensible Informationen** finden könnten (was eine Schwachstelle darstellen würde).\
Datenbanken sollten sich in `/data/data/the.package.name/databases` wie `/data/data/com.mwr.example.sieve/databases` befinden.
Wenn die Datenbank vertrauliche Informationen speichert und **verschlüsselt** ist, Sie jedoch das **Passwort** innerhalb der Anwendung **finden** können, ist das immer noch eine **Schwachstelle**.
Wenn die Datenbank vertrauliche Informationen speichert und **verschlüsselt** ist, Sie jedoch das **Passwort** innerhalb der Anwendung **finden** können, ist dies immer noch eine **Schwachstelle**.
Zählen Sie die Tabellen mit `.tables` und zählen Sie die Spalten der Tabellen mit `.schema <table_name>`.
### Drozer (Exploiting Activities, Content Providers und Services)
Aus [Drozer-Dokumentation](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** ermöglicht es Ihnen, **die Rolle einer Android-App zu übernehmen** und mit anderen Apps zu interagieren. Es kann **alles tun, was eine installierte Anwendung tun kann**, wie die Nutzung des Inter-Process Communication (IPC)-Mechanismus von Android und die Interaktion mit dem zugrunde liegenden Betriebssystem.\
Drozer ist ein nützliches Tool, um **exportierte Aktivitäten, exportierte Dienste und Content Providers** auszunutzen, wie Sie in den folgenden Abschnitten lernen werden.
Drozer ist ein nützliches Tool, um **exportierte Aktivitäten, exportierte Dienste und Content Provider** auszunutzen, wie Sie in den folgenden Abschnitten lernen werden.
### Ausnutzen exportierter Aktivitäten
[**Lesen Sie dies, wenn Sie auffrischen möchten, was eine Android-Aktivität ist.**](android-applications-basics.md#launcher-activity-and-other-activities)\
Denken Sie auch daran, dass der Code einer Aktivität mit der **`onCreate`**-Methode beginnt.
Denken Sie auch daran, dass der Code einer Aktivität in der **`onCreate`**-Methode beginnt.
**Autorisierungsumgehung**
Wenn eine Aktivität exportiert wird, können Sie ihren Bildschirm von einer externen App aus aufrufen. Daher könnten Sie, wenn eine Aktivität mit **sensiblen Informationen** **exportiert** wird, die **Authentifizierungs**-Mechanismen **umgehen**, um darauf zuzugreifen.
Wenn eine Aktivität exportiert wird, können Sie ihren Bildschirm von einer externen App aus aufrufen. Daher könnten Sie, wenn eine Aktivität mit **sensiblen Informationen** **exportiert** wird, die **Authentifizierungs**mechanismen **umgehen**, um darauf zuzugreifen.
[**Erfahren Sie, wie Sie exportierte Aktivitäten mit Drozer ausnutzen.**](drozer-tutorial/index.html#activities)
@ -338,16 +338,16 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
**Sensibler Informationsleck**
**Aktivitäten können auch Ergebnisse zurückgeben**. Wenn Sie es schaffen, eine exportierte und ungeschützte Aktivität zu finden, die die **`setResult`**-Methode aufruft und **sensible Informationen zurückgibt**, gibt es ein sensibles Informationsleck.
**Aktivitäten können auch Ergebnisse zurückgeben**. Wenn Sie es schaffen, eine exportierte und ungeschützte Aktivität zu finden, die die **`setResult`**-Methode aufruft und **sensible Informationen zurückgibt**, liegt ein sensibler Informationsleck vor.
#### Tapjacking
Wenn Tapjacking nicht verhindert wird, könnten Sie die exportierte Aktivität missbrauchen, um den **Benutzer unerwartete Aktionen** ausführen zu lassen. Für weitere Informationen über [**was Tapjacking ist, folgen Sie dem Link**](#tapjacking).
### Ausnutzen von Content Providern - Zugriff auf und Manipulation sensibler Informationen
### Ausnutzen von Content Providern - Zugriff auf und Manipulation von sensiblen Informationen
[**Lesen Sie dies, wenn Sie auffrischen möchten, was ein Content Provider ist.**](android-applications-basics.md#content-provider)\
Content Provider werden im Grunde verwendet, um **Daten zu teilen**. Wenn eine App verfügbare Content Provider hat, können Sie möglicherweise **sensible** Daten von ihnen **extrahieren**. Es ist auch interessant, mögliche **SQL-Injection**- und **Path Traversal**-Angriffe zu testen, da sie anfällig sein könnten.
Content Provider werden im Grunde verwendet, um **Daten zu teilen**. Wenn eine App verfügbare Content Provider hat, können Sie möglicherweise **sensible** Daten von ihnen **extrahieren**. Es ist auch interessant, mögliche **SQL-Injektionen** und **Path Traversals** zu testen, da sie anfällig sein könnten.
[**Erfahren Sie, wie Sie Content Provider mit Drozer ausnutzen.**](drozer-tutorial/index.html#content-providers)
@ -394,7 +394,7 @@ Jedes Mal, wenn du einen Deep Link findest, überprüfe, dass **er keine sensibl
**Parameter im Pfad**
Du **musst auch überprüfen, ob ein Deep Link einen Parameter im Pfad** der URL verwendet, wie: `https://api.example.com/v1/users/{username}`. In diesem Fall kannst du eine Pfadtraversierung erzwingen, indem du auf etwas wie: `example://app/users?username=../../unwanted-endpoint%3fparam=value` zugreifst.\
Beachte, dass du, wenn du die richtigen Endpunkte innerhalb der Anwendung findest, möglicherweise eine **Open Redirect** verursachen kannst (wenn ein Teil des Pfades als Domainname verwendet wird), **Accountübernahme** (wenn du die Benutzerdaten ohne CSRF-Token ändern kannst und der verwundbare Endpunkt die richtige Methode verwendet) und jede andere Verwundbarkeit. Mehr [Info dazu hier](http://dphoeniixx.com/2020/12/13-2/).
Beachte, dass du, wenn du die richtigen Endpunkte innerhalb der Anwendung findest, möglicherweise eine **Open Redirect** verursachen kannst (wenn ein Teil des Pfades als Domainname verwendet wird), **Accountbernahme** (wenn du die Benutzerdaten ohne CSRF-Token ändern kannst und der verwundbare Endpunkt die richtige Methode verwendet) und jede andere Verwundbarkeit. Mehr [Info dazu hier](http://dphoeniixx.com/2020/12/13-2/).
**Weitere Beispiele**
@ -404,7 +404,7 @@ Ein [interessanter Bug-Bounty-Bericht](https://hackerone.com/reports/855618) üb
- **Zertifikate werden von Android-Anwendungen nicht immer ordnungsgemäß überprüft**. Es ist üblich, dass diese Anwendungen Warnungen ignorieren und selbstsignierte Zertifikate akzeptieren oder in einigen Fällen auf HTTP-Verbindungen zurückgreifen.
- **Verhandlungen während des SSL/TLS-Handshakes sind manchmal schwach** und verwenden unsichere Cipher-Suiten. Diese Verwundbarkeit macht die Verbindung anfällig für Man-in-the-Middle (MITM)-Angriffe, die es Angreifern ermöglichen, die Daten zu entschlüsseln.
- **Leckage privater Informationen** ist ein Risiko, wenn Anwendungen über sichere Kanäle authentifizieren, dann jedoch über unsichere Kanäle für andere Transaktionen kommunizieren. Dieser Ansatz schützt sensible Daten, wie Sitzungscookies oder Benutzerdetails, nicht vor Abfangen durch böswillige Akteure.
- **Leckage privater Informationen** ist ein Risiko, wenn Anwendungen über sichere Kanäle authentifizieren, aber dann über unsichere Kanäle für andere Transaktionen kommunizieren. Dieser Ansatz schützt sensible Daten, wie Sitzungscookies oder Benutzerdetails, nicht vor Abfangen durch böswillige Akteure.
#### Zertifikatsverifizierung
@ -426,7 +426,7 @@ Wenn **Flutter** verwendet wird, musst du die Anweisungen auf [**dieser Seite**]
Wenn SSL-Pinning implementiert ist, wird es notwendig, es zu umgehen, um HTTPS-Verkehr zu inspizieren. Verschiedene Methoden stehen dafür zur Verfügung:
- Automatisch **modifiziere** die **apk**, um SSL-Pinning mit [**apk-mitm**](https://github.com/shroudedcode/apk-mitm) zu **umgehen**. Der größte Vorteil dieser Option ist, dass du keinen Root-Zugriff benötigst, um das SSL-Pinning zu umgehen, aber du musst die Anwendung deinstallieren und die neue installieren, und das funktioniert nicht immer.
- Automatisch **modifiziere** die **apk**, um SSL-Pinning mit [**apk-mitm**](https://github.com/shroudedcode/apk-mitm) zu **umgehen**. Der größte Vorteil dieser Option ist, dass du kein Root benötigst, um das SSL-Pinning zu umgehen, aber du musst die Anwendung deinstallieren und die neue installieren, und das funktioniert nicht immer.
- Du könntest **Frida** (unten besprochen) verwenden, um diesen Schutz zu umgehen. Hier hast du eine Anleitung zur Verwendung von Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
- Du kannst auch versuchen, SSL-Pinning **automatisch zu umgehen** mit [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
- Du kannst auch versuchen, SSL-Pinning **automatisch zu umgehen** mit **MobSF dynamischer Analyse** (unten erklärt).
@ -443,14 +443,20 @@ Es ist auch wichtig, nach häufigen Webverwundbarkeiten innerhalb der Anwendung
Wenn du Android-Anwendungen pentesten möchtest, musst du wissen, wie man Frida verwendet.
- Lerne, wie man Frida verwendet: [**Frida-Tutorial**](frida-tutorial/index.html)
- Eine "GUI" für Aktionen mit Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
- Einige "GUI" für Aktionen mit Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
- Ojection ist großartig, um die Verwendung von Frida zu automatisieren: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
- Du kannst hier einige großartige Frida-Skripte finden: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
- Versuche, Anti-Debugging / Anti-Frida-Mechanismen zu umgehen, indem du Frida wie in [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) angegeben lädst (Tool [linjector](https://github.com/erfur/linjector-rs))
- Versuche, Anti-Debugging / Anti-Frida-Mechanismen zu umgehen, indem du Frida wie in [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) angegeben lädst (Tool [linjector](https://github.com/erfur/linjector-rs)).
#### Anti-Instrumentierung & SSL-Pinning-Umgehungs-Workflow
{{#ref}}
android-anti-instrumentation-and-ssl-pinning-bypass.md
{{#endref}}
### **Speicher dumpen - Fridump**
Überprüfe, ob die Anwendung sensible Informationen im Speicher speichert, die sie nicht speichern sollte, wie Passwörter oder Mnemoniken.
Überprüfe, ob die Anwendung sensible Informationen im Speicher speichert, die sie nicht speichern sollte, wie Passwörter oder Merkhilfen.
Mit [**Fridump3**](https://github.com/rootbsd/fridump3) kannst du den Speicher der App dumpen mit:
```bash
@ -489,7 +495,7 @@ Wenn dieser Schnappschuss jedoch **sensible Informationen** enthält, könnte je
Die Schnappschüsse werden normalerweise unter folgendem Pfad gespeichert: **`/data/system_ce/0/snapshots`**
Android bietet eine Möglichkeit, die **Erfassung von Screenshots zu verhindern, indem der FLAG_SECURE** Layoutparameter gesetzt wird. Durch die Verwendung dieses Flags werden die Fensterinhalte als sicher behandelt, wodurch sie nicht in Screenshots erscheinen oder auf nicht sicheren Displays angezeigt werden können.
Android bietet eine Möglichkeit, die **Screenshot-Erfassung zu verhindern, indem der FLAG_SECURE** Layoutparameter gesetzt wird. Durch die Verwendung dieses Flags werden die Fensterinhalte als sicher behandelt, wodurch sie nicht in Screenshots erscheinen oder auf nicht sicheren Displays angezeigt werden können.
```bash
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
```
@ -507,7 +513,7 @@ Die Gefahr liegt darin, Angreifern zu ermöglichen, nicht exportierte App-Kompon
- **Intent Injection** ist ähnlich wie das Open Redirect-Problem im Web.
- Exploits beinhalten das Übergeben von `Intent`-Objekten als Extras, die umgeleitet werden können, um unsichere Operationen auszuführen.
- Es kann nicht exportierte Komponenten und Content-Provider für Angreifer zugänglich machen.
- Es kann nicht exportierte Komponenten und Content-Provider Angreifern aussetzen.
- Die URL-zu-`Intent`-Umwandlung von `WebView` kann unbeabsichtigte Aktionen erleichtern.
### Android Client Side Injections und andere
@ -530,7 +536,7 @@ Wahrscheinlich kennen Sie diese Art von Schwachstellen aus dem Web. Sie müssen
![](<../../images/image (866).png>)
**Schwachstellenbewertung der Anwendung** mithilfe eines ansprechenden webbasierten Frontends. Sie können auch eine dynamische Analyse durchführen (aber Sie müssen die Umgebung vorbereiten).
**Schwachstellenbewertung der Anwendung** mit einem schönen webbasierten Frontend. Sie können auch eine dynamische Analyse durchführen (aber Sie müssen die Umgebung vorbereiten).
```bash
docker pull opensecurity/mobile-security-framework-mobsf
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
@ -556,8 +562,8 @@ Ab Android **Versionen > 5** wird **automatisch Frida gestartet** und die global
Standardmäßig werden auch einige Frida-Skripte verwendet, um **SSL-Pinning**, **Root-Erkennung** und **Debugger-Erkennung** zu **umgehen** und um **interessante APIs** zu **überwachen**.\
MobSF kann auch **exportierte Aktivitäten aufrufen**, **Screenshots** davon machen und sie für den Bericht **speichern**.
Um den dynamischen Test zu **starten**, drücken Sie die grüne Schaltfläche: "**Start Instrumentation**". Drücken Sie auf "**Frida Live Logs**", um die von den Frida-Skripten generierten Protokolle zu sehen, und auf "**Live API Monitor**", um alle Aufrufe an gehookte Methoden, übergebene Argumente und zurückgegebene Werte zu sehen (dies erscheint nach dem Drücken von "Start Instrumentation").\
MobSF ermöglicht es Ihnen auch, Ihre eigenen **Frida-Skripte** zu laden (um die Ergebnisse Ihrer Frida-Skripte an MobSF zu senden, verwenden Sie die Funktion `send()`). Es hat auch **mehrere vorgefertigte Skripte**, die Sie laden können (Sie können weitere in `MobSF/DynamicAnalyzer/tools/frida_scripts/others/` hinzufügen), wählen Sie einfach **diese aus**, drücken Sie "**Load**" und drücken Sie "**Start Instrumentation**" (Sie können die Protokolle dieser Skripte in "**Frida Live Logs**" sehen).
Um den dynamischen Test zu **starten**, drücken Sie die grüne Schaltfläche: "**Start Instrumentation**". Drücken Sie auf "**Frida Live Logs**", um die von den Frida-Skripten generierten Protokolle zu sehen, und auf "**Live API Monitor**", um alle Aufrufe an gehookte Methoden, übergebene Argumente und zurückgegebene Werte zu sehen (dies wird nach dem Drücken von "Start Instrumentation" angezeigt).\
MobSF ermöglicht es Ihnen auch, Ihre eigenen **Frida-Skripte** zu laden (um die Ergebnisse Ihrer Frida-Skripte an MobSF zu senden, verwenden Sie die Funktion `send()`). Es hat auch **mehrere vorgefertigte Skripte**, die Sie laden können (Sie können weitere in `MobSF/DynamicAnalyzer/tools/frida_scripts/others/` hinzufügen), wählen Sie einfach **sie aus**, drücken Sie "**Load**" und drücken Sie "**Start Instrumentation**" (Sie können die Protokolle dieser Skripte in "**Frida Live Logs**" sehen).
![](<../../images/image (419).png>)
@ -585,8 +591,8 @@ receivers
```
**HTTP-Tools**
Wenn der HTTP-Verkehr erfasst wird, können Sie eine unschöne Ansicht des erfassten Verkehrs im "**HTTP(S) Traffic**" unten oder eine schönere Ansicht im grünen Button "**Start HTTPTools**" sehen. Von der zweiten Option aus können Sie die **erfassten Anfragen** an **Proxys** wie Burp oder Owasp ZAP **senden**.\
Um dies zu tun, _Burp einschalten -->_ _Intercept ausschalten --> im MobSB HTTPTools die Anfrage auswählen_ --> drücken Sie auf "**Send to Fuzzer**" --> _Proxy-Adresse auswählen_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)).
Wenn der HTTP-Verkehr erfasst wird, können Sie eine unschöne Ansicht des erfassten Verkehrs auf dem "**HTTP(S) Traffic**" unteren Bereich oder eine schönere Ansicht im grünen Bereich "**Start HTTPTools**" sehen. Von der zweiten Option aus können Sie die **erfassten Anfragen** an **Proxys** wie Burp oder Owasp ZAP **senden**.\
Um dies zu tun, _Burp einschalten -->_ _Intercept ausschalten --> im MobSB HTTPTools die Anfrage auswählen_ --> drücken Sie "**Send to Fuzzer**" --> _wählen Sie die Proxy-Adresse_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)).
Sobald Sie die dynamische Analyse mit MobSF abgeschlossen haben, können Sie auf "**Start Web API Fuzzer**" drücken, um **HTTP-Anfragen zu fuzzern** und nach Schwachstellen zu suchen.
@ -599,7 +605,7 @@ Sobald Sie die dynamische Analyse mit MobSF abgeschlossen haben, können Sie auf
### Unterstützte dynamische Analyse mit Inspeckage
Sie können das Tool von [**Inspeckage**](https://github.com/ac-pm/Inspeckage) beziehen.\
Sie können das Tool von [**Inspeckage**](https://github.com/ac-pm/Inspeckage) erhalten.\
Dieses Tool verwendet einige **Hooks**, um Ihnen mitzuteilen, **was in der Anwendung passiert**, während Sie eine **dynamische Analyse** durchführen.
### [Yaazhini](https://www.vegabird.com/yaazhini/)
@ -610,7 +616,7 @@ Dies ist ein **großartiges Tool zur Durchführung statischer Analysen mit einer
### [Qark](https://github.com/linkedin/qark)
Dieses Tool ist darauf ausgelegt, nach mehreren **sicherheitsrelevanten Android-Anwendungsschwachstellen** zu suchen, entweder im **Quellcode** oder in **verpackten APKs**. Das Tool ist auch **in der Lage, eine "Proof-of-Concept" deploybare APK** und **ADB-Befehle** zu erstellen, um einige der gefundenen Schwachstellen auszunutzen (exponierte Aktivitäten, Intents, Tapjacking...). Wie bei Drozer ist es nicht erforderlich, das Testgerät zu rooten.
Dieses Tool ist darauf ausgelegt, nach mehreren **sicherheitsrelevanten Schwachstellen in Android-Anwendungen** zu suchen, entweder im **Quellcode** oder in **verpackten APKs**. Das Tool ist auch **in der Lage, eine "Proof-of-Concept" deploybare APK** und **ADB-Befehle** zu erstellen, um einige der gefundenen Schwachstellen auszunutzen (Exponierte Aktivitäten, Intents, Tapjacking...). Wie bei Drozer ist es nicht erforderlich, das Testgerät zu rooten.
```bash
pip3 install --user qark # --user is only needed if not using a virtualenv
qark --apk path/to/my.apk
@ -630,9 +636,9 @@ reverse-apk relative/path/to/APP.apk
```
### [SUPER Android Analyzer](https://github.com/SUPERAndroidAnalyzer/super)
SUPER ist eine Befehlszeilenanwendung, die unter Windows, MacOS X und Linux verwendet werden kann und _.apk_-Dateien auf der Suche nach Sicherheitsanfälligkeiten analysiert. Dies geschieht durch das Dekomprimieren von APKs und das Anwenden einer Reihe von Regeln, um diese Sicherheitsanfälligkeiten zu erkennen.
SUPER ist eine Befehlszeilenanwendung, die unter Windows, MacOS X und Linux verwendet werden kann und _.apk_-Dateien auf Schwachstellen analysiert. Dies geschieht durch das Dekomprimieren von APKs und das Anwenden einer Reihe von Regeln, um diese Schwachstellen zu erkennen.
Alle Regeln sind in einer `rules.json`-Datei zentriert, und jedes Unternehmen oder Tester kann eigene Regeln erstellen, um das zu analysieren, was sie benötigen.
Alle Regeln sind in einer `rules.json`-Datei zentralisiert, und jedes Unternehmen oder Tester kann eigene Regeln erstellen, um das zu analysieren, was sie benötigen.
Laden Sie die neuesten Binärdateien von der [Download-Seite](https://superanalyzer.rocks/download.html) herunter.
```
@ -660,7 +666,7 @@ androbugs.exe -f [APK file]
```
### [Androwarn](https://github.com/maaaaz/androwarn)
**Androwarn** ist ein Tool, dessen Hauptziel es ist, potenziell bösartiges Verhalten, das von einer Android-Anwendung entwickelt wurde, zu erkennen und den Benutzer zu warnen.
**Androwarn** ist ein Tool, dessen Hauptziel es ist, den Benutzer über potenziell bösartiges Verhalten, das von einer Android-Anwendung entwickelt wurde, zu erkennen und zu warnen.
Die Erkennung erfolgt durch die **statische Analyse** des Dalvik-Bytecodes der Anwendung, dargestellt als **Smali**, mit der [`androguard`](https://github.com/androguard/androguard) Bibliothek.
@ -699,9 +705,9 @@ ProGuard wird als Teil des Android SDK verteilt und läuft beim Erstellen der An
### [DexGuard](https://www.guardsquare.com/dexguard)
Finden Sie eine Schritt-für-Schritt-Anleitung zur Deobfuskation der APK in [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
Finden Sie eine Schritt-für-Schritt-Anleitung zur Deobfuskation der APK unter [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
(Von dieser Anleitung) Das letzte Mal, als wir überprüft haben, war der Dexguard-Betriebsmodus:
(Von diesem Leitfaden) Das letzte Mal, als wir überprüft haben, war der Dexguard-Betriebsmodus:
- eine Ressource als InputStream laden;
- das Ergebnis an eine Klasse weitergeben, die von FilterInputStream erbt, um es zu entschlüsseln;

View File

@ -0,0 +1,203 @@
# Android Anti-Instrumentation & SSL Pinning Bypass (Frida/Objection)
{{#include ../../banners/hacktricks-training.md}}
Diese Seite bietet einen praktischen Workflow, um die dynamische Analyse gegen Android-Apps wiederzuerlangen, die Instrumentierung erkennen/blockieren oder TLS-Pinning durchsetzen. Sie konzentriert sich auf schnelle Triage, häufige Erkennungen und kopierbare Hooks/Taktiken, um diese zu umgehen, wenn möglich, ohne Repacking.
## Detection Surface (was Apps überprüfen)
- Root-Checks: su-Binärdatei, Magisk-Pfade, getprop-Werte, gängige Root-Pakete
- Frida/Debbuger-Checks (Java): Debug.isDebuggerConnected(), ActivityManager.getRunningAppProcesses(), getRunningServices(), Scannen von /proc, classpath, geladene libs
- Native Anti-Debug: ptrace(), Syscalls, anti-attach, Breakpoints, Inline-Hooks
- Frühe Init-Checks: Application.onCreate() oder Prozessstart-Hooks, die abstürzen, wenn Instrumentierung vorhanden ist
- TLS-Pinning: benutzerdefinierter TrustManager/HostnameVerifier, OkHttp CertificatePinner, Conscrypt-Pinning, native Pins
## Schritt 1 — Schneller Gewinn: Root mit Magisk DenyList verbergen
- Zygisk in Magisk aktivieren
- DenyList aktivieren, das Zielpaket hinzufügen
- Neustarten und erneut testen
Viele Apps suchen nur nach offensichtlichen Indikatoren (su/Magisk-Pfade/getprop). DenyList neutralisiert oft naive Checks.
Referenzen:
- Magisk (Zygisk & DenyList): https://github.com/topjohnwu/Magisk
## Schritt 2 — 30-Sekunden Frida Codeshare-Tests
Versuchen Sie gängige Drop-in-Skripte, bevor Sie tiefer eintauchen:
- anti-root-bypass.js
- anti-frida-detection.js
- hide_frida_gum.js
Beispiel:
```bash
frida -U -f com.example.app -l anti-frida-detection.js
```
Diese stutzen typischerweise Java-Root-/Debug-Überprüfungen, Prozess-/Dienstscans und native ptrace(). Nützlich bei leicht geschützten Apps; gehärtete Ziele benötigen möglicherweise maßgeschneiderte Hooks.
- Codeshare: https://codeshare.frida.re/
## Schritt 3 — Umgehung von Init-Zeit-Detektoren durch spätes Anhängen
Viele Erkennungen laufen nur während des Prozessstarts/onCreate(). Spawn-Zeit-Injektion (-f) oder Gadgets werden erkannt; das Anhängen nach dem Laden der Benutzeroberfläche kann durchrutschen.
```bash
# Launch the app normally (launcher/adb), wait for UI, then attach
frida -U -n com.example.app
# Or with Objection to attach to running process
aobjection --gadget com.example.app explore # if using gadget
```
Wenn dies funktioniert, halten Sie die Sitzung stabil und fahren Sie mit der Kartierung und den Stub-Überprüfungen fort.
## Schritt 4 — Kartierung der Erkennungslogik über Jadx und String-Suche
Statische Triage-Schlüsselwörter in Jadx:
- "frida", "gum", "root", "magisk", "ptrace", "su", "getprop", "debugger"
Typische Java-Muster:
```java
public boolean isFridaDetected() {
return getRunningServices().contains("frida");
}
```
Häufige APIs zur Überprüfung/Hooking:
- android.os.Debug.isDebuggerConnected
- android.app.ActivityManager.getRunningAppProcesses / getRunningServices
- java.lang.System.loadLibrary / System.load (native bridge)
- java.lang.Runtime.exec / ProcessBuilder (Befehlsabfragen)
- android.os.SystemProperties.get (Root/Emulator-Heuristiken)
## Schritt 5 — Laufzeit-Stubbing mit Frida (Java)
Überschreiben Sie benutzerdefinierte Schutzmaßnahmen, um sichere Werte ohne Repacking zurückzugeben:
```js
Java.perform(() => {
const Checks = Java.use('com.example.security.Checks');
Checks.isFridaDetected.implementation = function () { return false; };
// Neutralize debugger checks
const Debug = Java.use('android.os.Debug');
Debug.isDebuggerConnected.implementation = function () { return false; };
// Example: kill ActivityManager scans
const AM = Java.use('android.app.ActivityManager');
AM.getRunningAppProcesses.implementation = function () { return java.util.Collections.emptyList(); };
});
```
Frühe Abstürze triagieren? Klassen kurz bevor sie abstürzt dumpen, um wahrscheinlich erkennbare Namensräume zu identifizieren:
```js
Java.perform(() => {
Java.enumerateLoadedClasses({
onMatch: n => console.log(n),
onComplete: () => console.log('Done')
});
});
```
Protokollieren und neutralisieren Sie verdächtige Methoden, um den Ausführungsfluss zu bestätigen:
```js
Java.perform(() => {
const Det = Java.use('com.example.security.DetectionManager');
Det.checkFrida.implementation = function () {
console.log('checkFrida() called');
return false;
};
});
```
## Schritt 6 — Verfolgen Sie die JNI/nativen Pfad, wenn Java-Hooks fehlschlagen
Verfolgen Sie JNI-Einstiegspunkte, um native Loader und Erkennungsinitialisierungen zu lokalisieren:
```bash
frida-trace -n com.example.app -i "JNI_OnLoad"
```
Schnelle native Triage von gebündelten .so-Dateien:
```bash
# List exported symbols & JNI
nm -D libfoo.so | head
objdump -T libfoo.so | grep Java_
strings -n 6 libfoo.so | egrep -i 'frida|ptrace|gum|magisk|su|root'
```
Interaktive/native Umkehrung:
- Ghidra: https://ghidra-sre.org/
- r2frida: https://github.com/nowsecure/r2frida
Beispiel: neuter ptrace, um einfache Anti-Debug in libc zu besiegen:
```js
const ptrace = Module.findExportByName(null, 'ptrace');
if (ptrace) {
Interceptor.replace(ptrace, new NativeCallback(function () {
return -1; // pretend failure
}, 'int', ['int', 'int', 'pointer', 'pointer']));
}
```
Siehe auch: {{#ref}}
reversing-native-libraries.md
{{#endref}}
## Schritt 7 — Objection-Patching (Gadget einbetten / Grundlagen entfernen)
Wenn Sie Repacking gegenüber Laufzeithooks bevorzugen, versuchen Sie:
```bash
objection patchapk --source app.apk
```
Hinweise:
- Erfordert apktool; stellen Sie sicher, dass Sie eine aktuelle Version aus dem offiziellen Leitfaden verwenden, um Build-Probleme zu vermeiden: https://apktool.org/docs/install
- Gadget-Injektion ermöglicht Instrumentierung ohne Root, kann jedoch immer noch von stärkeren Init-Zeit-Überprüfungen erfasst werden.
Referenzen:
- Objection: https://github.com/sensepost/objection
## Schritt 8 — Fallback: Patchen Sie TLS-Pinning für Netzwerk-Sichtbarkeit
Wenn die Instrumentierung blockiert ist, können Sie den Datenverkehr weiterhin inspizieren, indem Sie das Pinning statisch entfernen:
```bash
apk-mitm app.apk
# Then install the patched APK and proxy via Burp/mitmproxy
```
- Tool: https://github.com/shroudedcode/apk-mitm
- Für Netzwerk-CA-Vertrauens-Tricks (und Android 7+ Benutzer-CA-Vertrauen) siehe:
{{#ref}}
make-apk-accept-ca-certificate.md
{{#endref}}
{{#ref}}
install-burp-certificate.md
{{#endref}}
## Nützliche Befehlsübersicht
```bash
# List processes and attach
frida-ps -Uai
frida -U -n com.example.app
# Spawn with a script (may trigger detectors)
frida -U -f com.example.app -l anti-frida-detection.js
# Trace native init
frida-trace -n com.example.app -i "JNI_OnLoad"
# Objection runtime
objection --gadget com.example.app explore
# Static TLS pinning removal
apk-mitm app.apk
```
## Tipps & Hinweise
- Bevorzuge das späte Anhängen über das Erzeugen, wenn Apps beim Start abstürzen
- Einige Erkennungen werden in kritischen Abläufen (z.B. Zahlung, Authentifizierung) erneut ausgeführt — halte Hooks während der Navigation aktiv
- Mische statische und dynamische Methoden: String-Suche in Jadx, um Klassen auszuwählen; dann Methoden hooken, um zur Laufzeit zu überprüfen
- Härtete Apps können Packager und native TLS-Pinning verwenden — erwarte, nativen Code zu reversieren
## Referenzen
- [Reversing Android Apps: Bypassing Detection Like a Pro](https://www.kayssel.com/newsletter/issue-12/)
- [Frida Codeshare](https://codeshare.frida.re/)
- [Objection](https://github.com/sensepost/objection)
- [apk-mitm](https://github.com/shroudedcode/apk-mitm)
- [Jadx](https://github.com/skylot/jadx)
- [Ghidra](https://ghidra-sre.org/)
- [r2frida](https://github.com/nowsecure/r2frida)
- [Apktool install guide](https://apktool.org/docs/install)
- [Magisk](https://github.com/topjohnwu/Magisk)
{{#include ../../banners/hacktricks-training.md}}