Wenn Sie in Ihrem Android-Projekt APIs von Drittanbietern importieren (Paketabhängigkeiten, generierte Bibliotheken, Quellcode usw.), gehen Sie davon aus, dass sie sich wie angekündigt verhalten werden. Der meiste Zeitcode ist nicht Open Source, er ist verschleiert oder nur kompiliert.
Gibt es eine Möglichkeit, den Zugriff dieser APIs auf wichtige Systemressourcen wie Netzwerk, Kontakte, Video und Audio, Standort zu kontrollieren?
Der beste Ansatz wäre, ihnen eine proxy
für die Systemressourcen bereitzustellen. Dies hätte folgende Vorteile:
Ich habe nicht gefunden, wie eine solche Lösung implementiert werden kann, da die vom Benutzer definierten Aktivitäten und Dienste die Dienste der APIs Dritter nicht steuern oder sogar verhindern können, dass sie direkte Aufrufe an eine öffentliche Android-Schnittstelle ausführen.
Die Lösung sollte keinen Root-Zugriff erfordern, da Sie dieses Steuerelement nicht außerhalb der Grenzen Ihrer eigenen App haben möchten.
Der Inhalt dieser Frage ist mit mehreren Fragen verbunden, die auf Besonderheiten dieser allgemeinen Frage eingehen ( Protokolldaten von Inhaltsanbietern , Netzwerkanfragen - das brachte mich dazu, über dieses Problem nachzudenken, während ich eine Antwort dafür suchte)
Hinweis : Die kurze Antwort ist nein, aber eine kann kreativ genug sein (vielleicht geht es bei nativen Hacks um dieses Problem - idk)
Erstellen Sie die Proxy-Klasse für Ihre gewünschte Android-Ressource, die Sie schützen möchten, in einem Paket namens com.myproxies (zB MediaRecorder, SensorManager, Camera, java.net.HTTPURLConnection). Im Proxy müssen Sie alle öffentlichen Methoden implementieren Die Klasse, die Sie verspotten, und Sie müssen eine Logik implementieren, die den Zugriff (Weiterleitung an die entsprechende Methode) oder die Ablehnung ermöglicht. Ein hilfreicher Schritt wäre, die Aufrufer der Methode .
Wenn Sie vorhaben, den Quellcode zu importieren, ändern Sie den Code, um das Paket in Ihren Proxy zu ändern (proguard kann dabei helfen).
Wenn Sie eine Bibliothek verwenden, erhalten Sie Jar Jar Links , ein Dienstprogramm, mit dem Sie Java-Bibliotheken einfach neu packen können und betten Sie sie in Ihre eigene Distribution ein und ändern Sie die Paketnamen intern in die einer Klasse in Ihrem Paket, die als Proxy dient.
Wenn Sie Maven- oder Gradle-Paketabhängigkeitsinjektionen verwenden, können Sie auch versuchen, Jar-Jar-Links zu importieren und das Paket-Refactoring zur Kompilierungszeit durchzuführen (nicht sehr sicher, ob es möglich ist).
Leider ist es sehr einfach, die API zu brechen, wie ich es selbst erlebt habe, und es ist eine Menge Handarbeit nötig.
Tags und Links android api proxy android-security